From 9ab88bacbb7dd02b214e19033bce3dd61cb52d50 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 24 Aug 2025 17:01:06 -0700 Subject: [PATCH 01/41] Updated translations from Lokalise on Sun Aug 24 12:32:21 PDT 2025 --- Common/hi.lproj/Intents.strings | 30 +- Common/it.lproj/Intents.strings | 4 +- .../it.lproj/Localizable.strings | 2 +- Loop/ar.lproj/Localizable.strings | 20 +- Loop/cs.lproj/Localizable.strings | 12 +- Loop/da.lproj/InfoPlist.strings | 3 + Loop/da.lproj/Localizable.strings | 256 ++++++++++++++++-- Loop/de.lproj/Localizable.strings | 59 ++-- Loop/es.lproj/Localizable.strings | 54 ++-- Loop/fi.lproj/Localizable.strings | 45 ++- Loop/fr.lproj/Localizable.strings | 215 ++++++++++++--- Loop/fr.lproj/Main.strings | 4 +- Loop/he.lproj/Localizable.strings | 39 ++- Loop/it.lproj/InfoPlist.strings | 2 +- Loop/it.lproj/Localizable.strings | 167 +++++++++--- Loop/ja.lproj/Localizable.strings | 24 +- Loop/nb.lproj/Localizable.strings | 161 ++++++++--- Loop/nl.lproj/Localizable.strings | 56 ++-- Loop/pl.lproj/Localizable.strings | 154 ++++++++--- Loop/pt-BR.lproj/Localizable.strings | 24 +- Loop/ro.lproj/Localizable.strings | 54 ++-- Loop/ru.lproj/Localizable.strings | 141 ++++++++-- Loop/sk.lproj/Localizable.strings | 18 +- Loop/sv.lproj/Localizable.strings | 45 ++- Loop/tr.lproj/Localizable.strings | 54 ++-- Loop/vi.lproj/Localizable.strings | 24 +- Loop/zh-Hans.lproj/Localizable.strings | 6 +- LoopUI/ar.lproj/InfoPlist.strings | 4 +- LoopUI/da.lproj/InfoPlist.strings | 4 +- LoopUI/de.lproj/InfoPlist.strings | 4 +- LoopUI/es.lproj/InfoPlist.strings | 4 +- LoopUI/fi.lproj/InfoPlist.strings | 4 +- LoopUI/fr.lproj/InfoPlist.strings | 4 +- LoopUI/fr.lproj/Localizable.strings | 2 +- LoopUI/he.lproj/InfoPlist.strings | 4 +- LoopUI/it.lproj/InfoPlist.strings | 4 +- LoopUI/ja.lproj/InfoPlist.strings | 2 +- LoopUI/nb.lproj/InfoPlist.strings | 4 +- LoopUI/nb.lproj/Localizable.strings | 4 +- LoopUI/nl.lproj/InfoPlist.strings | 4 +- LoopUI/pl.lproj/InfoPlist.strings | 4 +- LoopUI/pt-BR.lproj/InfoPlist.strings | 2 +- LoopUI/ro.lproj/InfoPlist.strings | 4 +- LoopUI/ru.lproj/InfoPlist.strings | 4 +- LoopUI/sv.lproj/InfoPlist.strings | 4 +- LoopUI/tr.lproj/InfoPlist.strings | 4 +- LoopUI/vi.lproj/InfoPlist.strings | 2 +- .../ar.lproj/Localizable.strings | 2 +- .../da.lproj/Localizable.strings | 4 +- .../de.lproj/Localizable.strings | 4 +- .../es.lproj/Localizable.strings | 4 +- .../fi.lproj/Localizable.strings | 4 +- .../fr.lproj/Localizable.strings | 4 +- .../he.lproj/Localizable.strings | 2 +- .../it.lproj/Localizable.strings | 4 +- .../ja.lproj/Localizable.strings | 2 +- .../nb.lproj/Localizable.strings | 4 +- .../nl.lproj/Localizable.strings | 4 +- .../pl.lproj/Localizable.strings | 4 +- .../pt-BR.lproj/Localizable.strings | 2 +- .../ro.lproj/Localizable.strings | 4 +- .../ru.lproj/Localizable.strings | 4 +- .../sk.lproj/Localizable.strings | 2 +- .../sv.lproj/Localizable.strings | 4 +- .../tr.lproj/Localizable.strings | 4 +- .../vi.lproj/Localizable.strings | 2 +- WatchApp/nb.lproj/Interface.strings | 2 +- 67 files changed, 1221 insertions(+), 590 deletions(-) diff --git a/Common/hi.lproj/Intents.strings b/Common/hi.lproj/Intents.strings index 853af215c0..69202aa99c 100644 --- a/Common/hi.lproj/Intents.strings +++ b/Common/hi.lproj/Intents.strings @@ -1,24 +1,36 @@ -"80eo5o" = "Add Carb Entry"; - +/* (No Comment) */ "9KhaIS" = "I've set the preset"; -"I4OZy8" = "Enable Override Preset"; - -"OcNxIj" = "Add Carb Entry"; - -"XNNmtH" = "Enable preset in Loop"; - -"ZZ3mtM" = "Enable an override preset in Loop"; +/* (No Comment) */ +"80eo5o" = "Add Carb Entry"; +/* (No Comment) */ "b085BW" = "I wasn't able to set the preset."; +/* (No Comment) */ +"I4OZy8" = "Enable Override Preset"; + +/* (No Comment) */ "lYMuWV" = "Override Name"; +/* (No Comment) */ "nDKAmn" = "What's the name of the override you'd like to set?"; +/* (No Comment) */ +"OcNxIj" = "Add Carb Entry"; + +/* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; +/* (No Comment) */ +"XNNmtH" = "Enable preset in Loop"; + +/* (No Comment) */ "yBzwCL" = "Override Selection"; +/* (No Comment) */ "yc02Yq" = "Add a carb entry to Loop"; +/* (No Comment) */ +"ZZ3mtM" = "Enable an override preset in Loop"; + diff --git a/Common/it.lproj/Intents.strings b/Common/it.lproj/Intents.strings index 847d80d4eb..f89cd7b4e9 100644 --- a/Common/it.lproj/Intents.strings +++ b/Common/it.lproj/Intents.strings @@ -1,11 +1,11 @@ /* (No Comment) */ -"9KhaIS" = "Ho impostato la preimpostazione"; +"9KhaIS" = "Ho impostato il preset"; /* (No Comment) */ "80eo5o" = "Agg. Carb. Assunti"; /* (No Comment) */ -"b085BW" = "I wasn't able to set the preset."; +"b085BW" = "Non sono riuscito a impostare il preset."; /* (No Comment) */ "I4OZy8" = "Abilita Programma Alternativo"; diff --git a/Loop Status Extension/it.lproj/Localizable.strings b/Loop Status Extension/it.lproj/Localizable.strings index 9404086e35..a0659c388e 100644 --- a/Loop Status Extension/it.lproj/Localizable.strings +++ b/Loop Status Extension/it.lproj/Localizable.strings @@ -23,7 +23,7 @@ "dB" = "dB"; /* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Probabile Glic. %1$@"; +"Eventually %1$@" = "Alla fine %1$@"; /* The short unit display string for grams */ "g" = "g"; diff --git a/Loop/ar.lproj/Localizable.strings b/Loop/ar.lproj/Localizable.strings index 93db5473fa..e68508d647 100644 --- a/Loop/ar.lproj/Localizable.strings +++ b/Loop/ar.lproj/Localizable.strings @@ -200,7 +200,7 @@ "Disables" = "تعطيل"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "تجاهل"; /* The action hint of the workout mode toggle button when disabled */ @@ -302,12 +302,12 @@ "No connected devices, or failure during device connection" = "لا يوجد أجهزة متصلة, أو يوجد خطأ أثناء الاتصال"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "موافق"; /* Notification Setting Status is On */ @@ -413,9 +413,9 @@ "U" = "وحدة"; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Unknown"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/cs.lproj/Localizable.strings b/Loop/cs.lproj/Localizable.strings index effad5b9ea..5437a77c22 100644 --- a/Loop/cs.lproj/Localizable.strings +++ b/Loop/cs.lproj/Localizable.strings @@ -63,12 +63,12 @@ "Off" = "Vypnuto"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ diff --git a/Loop/da.lproj/InfoPlist.strings b/Loop/da.lproj/InfoPlist.strings index 3c10346dc8..ec4d258296 100644 --- a/Loop/da.lproj/InfoPlist.strings +++ b/Loop/da.lproj/InfoPlist.strings @@ -4,6 +4,9 @@ /* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; +/* Privacy - NFC Scan Usage Description */ +"NFCReaderUsageDescription" = "Appen bruger NFC til at parre sig med diabetesapparater."; + /* Privacy - Bluetooth Always Usage Description */ "NSBluetoothAlwaysUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor."; diff --git a/Loop/da.lproj/Localizable.strings b/Loop/da.lproj/Localizable.strings index 45da938a4d..9e1de67566 100644 --- a/Loop/da.lproj/Localizable.strings +++ b/Loop/da.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ kunne ikke annullere din nuværende midlertidige basalrate, som er højere end den nye Max basalgrænse, du har indstillet. Dette kan resultere i en højere insulintilførsel end ønsket.\n\nOvervej at suspendere insulintilførslen manuelt og derefter straks genoptage den for at iværksætte basaltilførslen med den nye grænse på plads."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -58,6 +55,9 @@ /* Formats (1: carb start time) and (2: carb absorption duration) */ "%1$@ + %2$@" = "%1$@ + %2$@"; +/* App sounds title text (1: app name) */ +"%1$@ APP SOUNDS" = "%1$@ APP LYDE"; + /* Alert message for closed loop off informational modal. (1: app name) */ "%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ kører med Lukket Loop i positionen OFF. Din pumpe og CGM fortsætter med at fungere, men appen justerer ikke doseringen automatisk."; @@ -85,6 +85,9 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ "%1$@ v%2$@" = "%1$@ v%2$@"; +/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ +"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ holder op med at fungere i %2$@. Du bliver nødt til at rebuilde før det."; + /* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ "%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ holder op med at fungere i %2$@. Du skal opdatere inden da med en ny provisioneringsprofil."; @@ -92,9 +95,12 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; +/* No comment provided by engineer. */ +"⚠️" = "⚠️"; + /* Description of the prediction input effect for glucose momentum */ "15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min. glukoseregressionskoefficient (b₁), fortsætter med henfald over 30 minutter."; @@ -143,6 +149,9 @@ /* The string format describing active insulin. (1: localized insulin value description) */ "Active Insulin: %@" = "Aktiv insulin: %@"; +/* No comment provided by engineer. */ +"Add a new favorite food" = "Tilføj en ny favoritmad"; + /* Title of the user activity for adding carbs */ "Add Carb Entry" = "Tilføj kulhydrater"; @@ -164,16 +173,38 @@ "Adjusted for" = "Justeret for"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Administration af advarsler"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Alarmtilladelser"; +/* Alert Permissions descriptive text */ +"Alert Permissions and Mute Alerts" = "Advarselstilladelser og dæmpede advarsler"; + +/* Navigation title for algorithms experiments screen +The title of the Algorithm Experiments section in settings */ +"Algorithm Experiments" = "Algoritme-eksperimenter"; + +/* Algorithm Experiments description. */ +"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Algoritmeeksperimenter er valgfrie ændringer af Loop-algoritmen. Disse ændringer er mindre testet end standard Loop-algoritmen, så brug venligst omhyggeligt."; + /* The title of the section containing algorithm settings */ "Algorithm Settings" = "Indstillinger for algoritme"; +/* Warning text for when alerts are muted */ +"All Alerts Muted" = "Alle alarmer er slået fra"; + +/* Label for when mute alert will end */ +"All alerts muted until" = "Alle advarsler er slået fra indtil"; + +/* No comment provided by engineer. */ +"All Favorites" = "Alle favoritter"; + +/* Label for carb quantity entry row on carb entry screen */ +"Amount Consumed" = "Forbrugt mængde kulhydrater"; + /* The title of the Amplitude service */ "Amplitude" = "Amplitude"; @@ -216,6 +247,9 @@ /* Confirmation message for deleting a CGM */ "Are you sure you want to delete this CGM?" = "Er du sikker på, at du vil slette denne CGM?"; +/* No comment provided by engineer. */ +"Are you sure you want to delete this food?" = "Er du sikker på, at du vil slette denne mad?"; + /* Confirmation message for deleting a service */ "Are you sure you want to delete this service?" = "Er du sikker på, du vil slette denne service?"; @@ -303,6 +337,9 @@ /* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Kulhydrater absorberet (g) ÷ Kulhydratratio (g/E) × Insulinfølsomhed (%1$@/E)"; +/* No comment provided by engineer. */ +"Caution" = "Forsigtig"; + /* The notification alert describing a low pump battery */ "Change the pump battery immediately" = "Udskift pumpebatteri omgående"; @@ -324,8 +361,11 @@ /* Carb entry section footer text explaining absorption time */ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Vælg en længere absorptionstid ved større måltider, eller dem med fedt og proteiner. Det er blot hjælp til algoritmen og behøver ikke være nøjagtig."; +/* No comment provided by engineer. */ +"Choose Favorite:" = "Vælg favorit:"; + /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Luk"; /* The title text for the looping enabled switch cell */ @@ -368,6 +408,9 @@ The title text for the glucose target range schedule */ "Correction Range" = "Korrektionsområde"; +/* Format string for title of reset loop alert. (1: App name) */ +"Could Not Restart %1$@" = "Kunne ikke genstarte %1$@"; + /* Critical Alerts Status text */ "Critical Alerts" = "Kritiske advarsler"; @@ -401,6 +444,9 @@ /* No comment provided by engineer. */ "Delete" = "Slet"; +/* No comment provided by engineer. */ +"Delete “%@”?" = "Slet \"%@\"?"; + /* The title of the button to remove the credentials for a service */ "Delete Account" = "Slet konto"; @@ -410,6 +456,9 @@ /* Button title to delete CGM */ "Delete CGM" = "Slet CGM"; +/* No comment provided by engineer. */ +"Delete Food" = "Slet mad"; + /* Button title to delete a service */ "Delete Service" = "Slet service"; @@ -438,7 +487,7 @@ "Disables" = "Deaktiverer"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Afvis"; /* No comment provided by engineer. */ @@ -456,6 +505,12 @@ /* Message to the user to enable bluetooth */ "Enable\nBluetooth" = "Aktiver \nbluetooth"; +/* Title for Glucose Based Partial Application toggle */ +"Enable Glucose Based Partial Application" = "Aktivér Glucose Based Partial Application"; + +/* Title for Integral Retrospective Correction toggle */ +"Enable Integral Retrospective Correction" = "Aktivér Integral Retrospective Correction"; + /* The action hint of the workout mode toggle button when disabled */ "Enables" = "Aktiverer"; @@ -507,6 +562,9 @@ /* The alert title for a resume error */ "Failed to Resume Insulin Delivery" = "Kunne ikke genoptage insulintilførsel"; +/* No comment provided by engineer. */ +"FAVORITE FOODS" = "FAVORIT-MAD"; + /* Title of insulin model preset */ "Fiasp" = "Fiasp"; @@ -519,12 +577,18 @@ /* The format string used to describe a finite workout targets duration */ "For %1$@" = "I %1$@"; +/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ +"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Af sikkerhedsmæssige årsager bør du tillade, at Kritiske advarsler, Tidsfølsomme og Meddelelser (ikke-kritiske advarsler) på din enhed fortsætter med at bruge %1$@ og ikke kan slå individuelle alarmer fra."; + /* No comment provided by engineer. */ "Forecasted blood glucose may still be higher than target range." = "Forventet blodsukker kan stadig være højere end målområdet."; /* Title for forecast explanation modal on bolus view */ "Forecasted Glucose" = "Forventet blodsukker"; +/* Label for link to see frequently asked questions */ +"Frequently asked questions about alerts" = "Ofte stillede spørgsmål om påmindelser"; + /* The short unit display string for grams */ "g" = "g"; @@ -534,6 +598,10 @@ /* The title of the glucose and prediction graph */ "Glucose" = "Glukose"; +/* Title for glucose based partial application experiment description +Title of glucose based partial application experiment */ +"Glucose Based Partial Application" = "Glucose Based Partial Application"; + /* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ "Glucose data is %1$@ old" = "Blodsukkerdata er %1$@ gamle"; @@ -543,8 +611,11 @@ /* Alert title when glucose data returns while on bolus screen */ "Glucose Data Now Available" = "Blodsukkerdata er nu tilgængelige"; +/* Description of the prediction input effect for suspension of insulin delivery */ +"Glucose effect of suspending insulin delivery" = "Glukoseeffekt ved afbrydelse af insulintilførsel"; + /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Blodsukkerværdi er uden for intervallet"; /* Title of the prediction input effect for glucose momentum */ @@ -553,12 +624,33 @@ /* Details for configuration error when glucose target range schedule is missing */ "Glucose Target Range Schedule" = "Tidsplan for glukosemålområde"; +/* No comment provided by engineer. */ +"HARDWARE SOUNDS" = "HARDWARE-LYDE"; + +/* No comment provided by engineer. */ +"High Glucose" = "Høj glukose"; + +/* No comment provided by engineer. */ +"How can I silence non-Critical Alerts?" = "Hvordan kan jeg slå ikke-kritiske alarmer fra?"; + +/* No comment provided by engineer. */ +"How can I silence only Time Sensitive and Non-Critical alerts?" = "Hvordan kan jeg kun slå lyden fra for tidsfølsomme og ikke-kritiske advarsler?"; + +/* Title text for temporarily silencing all sounds (1: app name) */ +"How can I temporarily silence all %1$@ app sounds?" = "Hvordan kan jeg midlertidigt slå lyden fra for alle %1$@ applyde?"; + /* The title text for how to update */ "How to update (LoopDocs)" = "Sådan opdaterer du (LoopDocs)"; +/* Focus modes descriptive text (1: app name) */ +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Hvis iOS-fokustilstand er slået TIL, og Slå lyden fra-advarsler er slået fra, leveres kritiske advarsler stadig, og ikke-kritiske advarsler slås fra, indtil %1$@ føjes til hver fokustilstand som en tilladt app."; + /* Immediate Delivery status text */ "Immediate" = "Akut"; +/* Algorithm Experiments description second paragraph. */ +"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "I fremtidige versioner af Loop kan disse eksperimenter ændre sig, ende som standarddele af Loop-algoritmen eller blive fjernet helt fra Loop. Følg med i Loop Zulip-chatten for at holde dig informeret om mulige ændringer af disse funktioner."; + /* The title of a target alert action specifying an indefinitely long workout targets duration */ "Indefinitely" = "Uendelig"; @@ -597,9 +689,19 @@ /* Insulin type label */ "Insulin Type" = "Insulintype"; +/* Title for integral retrospective correction experiment description +Title of integral retrospective correction experiment */ +"Integral Retrospective Correction" = "Integral Retrospective Correction"; + +/* Description of Integral Retrospective Correction toggle. */ +"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Integral Retrospective Correction (IRC) er en udvidelse af standard Retrospective Correction (RC) algoritmekomponent i Loop, som justerer prognosen baseret på historikken med uoverensstemmelser mellem forudsagte og faktiske glukoseniveauer.\n\nI modsætning til RC, der ser på uoverensstemmelser i løbet af de sidste 30 minutter, med IRC, tilføjes historikken over uoverensstemmelser over tid. Så fortsatte positive uoverensstemmelser over tid vil resultere i øget dosering. Hvis uoverensstemmelserne er negative over tid, vil Loop reducere doseringen yderligere."; + /* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ "Interrupted %1$@: %2$@ of %3$@ %4$@" = "Afbrudt %1$@: %2$@ af %3$@ %4$@"; +/* Carb error description: invalid absorption time. (1: Input duration in hours). */ +"Invalid absorption time: %1$@ hours" = "Ugyldig absorptionstid: %1$@ timer"; + /* Bolus error description: invalid bolus amount. */ "Invalid Bolus Amount" = "Ugyldig bolusmængde"; @@ -615,6 +717,12 @@ /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ "Invalid glucose reading with a timestamp that is %1$@ in the future" = "Ugyldig glukoseaflæsning med et tidsstempel, der er %1$@ i fremtiden"; +/* No comment provided by engineer. */ +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Kritiske iOS-advarsler og tidsfølsomme advarsler er typer Apple-meddelelser. De bruges til begivenheder med høj prioritet. Nogle eksempler inkluderer:"; + +/* No comment provided by engineer. */ +"IOS FOCUS MODES" = "iOS-FOKUSTILSTANDE"; + /* The title text for the issue report cell */ "Issue Report" = "Fejlrapport"; @@ -637,7 +745,7 @@ "Loading..." = "Indlæser..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Log dosis"; /* The title of the screen displaying a manually entered insulin dose */ @@ -668,12 +776,15 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop vil fastsætte midlertidige basalrater for at øge og reducere insulinafgivelse."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Lav glukose"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Administrer tilladelser i Indstillinger"; +/* View title for how mute alerts work */ +"Managing Alerts" = "Administration af advarsler"; + /* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ "Manual Dose: %1$@ %2$@" = "Manuel dosis: %1$@ %2$@"; @@ -707,13 +818,16 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Momentumeffekter"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Mere Info"; /* Label for button to mute all alerts */ "Mute All Alerts" = "Slå alle alarmer fra"; +/* Title for mute alert duration selection action sheet */ +"Mute All Alerts Temporarily" = "Slå lyden fra for alle advarsler midlertidigt"; + /* Sensor state description for the non-valid state */ "Needs Attention" = "Handling påkrævet"; @@ -723,9 +837,12 @@ /* The title of the Nightscout service */ "Nightscout" = "Nightscout"; +/* Message for mute alert duration selection action sheet */ +"No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Ingen advarsler eller alarmer lyder, mens lyden er slået fra. Vælg, hvor længe du vil slå lyden fra."; + /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Ingen bolus anbefalet"; /* The error message displayed for device connection errors. */ @@ -774,12 +891,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Åh nej! Loop gik ned under dosering, og insulinjusteringer er blevet sat på pause, indtil denne dialogboks er lukket. Doseringshistorikken er muligvis ikke nøjagtig. Gennemgå venligst insulintilførsindstillinger og overvåg dit blodsukker omhyggeligt."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -809,6 +926,9 @@ /* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ "Predicted: %1$@\nActual: %2$@ (%3$@)" = "Forventet: %1$@\nFaktisk: %2$@ (%3$@)"; +/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ +"prediction-description-integral-retrospective-correction" = "prediction-description-integral-retrospective-correction"; + /* Preparing critical event log text */ "Preparing Critical Event Logs" = "Forbereder kritiske begivenhedslogs"; @@ -833,6 +953,9 @@ /* The title of the screen displaying a pump event */ "Pump Event" = "Pumpe-hændelse"; +/* No comment provided by engineer. */ +"Pump Expired" = "Pumpen er udløbet"; + /* Details for configuration error when pump manager is missing */ "Pump Manager" = "Pumpemanager"; @@ -867,7 +990,7 @@ "Recommended Basal" = "Anbefalet basal"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Anbefalet bolus"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -877,7 +1000,7 @@ "Recommended Bolus: %@ Units" = "Foreslået bolus: %@ Enheder"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Fjernindtastning af bolus: %@ E"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -886,14 +1009,20 @@ /* Details for missing data error when reservoir data is missing */ "Reservoir" = "Reservoir"; +/* No comment provided by engineer. */ +"Reservoir Empty" = "Reservoir tomt"; + /* Title of the prediction input effect for retrospective correction */ "Retrospective Correction" = "Tilbagevirkende korrektion"; /* The title of the notification action to retry a bolus command */ "Retry" = "Forsøg igen"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Gem og afgiv"; +/* No comment provided by engineer. */ +"Save" = "Gem"; + +/* No comment provided by engineer. */ +"Save as favorite food" = "Gem som favoritmad"; /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Gem uden at give bolus"; @@ -901,6 +1030,12 @@ /* Scheduled Delivery status text */ "Scheduled" = "Planlagt"; +/* No comment provided by engineer. */ +"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Hvis du vælger en favoritmad i kulhydratindtastningsskærmen, udfyldes felterne for kulhydratmængde, madtype og absorptionstid automatisk! Tryk på tilføj-knappen nedenfor for at oprette din første favoritmad!"; + +/* No comment provided by engineer. */ +"Sensor Failed" = "Sensorfejl"; + /* The title of the services section in settings */ "Services" = "Services"; @@ -938,12 +1073,15 @@ "Starting Bolus" = "Starter bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Support"; /* The title text in settings */ "Suspend Threshold" = "Pause grænseværdi"; +/* Title of the prediction input effect for suspension of insulin delivery */ +"Suspension of Insulin Delivery" = "Afbryd insulintilførsel"; + /* Descriptive text for button to add CGM device */ "Tap here to set up a CGM" = "Tryk her for at konfigurere en CGM"; @@ -962,6 +1100,24 @@ /* Message presented in the status row instructing the user to tap this row to stop a bolus */ "Tap to Stop" = "Tryk for at stoppe"; +/* Label for button to unmute all alerts */ +"Tap to Unmute Alerts" = "Tryk for at slå alarmer til"; + +/* The alert body for unmute alert confirmation */ +"Tap Unmute to resume sound for your alerts and alarms." = "Tryk på Slå lyden til for at genoptage lyden for dine alarmer og alarmer."; + +/* Settings app TestFlight section */ +"TestFlight" = "TestFlight"; + +/* Settings TestFlight expiration view */ +"TestFlight Expiration" = "TestFlight Udløber"; + +/* Time that build expires */ +"TestFlight expires " = "TestFlight udløber "; + +/* The title for notification of upcoming TestFlight expiration */ +"TestFlight Expires Soon" = "TestFlight udløber snart"; + /* Alert message for a bolus too small validation error */ "The bolus amount entered is smaller than the minimum deliverable." = "Den indtastede bolusmængde er mindre end den mindste leverbare mængde."; @@ -992,12 +1148,24 @@ /* Title text for button to Therapy Settings */ "Therapy Settings" = "Behandlingsindstillinger"; +/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ +"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Denne mulighed gælder kun, når Loops doseringsstrategi er indstillet til Automatisk bolus."; + +/* No comment provided by engineer. */ +"Time Sensitive Alerts" = "Tidsfølsomme advarsler"; + /* Time Sensitive Status text */ "Time Sensitive Notifications" = "Tidsfølsomme meddelelser"; +/* No comment provided by engineer. */ +"Transmitter Low Battery" = "Sender lavt batteri"; + /* Critical event log export error alert try again button */ "Try Again" = "Prøv igen"; +/* Description text for temporarily silencing non-critical alerts (1: app name) */ +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Sluk for lydstyrken på din iOS-enhed eller føj %1$@ som en tilladt app til hver fokustilstand. Tidsfølsomme og kritiske advarsler lyder stadig, men ikke-kritiske advarsler slås fra."; + /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Slå bluetooth til for at modtage advarsler, alarmer eller blodsukkermålinger."; @@ -1020,9 +1188,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Kan ikke stoppe igangværende bolus. Flyt din iPhone tættere på pumpen og prøv igen. Tjek din historik for insulinafgivelse for detaljer og overvåg nøje dit blodsukkerniveau."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Ukendt"; /* The error message displayed for unknown errors. (1: unknown error) */ @@ -1034,18 +1202,36 @@ /* Unknown amount of time in settings' profile expiration section */ "Unknown time" = "Ukendt tidspunkt"; +/* The title of the action used to unmute alerts */ +"Unmute" = "Slå lyden til"; + +/* The alert title for unmute alert confirmation */ +"Unmute Alerts?" = "Slå alarmer til?"; + +/* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ +"Unsupported Notification Service: %1$@" = "Ikke-understøttet meddelelsestjeneste: %1$@"; + /* The format for the description of a temporary override end date */ "until %@" = "indtil %@"; +/* indication of when alerts will be unmuted (1: time when alerts unmute) */ +"Until %1$@" = "Indtil %1$@"; + /* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ "Until I enter carbs" = "Indtil jeg indtaster kulhydrater"; /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ "Until I turn off" = "Indtil jeg slukker"; +/* No comment provided by engineer. */ +"Urgent Low" = "Kritisk lav"; + /* The title of the alert controller used to select a duration for pre-meal targets */ "Use Pre-Meal Preset" = "Brug Før-måltid"; +/* Description text for temporarily silencing all sounds (1: app name) */ +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Brug funktionen Mute Alerts. Den giver dig mulighed for midlertidigt at slå alle dine advarsler og alarmer fra via %1$@-appen, inklusive Kritiske advarsler og Tidsfølsomme advarsler."; + /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Anvend blodsukkermål for motion"; @@ -1058,6 +1244,9 @@ /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Advarsel! Sikkerhedsmeddelelser er slået FRA"; +/* No comment provided by engineer. */ +"What are examples of Critical and Time Sensitive alerts?" = "Hvad er eksempler på kritiske og tidsfølsomme alarmer?"; + /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når den nuværende eller forventede blodsukker ligger under blodsukkersikkerhedsgrænsen, vil Loop ikke anbefale en bolus og vil altid anbefale en midlertidig basalrate på 0 enheder i timen."; @@ -1070,6 +1259,15 @@ /* No comment provided by engineer. */ "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Når der ikke køres lukket Loop, bruger appen en forenklet bolusberegner som en typisk pumpe."; +/* App sounds descriptive text (1: app name) */ +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Mens lydløse advarsler er slået til, vises alle advarsler fra din %1$@ app inklusive kritiske og tidsfølsomme advarsler midlertidigt uden lyde og vil kun vibrere."; + +/* No comment provided by engineer. */ +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Mens lydløs alarm er slået til, kan din insulinpumpe og CGM-hardware stadig afgive lyd."; + +/* Format string for message of reset loop alert. (1: App name) (2: error description) */ +"While trying to restart %1$@ an error occured.\n\n%2$@" = "Under forsøg på at genstarte %1$@ opstod der en fejl.\n\n%2$@"; + /* The label of the workout mode toggle button */ "Workout Targets" = "Motion Mål"; diff --git a/Loop/de.lproj/Localizable.strings b/Loop/de.lproj/Localizable.strings index dc4c9b5d4b..63aff81a55 100755 --- a/Loop/de.lproj/Localizable.strings +++ b/Loop/de.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ konnte Deine aktuelle temporäre Basalrate nicht abbrechen, da diese höher ist als die neue maximale Basalrate, die Du festgelegt hast. Dies kann zu einer höheren Insulinabgabe, als erwünscht führen.\n\nErwäge, die Insulinabgabe manuell zu unterbrechen und dann sofort wieder aufzunehmen, um die Basalabgabe mit dem neuen Grenzwert zu initiieren."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -92,7 +89,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* Description of the prediction input effect for glucose momentum */ @@ -164,11 +161,11 @@ "Adjusted for" = "Angepasst für"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Alarm-Einstellungen"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Benachrichtigungsberechtigungen"; /* The title of the section containing algorithm settings */ @@ -343,7 +340,7 @@ "Choose Favorite:" = "Wähle Favorit:"; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Schließen"; /* The title text for the looping enabled switch cell */ @@ -462,7 +459,7 @@ "Disables" = "Deaktivieren"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Schließen"; /* No comment provided by engineer. */ @@ -577,7 +574,7 @@ "Glucose Data Now Available" = "Blutzucker jetzt verfügbar"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Blutzucker-Eingabe außerhalb des Bereichs"; /* Title of the prediction input effect for glucose momentum */ @@ -634,7 +631,7 @@ "Insulin Type" = "Insulintyp"; /* Title for integral retrospective correction experiment description - Title of integral retrospective correction experiment */ +Title of integral retrospective correction experiment */ "Integral Retrospective Correction" = "Integrale retrospektive Korrektur"; /* Description of Integral Retrospective Correction toggle. */ @@ -680,7 +677,7 @@ "Loading..." = "Laden…"; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Dosis speichern"; /* The title of the screen displaying a manually entered insulin dose */ @@ -701,9 +698,6 @@ /* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ "Loop has not completed successfully in %@" = "Loop wurde nicht erfolgreich abgeschlossen seit %@"; -/* Description of Glucose Based Partial Application toggle. */ -"Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." = "Loop liefert normalerweise in jedem Dosierungszyklus 40%1$ Ihres vorhergesagten Insulinbedarfs. \n\nWenn das Experiment Glucose Based Partial Application aktiviert ist, variiert Loop den Prozentsatz des empfohlenen Bolus, der in jedem Zyklus abgegeben wird, mit dem Glukosespiegel. \n\nIn der Nähe des Korrekturbereichs werden 20%2$ verwendet (ähnlich wie bei Temp Basal) und bei hohem Glukosewert (200 mg/dL, 11,1 mmol/L) allmählich auf ein Maximum von 80%3$ erhöht. \n\nBitte beachte, dass diese Funktion bei schnell ansteigendem Blutzucker, z. B. nach einer unangekündigten Mahlzeit, in Kombination mit Geschwindigkeits- und retrospektiven Korrektureffekten zu einer höheren Dosis führen kann, als Dein ISF erfordern würde."; - /* Description string for automatic bolus dosing strategy */ "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop gibt automatisch einen Bolus ab, wenn der Insulinbedarf über der geplanten Basalrate liegt, und verwendet temporäre Basalraten, wenn dies erforderlich ist, um die Insulinabgabe unter die geplante Basalrate zu reduzieren."; @@ -714,7 +708,7 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop stellt temporäre Basalraten ein, um die Insulinabgabe zu erhöhen oder zu verringern."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Niedriger Blutzucker"; /* Manage Permissions in Settings button text */ @@ -753,8 +747,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Momentum-Effekte"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Weitere Info"; /* Label for button to mute all alerts */ @@ -770,8 +764,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Kein Bolus empfohlen"; /* The error message displayed for device connection errors. */ @@ -820,12 +814,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh nein! Loop ist während des Bolus abgestürzt und die Insulinanpassungen wurden angehalten, bis dieser Dialog geschlossen wird. Der Dosierung-Verlauf ist möglicherweise nicht korrekt. Bitte prüfe die Tabellen zur Insulinabgabe und überwache Deinen Blutzucker sorgfältig."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -913,7 +907,7 @@ "Recommended Basal" = "Empfohlene Basalrate"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Empfohlener Bolus"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -923,7 +917,7 @@ "Recommended Bolus: %@ Units" = "Empfohlener Bolus: %@ IE"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Entfernte Boluseingabe: %@ IE"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -938,9 +932,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Wiederholen"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Speichern und Bolus abgeben"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Speichern ohne Bolusgabe"; @@ -984,7 +975,7 @@ "Starting Bolus" = "Starte Bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Unterstützung"; /* The title text in settings */ @@ -1069,9 +1060,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Der laufende Bolus kann nicht gestoppt werden. Bewegen Dein iPhone näher an die Pumpe und versuche es erneut. Überprüfe den Verlauf der Insulinabgabe auf Einzelheiten und überwache Deinen Blutzucker genau."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Unbekannt"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/es.lproj/Localizable.strings b/Loop/es.lproj/Localizable.strings index a1fd7ee4d9..fb81785753 100644 --- a/Loop/es.lproj/Localizable.strings +++ b/Loop/es.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ no pudo cancelar su basal temporal actual, que es más alta que el nuevo límite basal máximo que ha establecido. Esto puede resultar en una administración de insulina superior a la deseada. \n\n Considere suspender la administración de insulina manualmente y luego reanudarla de inmediato para activar la administración basal con el nuevo límite establecido."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@ %2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -92,7 +89,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* Description of the prediction input effect for glucose momentum */ @@ -164,11 +161,11 @@ "Adjusted for" = "Ajustado para"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Gestión de Alertas"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Permisos de Alertas"; /* The title of the section containing algorithm settings */ @@ -325,7 +322,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Elija un tiempo de absorción más largo para comidas más grandes, o aquellas que contienen grasas y proteínas. Esta es solo una guía para el algoritmo y no necesita ser exacta."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Cerrar"; /* The title text for the looping enabled switch cell */ @@ -438,7 +435,7 @@ "Disables" = "Desactivar"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Ignorar"; /* No comment provided by engineer. */ @@ -541,7 +538,7 @@ "Glucose Data Now Available" = "Datos de glucosa ahora disponibles"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Entrada de glucosa fuera de rango"; /* Title of the prediction input effect for glucose momentum */ @@ -628,7 +625,7 @@ "Loading..." = "Cargando..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Registrar dosis"; /* The title of the screen displaying a manually entered insulin dose */ @@ -656,7 +653,7 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop establecerá basal temporales para aumentar y disminuir la administración de insulina."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Glucosa baja"; /* Manage Permissions in Settings button text */ @@ -692,8 +689,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Efectos de Momento"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Más Info"; /* Label for button to mute all alerts */ @@ -706,8 +703,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "No hay bolo recomendado"; /* The error message displayed for device connection errors. */ @@ -756,12 +753,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "¡Oh, no! Loop falló durante la dosificación y los ajustes de insulina se pausaron hasta que se cierre este cuadro de diálogo. El historial de dosificación puede no ser exacto. Revise los gráficos de administración de insulina y controle cuidadosamente su nivel de glucosa en sangre."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -846,7 +843,7 @@ "Recommended Basal" = "Basal Recomendada"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Bolo recomendado"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -856,7 +853,7 @@ "Recommended Bolus: %@ Units" = "Bolo Recomendado: %@ Unidades"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Entrada remota de bolo: %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -871,9 +868,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Reintentar"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Guardar y entregar"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Guardar sin Entregar Bolo"; @@ -914,7 +908,7 @@ "Starting Bolus" = "Comenzando Bolo"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Ayuda"; /* The title text in settings */ @@ -996,9 +990,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "No se puede detener el bolo en progreso. Mueve tu iPhone más cerca de la microinfusora e inténtalo de nuevo. Revisa tu historial de entrega de insulina para más detalles y supervisa tu glucosa."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Desconocido"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/fi.lproj/Localizable.strings b/Loop/fi.lproj/Localizable.strings index 9ca9c0a007..a74f3d7af6 100644 --- a/Loop/fi.lproj/Localizable.strings +++ b/Loop/fi.lproj/Localizable.strings @@ -65,7 +65,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* Description of the prediction input effect for glucose momentum */ @@ -128,7 +128,7 @@ "Adjusted for" = "Mukautettu"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Hälytysten käyttöoikeudet"; /* The title of the section containing algorithm settings */ @@ -258,7 +258,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Valitse pidempi imeytymisaika isoille tai paljon rasvaa ja proteiineja sisältäville aterioille. Tämä on suuntaa antava ohje, eikä sen tarvitse olla tarkka."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Sulje"; /* The title text for the looping enabled switch cell */ @@ -359,7 +359,7 @@ "Disables" = "Poistaa käytöstä"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Ohita"; /* No comment provided by engineer. */ @@ -444,7 +444,7 @@ "Glucose Data Now Available" = "Glukoositiedot nyt saatavilla"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Glukoosiarvo alueen ulkopuolella"; /* Title of the prediction input effect for glucose momentum */ @@ -504,7 +504,7 @@ "Loading..." = "Ladataan..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Kirjaa annos"; /* The title of the screen displaying a manually entered insulin dose */ @@ -543,8 +543,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Liikevaikutukset (momentum)"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Lisätietoa"; /* Sensor state description for the non-valid state */ @@ -554,8 +554,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Bolusta ei suositella"; /* The error message displayed for device connection errors. */ @@ -580,12 +580,12 @@ "Off" = "Pois päältä"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -655,7 +655,7 @@ "Recommended Basal" = "Suositeltu basaali"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Suositeltu bolus"; /* Accessibility hint describing recommended bolus units */ @@ -670,9 +670,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Yritä uudelleen"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Tallenna ja annostele"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Tallenna ilman bolusta"; @@ -704,7 +701,7 @@ "Starting Bolus" = "Aloitetaan bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Tuki"; /* The title text in settings */ @@ -768,9 +765,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Käynnissä olevaa bolusta ei voitu pysäyttää. Siirrä iPhone lähemmäksi pumppua ja yritä uudelleen. Tarkista tiedot insuliinin annosteluhistoriasta ja seuraa glukoosia tarkasti."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Tuntematon"; /* The format for the description of a temporary override end date */ diff --git a/Loop/fr.lproj/Localizable.strings b/Loop/fr.lproj/Localizable.strings index 95225a94ed..e1a5843e2a 100644 --- a/Loop/fr.lproj/Localizable.strings +++ b/Loop/fr.lproj/Localizable.strings @@ -4,6 +4,9 @@ /* Status row title for premeal override enabled (leading space is to separate from symbol) */ " Pre-meal Preset" = " Préréglage Pré-repas"; +/* remaining time in setting's profile expiration section */ +" remaining" = "restant(s)"; + /* Warning text for when Notifications or Critical Alerts Permissions is disabled */ " Safety Notifications are OFF" = "Notifications de sécurité sont DÉSACTIVÉES"; @@ -40,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ n'a pas pu annuler votre débit basal temporaire actuel, qui est supérieur à la nouvelle limite basale max que vous avez définie. Cela peut entraîner une administration d'insuline plus élevée que souhaitée. \n\nEnvisagez de suspendre l'administration d'insuline manuellement, puis de reprendre immédiatement l'administration basale avec la nouvelle limite en place."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -89,9 +89,12 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; +/* No comment provided by engineer. */ +"⚠️" = "⚠️"; + /* Description of the prediction input effect for glucose momentum */ "15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "Coefficient de régression du glucose de 15 minutes (b1), décroissance poursuivie au-delà de 30 min."; @@ -161,16 +164,26 @@ "Adjusted for" = "Ajusté(e) pour"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Gestion des alertes"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Autorisations d'alerte"; +/* Navigation title for algorithms experiments screen +The title of the Algorithm Experiments section in settings */ +"Algorithm Experiments" = "Essais d'algorithmes"; + +/* Algorithm Experiments description. */ +"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Les essais d'algorithme sont des modifications optionnelles de l'algorithme Loop. Ces modifications sont moins testées que l'algorithme Loop standard, alors veuillez les utiliser avec précaution."; + /* The title of the section containing algorithm settings */ "Algorithm Settings" = "Paramètres de l'algorithme"; +/* Label for carb quantity entry row on carb entry screen */ +"Amount Consumed" = "Quantité consommée"; + /* The title of the Amplitude service */ "Amplitude" = "Amplitude"; @@ -195,6 +208,9 @@ /* The title of the nightscout API secret credential */ "API Secret" = "Secret API"; +/* Settings app profile section */ +"App Profile" = "Profil de l'application"; + /* Action sheet confirmation message for pump history deletion */ "Are you sure you want to delete all history entries?" = "Voulez-vous vraiment supprimer toutes les entrées de l’historique?"; @@ -211,13 +227,13 @@ "Are you sure you want to delete this CGM?" = "Voulez-vous vraiment supprimer ce CGM?"; /* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Voulez-vous vraiment supprimer ce service?"; +"Are you sure you want to delete this service?" = "Voulez-vous vraiment supprimer ce service ?"; /* Format fragment for a specific time */ "at %@" = "à %@"; /* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Authentifiez-vous pour administrer %@ Unités"; +"Authenticate to Bolus %@ Units" = "Authentifiez-vous pour faire un bolus de %@ Unités"; /* The message displayed during a device authentication prompt to log an insulin dose */ "Authenticate to log %@ Units" = "Authentifier pour enregistrer %@ unités"; @@ -319,11 +335,11 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choisissez un temps d’absorption plus long pour les gros repas ou ceux contenant des graisses et des protéines. Ceci est seulement un guide pour l'algorithme et n'a pas besoin d'être exact."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Fermer"; /* The title text for the looping enabled switch cell */ -"Closed Loop" = "Loop Fermé"; +"Closed Loop" = "Boucle Fermé"; /* Alert title for closed loop off informational modal */ "Closed Loop OFF" = "Boucle Ouverte"; @@ -402,7 +418,7 @@ "Delete All" = "Supprimer tout"; /* Button title to delete CGM */ -"Delete CGM" = "Effacer le CGM"; +"Delete CGM" = "Supprimer le CGM"; /* Button title to delete a service */ "Delete Service" = "Supprimer le service"; @@ -432,7 +448,7 @@ "Disables" = "Désactive"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Fermer"; /* No comment provided by engineer. */ @@ -444,6 +460,9 @@ /* The title of the Dosing Strategy section in settings */ "Dosing Strategy" = "Stratégie de Dosage"; +/* Override error description: duration exceed max (1: max duration in hours). */ +"Duration exceeds: %1$.1f hours" = "La durée dépasse : %1$.1f heures"; + /* Message to the user to enable bluetooth */ "Enable\nBluetooth" = "Activer \nbluetooth"; @@ -504,6 +523,9 @@ /* Label for manual glucose entry row on bolus screen */ "Fingerstick Glucose" = "Glucose capilaire"; +/* Secondary text for alerts disabled warning, which appears on the main status screen. */ +"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Corrigez-le maintenant en activant les notifications, les alertes critiques et les notifications urgentes."; + /* The format string used to describe a finite workout targets duration */ "For %1$@" = "Pendant %1$@"; @@ -513,6 +535,9 @@ /* Title for forecast explanation modal on bolus view */ "Forecasted Glucose" = "Glycémie prévue"; +/* Label for link to see frequently asked questions */ +"Frequently asked questions about alerts" = "Foire aux questions sur les alertes"; + /* The short unit display string for grams */ "g" = "g"; @@ -532,7 +557,7 @@ "Glucose Data Now Available" = "Les données de glycémie sont maintenant disponibles"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "La glycémie saisie est hors de la plage."; /* Title of the prediction input effect for glucose momentum */ @@ -541,9 +566,27 @@ /* Details for configuration error when glucose target range schedule is missing */ "Glucose Target Range Schedule" = "Horaire de la plage cible de glycémie"; +/* No comment provided by engineer. */ +"HARDWARE SOUNDS" = "SONS MATÉRIELS"; + +/* No comment provided by engineer. */ +"High Glucose" = "Glycémie élevée"; + +/* Title text for temporarily silencing all sounds (1: app name) */ +"How can I temporarily silence all %1$@ app sounds?" = "Comment puis-je désactiver temporairement tous les sons de l'application %1$@ ?"; + +/* The title text for how to update */ +"How to update (LoopDocs)" = "Comment mettre à jour (LoopDocs)"; + +/* Focus modes descriptive text (1: app name) */ +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Si le mode Concentration d'iOS est activé et que les Alertes Muettes sont désactivées, les Alertes Critiques seront toujours livrées et les Alertes non Critiques seront silencieuses jusqu'à ce que %1$@ soit ajouté à chaque mode Concentration en tant qu'application autorisée."; + /* Immediate Delivery status text */ "Immediate" = "Immédiat"; +/* Algorithm Experiments description second paragraph. */ +"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "Dans les futures versions de Loop, ces essais peuvent changer, devenir des parties standard de l'algorithme Loop, ou être complètement retirées de Loop. Veuillez suivre le chat Zulip de Loop pour rester informé des éventuels changements sur ces fonctionnalités."; + /* The title of a target alert action specifying an indefinitely long workout targets duration */ "Indefinitely" = "Indéfiniment"; @@ -551,7 +594,7 @@ "Insulin" = "Insuline"; /* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insuline Absorbée (U) × Sensibilité à l'Insuline ( %1$@ /U)"; +"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insuline Absorbée (U) × Sensibilité à l'Insuline (%1$@/U)"; /* Notification body for crash recovery alert */ "Insulin adjustments have been disabled!" = "Les ajustements d’insuline ont été désactivés!"; @@ -585,6 +628,9 @@ /* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ "Interrupted %1$@: %2$@ of %3$@ %4$@" = "Interrompu %1$@: %2$@ de %3$@ %4$@"; +/* Bolus error description: invalid bolus amount. */ +"Invalid Bolus Amount" = "Quantité de bolus invalide"; + /* Carb error description: invalid carb amount. */ "Invalid carb amount" = "Quantité de glucides invalide"; @@ -597,9 +643,18 @@ /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ "Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lecture de glucose non valide avec un horodatage situé à %1$@ dans le futur"; +/* No comment provided by engineer. */ +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Les alertes critiques iOS et les alertes urgentes sont des types de notifications Apple. Elles sont utilisées pour des événements de haute priorité. Voici quelques exemples :"; + +/* No comment provided by engineer. */ +"IOS FOCUS MODES" = "MODES DE CONCENTRATION IOS"; + /* The title text for the issue report cell */ "Issue Report" = "Créer un rapport"; +/* The notification description for a meal that was possibly not logged in Loop. */ +"It looks like you may not have logged a meal you ate. Tap to log it now." = "Il semble que vous n'ayez pas enregistré un repas que vous avez pris. Appuyez pour l'enregistrer maintenant."; + /* Title of the warning shown when a large meal was entered */ "Large Meal Entered" = "Grand repas entré"; @@ -616,7 +671,7 @@ "Loading..." = "Chargement..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Enregistrer la dose"; /* The title of the screen displaying a manually entered insulin dose */ @@ -631,25 +686,31 @@ /* Bluetooth unavailable alert body. */ "Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop a détecté un problème avec vos paramètres Bluetooth, et ne fonctionnera pas correctement tant que le Bluetooth ne sera pas activé. Vous ne pourrez pas recevoir de lectures de glucose, ni être en mesure de faire un bolus."; +/* Warning displayed when user is adding a meal from an missed meal notification */ +"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop a détecté un repas manqué et a estimé sa taille. Modifiez la quantité de glucides pour qu'elle corresponde à la quantité de glucides que vous avez peut-être mangée."; + /* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ "Loop has not completed successfully in %@" = "Loop n'a pas bouclé avec succès depuis %@"; /* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop effectue automatiquement des bolus lorsque les besoins en insuline sont supérieurs au débit de base programmé, et utilise des débits de basal temporaires si nécessaire pour réduire l'administration d'insuline en dessous du débit de basal programmé."; +"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop effectue automatiquement des bolus lorsque les besoins en insuline sont supérieurs au débit de base programmé, et utilise des débits basaux temporaires si nécessaire pour réduire l'administration d'insuline en dessous du débit de base programmé."; /* Bluetooth off background alert body. */ "Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop ne fonctionnera pas correctement tant que le Bluetooth ne sera pas activé. Vous ne pourrez pas recevoir de lectures de glucose, ni être en mesure de faire un bolus."; /* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop définira des débits basaux temporaires pour augmenter et diminuer l'administration d'insuline."; +"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop permet de définir des débits de base temporaires pour augmenter et diminuer l'administration d'insuline."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Glycémie basse"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Gérer les permissions dans les paramètres"; +/* View title for how mute alerts work */ +"Managing Alerts" = "Gestion des Alertes"; + /* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ "Manual Dose: %1$@ %2$@" = "Dosage manuel : %1$@ %2$@"; @@ -683,22 +744,28 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Effets de momentum"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Plus d'informations"; /* Label for button to mute all alerts */ "Mute All Alerts" = "Enlever le son de toutes les alertes"; +/* Title for mute alert duration selection action sheet */ +"Mute All Alerts Temporarily" = "Désactiver temporairement toutes les alertes"; + /* Sensor state description for the non-valid state */ "Needs Attention" = "Demande votre attention"; +/* Override error description: negative duration error. */ +"Negative duration not allowed" = "Durée négative non autorisée"; + /* The title of the Nightscout service */ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Aucun Bolus Recommandé"; /* The error message displayed for device connection errors. */ @@ -747,12 +814,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh non ! La boucle s'est arrêtée pendant le dosage, et les ajustements d'insuline ont été mis en pause jusqu'à ce que ce dialogue soit fermé. L'historique des dosages peut ne pas être exact. Veuillez revoir les tableaux d'administration d'insuline et surveiller attentivement votre glycémie."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -761,6 +828,9 @@ /* The title text for the override presets */ "Override Presets" = "Préréglages ajustement"; +/* The notification title for a meal that was possibly not logged in Loop. */ +"Possible Missed Meal" = "Repas manqué possible"; + /* The label of the pre-meal mode toggle button */ "Pre-Meal Targets" = "Objectif de Pré-Repas"; @@ -782,6 +852,12 @@ /* Preparing critical event log text */ "Preparing Critical Event Logs" = "Préparation des journaux d’événements critiques"; +/* Settings App Profile expiration view */ +"Profile Expiration" = "Expiration du profil"; + +/* Time that profile expires */ +"Profile expires " = "Le profil expire le "; + /* The title for notification of upcoming profile expiration */ "Profile Expires Soon" = "Le profil expire bientôt"; @@ -797,6 +873,9 @@ /* The title of the screen displaying a pump event */ "Pump Event" = "Événement pompe"; +/* No comment provided by engineer. */ +"Pump Expired" = "Pompe Expirée"; + /* Details for configuration error when pump manager is missing */ "Pump Manager" = "Gestionnaire de pompe"; @@ -831,17 +910,17 @@ "Recommended Basal" = "Recommandation basal"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Basal Recommandé"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ "Recommended Bolus Exceeds Maximum Bolus" = "Le bolus recommandé dépasse le bolus maximal"; /* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolus recommandé: %@ Unités"; +"Recommended Bolus: %@ Units" = "Bolus recommandé : %@ unités"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Entrée du bolus à distance : %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -850,14 +929,20 @@ /* Details for missing data error when reservoir data is missing */ "Reservoir" = "Réservoir"; +/* No comment provided by engineer. */ +"Reservoir Empty" = "Réservoir vide"; + /* Title of the prediction input effect for retrospective correction */ "Retrospective Correction" = "Correction rétrospective"; /* The title of the notification action to retry a bolus command */ "Retry" = "Réessayer"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Enregistrer et Administrer"; +/* No comment provided by engineer. */ +"Save" = "Sauvegarder"; + +/* No comment provided by engineer. */ +"Save as favorite food" = "Enregistrer comme aliment préféré"; /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Enregister sans Bolus"; @@ -865,6 +950,9 @@ /* Scheduled Delivery status text */ "Scheduled" = "Programmé"; +/* No comment provided by engineer. */ +"Sensor Failed" = "Capteur\nDéfaillant"; + /* The title of the services section in settings */ "Services" = "Services"; @@ -892,6 +980,9 @@ /* Software update button link text */ "Software Update" = "Mise à jour logicielle"; +/* Carb error description: invalid start time is out of range. */ +"Start time is out of range: %@" = "Le temps de début est hors de la zone définie : %@"; + /* The format for the description of a temporary override start date */ "starting at %@" = "commence à %@"; @@ -899,7 +990,7 @@ "Starting Bolus" = "Début du bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Support"; /* The title text in settings */ @@ -923,6 +1014,18 @@ /* Message presented in the status row instructing the user to tap this row to stop a bolus */ "Tap to Stop" = "Stop"; +/* Settings app TestFlight section */ +"TestFlight" = "TestFlight"; + +/* Settings TestFlight expiration view */ +"TestFlight Expiration" = "Expiration de TestFlight"; + +/* Time that build expires */ +"TestFlight expires " = "TestFlight expire le "; + +/* The title for notification of upcoming TestFlight expiration */ +"TestFlight Expires Soon" = "TestFlight expire bientôt"; + /* Alert message for a bolus too small validation error */ "The bolus amount entered is smaller than the minimum deliverable." = "La quantité de bolus saisie est inférieure au minimum délivrable."; @@ -953,12 +1056,24 @@ /* Title text for button to Therapy Settings */ "Therapy Settings" = "Réglages Thérapeutique"; +/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ +"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Cette option ne s’applique que lorsque la stratégie de dosage de Loop est réglée sur Bolus automatique."; + +/* No comment provided by engineer. */ +"Time Sensitive Alerts" = "Alertes Urgentes"; + /* Time Sensitive Status text */ "Time Sensitive Notifications" = "Notifications urgentes"; +/* No comment provided by engineer. */ +"Transmitter Low Battery" = "Batterie faible de l'émetteur"; + /* Critical event log export error alert try again button */ "Try Again" = "Réessayer"; +/* Description text for temporarily silencing non-critical alerts (1: app name) */ +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Désactivez le volume sur votre appareil iOS ou ajoutez %1$@ comme application autorisée à chaque mode Concentration. Les Alertes urgentes et critiques sonneront toujours, mais les Alertes non critiques seront silencieuses."; + /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Activez le Bluetooth pour recevoir des alertes, alarmes ou les données de capteurs de glycémie."; @@ -981,14 +1096,20 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Impossible d'arrêter le bolus en cours. Déplacez votre iPhone plus près de la pompe et réessayez. Vérifiez votre historique de distribution d'insuline pour plus de détails et surveillez votre glycémie de près."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Inconnu"; /* The error message displayed for unknown errors. (1: unknown error) */ "Unknown Error: %1$@" = "Erreur inconnue : %1$03d"; +/* Override error description: unknown preset (1: preset name). */ +"Unknown preset: %1$@" = "Préréglage inconnu : %1$@"; + +/* Unknown amount of time in settings' profile expiration section */ +"Unknown time" = "Temps inconnu"; + /* The format for the description of a temporary override end date */ "until %@" = "jusqu’à %@"; @@ -998,9 +1119,15 @@ /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ "Until I turn off" = "Jusqu'à ce que je désactive"; +/* No comment provided by engineer. */ +"Urgent Low" = "Urgent bas"; + /* The title of the alert controller used to select a duration for pre-meal targets */ "Use Pre-Meal Preset" = "Utiliser le préréglage Pré-repas"; +/* Description text for temporarily silencing all sounds (1: app name) */ +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Utilisez la fonction Muet Alertes. Elle vous permet de mettre temporairement en silence toutes vos alertes et alarmes via l'application %1$@, y compris les Alertes Critiques et les Alertes Urgentes."; + /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Utiliser les objectifs exercice"; @@ -1013,17 +1140,29 @@ /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Attention! Les notifications de sécurité sont DÉSACTIVÉES"; +/* No comment provided by engineer. */ +"What are examples of Critical and Time Sensitive alerts?" = "Quels sont des exemples d'alertes critiques et urgentes ?"; + /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Lorsque la glycémie actuelle ou prévue est inférieure au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure."; /* Explanation of suspend threshold */ "When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Lorsque le glucose actuel ou prévu est inférieur au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure."; +/* Description of missed meal notifications. */ +"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Lorsqu'il est activé, Loop peut vous avertir lorsqu'il détecte un repas qui n'a pas été enregistré."; + /* No comment provided by engineer. */ "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "En dehors du mode Boucle fermée, l'application utilise un calcul de bolus simplifié comme pour une pompe classique."; +/* App sounds descriptive text (1: app name) */ +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Tant que les alertes muettes sont activées, toutes les alertes de votre application %1$@, y compris les alertes critiques et urgentes, s'afficheront temporairement sans son et vibreront uniquement."; + +/* No comment provided by engineer. */ +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Lorsque les alertes sont en mode muettes, votre pompe à insuline et le matériel CGM peuvent toujours émettre des sons."; + /* The label of the workout mode toggle button */ -"Workout Targets" = "Objectifs exercice"; +"Workout Targets" = "Objectifs d'exercice"; /* Workout override still on reminder alert body. */ "Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Le réglage de la température d'entraînement est activé depuis plus de 24 heures. Vérifiez que vous souhaitez toujours l'activer ou désactivez-le dans l'application. Vérifiez que vous souhaitez toujours le garder actif ou désactivez-le dans l'application."; diff --git a/Loop/fr.lproj/Main.strings b/Loop/fr.lproj/Main.strings index d87f772121..497bc399f7 100644 --- a/Loop/fr.lproj/Main.strings +++ b/Loop/fr.lproj/Main.strings @@ -20,7 +20,7 @@ "d3X-AN-tA5.text" = "g total"; /* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Le glucose futur est prédit en combinant les effets de plusieurs entrées. Utilisez cet outil pour basculer entre différentes entrées afin de voir comment elles se comparent à la prédiction finale. Utilisez cet outil pour aller et venir entre les différentes entrées et voir comment elles se comparent à la prédiction finale."; +"D4C-I2-dhA.text" = "La glycémie future est prédite en combinant les effets de plusieurs entrées. Utilisez cet outil pour basculer entre différentes entrées et comparer leur valeur à la prédiction finale."; /* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ "d6m-qV-wWi.text" = "Label"; @@ -77,7 +77,7 @@ "yn7-2M-jZz.text" = "0"; /* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; +"zbc-87-wxZ.text" = "Titre"; /* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ "zvZ-uf-zMX.text" = "0"; diff --git a/Loop/he.lproj/Localizable.strings b/Loop/he.lproj/Localizable.strings index 2ca902a1e0..d0073e7dd5 100644 --- a/Loop/he.lproj/Localizable.strings +++ b/Loop/he.lproj/Localizable.strings @@ -290,7 +290,7 @@ "Disables" = "Disables"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "בטל"; /* No comment provided by engineer. */ @@ -437,7 +437,7 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop תגדיר בזאלי זמני כדי להגדיל ולהקטין מתן אינסולין."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "גלוקוז נמוך"; /* Manage Permissions in Settings button text */ @@ -476,8 +476,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "השפעות מומנטום"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "מידע נוסף"; /* Label for button to mute all alerts */ @@ -493,8 +493,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "אין המלצה לבולוס"; /* The error message displayed for device connection errors. */ @@ -543,12 +543,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "אוי לא! Loop קרסה בזמן הזרקה והתאמות אינסולין נעצרו עד שתסגור חלון זה. ייתכן שהיסטוריות ההזרקות לא תהיה מדוייקת. עיין בגרף מתן האינסולין ועקוב אחר הגלוקוז שלך מקרוב."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "אישור"; /* Notification Setting Status is On */ @@ -636,7 +636,7 @@ "Recommended Basal" = "בזאלי מומלץ"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "בולוס מומלץ"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -646,7 +646,7 @@ "Recommended Bolus: %@ Units" = "בולוס מומלץ: %@ יחידות"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "הזרקת בולוס מרחוק: %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -661,9 +661,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "נסה שוב"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "שמור והזרק"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "שמור ללא הזרקת בולוס"; @@ -707,7 +704,7 @@ "Starting Bolus" = "מתחיל בולוס"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "תמיכה"; /* The title text in settings */ @@ -789,9 +786,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "לא ניתן להפסיק את הבולוס בתהליך. קרב את האייפון שלך למשאבה ונסה שוב. בדוק את היסטוריית מתן האינסולין שלך, ועקוב מקרוב אחר הגלוקוז שלך."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "לא ידוע"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/it.lproj/InfoPlist.strings b/Loop/it.lproj/InfoPlist.strings index f86acc5698..b1e96170c4 100644 --- a/Loop/it.lproj/InfoPlist.strings +++ b/Loop/it.lproj/InfoPlist.strings @@ -26,5 +26,5 @@ "NSHealthUpdateUsageDescription" = "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit."; /* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione delle preimpostazioni con la tua voce"; +"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione dei preset con la tua voce"; diff --git a/Loop/it.lproj/Localizable.strings b/Loop/it.lproj/Localizable.strings index 0528bed0d4..efb90127e1 100644 --- a/Loop/it.lproj/Localizable.strings +++ b/Loop/it.lproj/Localizable.strings @@ -2,7 +2,7 @@ " (pending: %@)" = " (prevista l'erogazione di: %@)"; /* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "Preimpostazioni del Pre-Pasto"; +" Pre-meal Preset" = "Preset del Pre-Pasto"; /* remaining time in setting's profile expiration section */ " remaining" = "Rimanente"; @@ -11,7 +11,7 @@ " Safety Notifications are OFF" = "Le notifiche di sicurezza risultano spente"; /* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "Preimpostazione modalità allenamento"; +" Workout Preset" = "Preset modalità allenamento"; /* String denoting lack of a recommended bolus amount in the simple bolus calculator */ "–" = "–"; @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ non sono stati in grado di cancellare la tua attuale basale temporanea, che è più elevata di quella impostata come nuovo limite massimo di basale. Questo potrebbe comportare una maggiore infusione d'insulina di quanto desiderato. \n\nConsidera di sospendere manualmente l'erogazione d'insulina e quindi di riattivarla immediatamente per attivare l'erogazione d'insulina basale con il corretto limite impostato."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -58,6 +55,9 @@ /* Formats (1: carb start time) and (2: carb absorption duration) */ "%1$@ + %2$@" = "%1$@ + %2$@"; +/* App sounds title text (1: app name) */ +"%1$@ APP SOUNDS" = "%1$@ SUONI DELL'APP"; + /* Alert message for closed loop off informational modal. (1: app name) */ "%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ sta funzionando in modalità Loop chiuso spento. Il tuo microinfusore e il tuo sensore continueranno a funzionare, ma l'applicazione non regolerà la somministrazione d'insulina automaticamente."; @@ -85,6 +85,9 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ "%1$@ v%2$@" = "%1$@ contro %2$@"; +/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ +"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario ricostruirlo."; + /* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ "%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ smetterà di funzionare in %2$@. Dovrai aggiornare prima di tale data con un nuovo provisioning profile."; @@ -92,7 +95,7 @@ "%1$@: %2$@" = "%1$@ : %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@ : %2$@ %3$@"; /* No comment provided by engineer. */ @@ -170,15 +173,18 @@ "Adjusted for" = "Corretto per"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Gestione Avvisi"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Avvisi"; +/* Alert Permissions descriptive text */ +"Alert Permissions and Mute Alerts" = "Autorizzazioni avvisi e avvisi disattivati"; + /* Navigation title for algorithms experiments screen - The title of the Algorithm Experiments section in settings */ +The title of the Algorithm Experiments section in settings */ "Algorithm Experiments" = "Esperimenti sugli algoritmi"; /* Algorithm Experiments description. */ @@ -359,7 +365,7 @@ "Choose Favorite:" = "Scegli il preferito:"; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Chiudi"; /* The title text for the looping enabled switch cell */ @@ -481,7 +487,7 @@ "Disables" = "Disabilita"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "OK"; /* No comment provided by engineer. */ @@ -571,12 +577,18 @@ /* The format string used to describe a finite workout targets duration */ "For %1$@" = "Per %1$@"; +/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ +"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Per motivi di sicurezza, dovresti consentire gli avvisi critici, le autorizzazioni urgenti e di notifica (avvisi non critici) sul tuo dispositivo per continuare a utilizzare %1$@ e non puoi disattivare i singoli allarmi."; + /* No comment provided by engineer. */ "Forecasted blood glucose may still be higher than target range." = "La glicemia prevista potrebbe essere più elevata di quella impostata come obiettivo."; /* Title for forecast explanation modal on bolus view */ "Forecasted Glucose" = "Glicemia prevista"; +/* Label for link to see frequently asked questions */ +"Frequently asked questions about alerts" = "Domande frequenti sugli avvisi"; + /* The short unit display string for grams */ "g" = "g"; @@ -587,7 +599,7 @@ "Glucose" = "Glicemia"; /* Title for glucose based partial application experiment description - Title of glucose based partial application experiment */ +Title of glucose based partial application experiment */ "Glucose Based Partial Application" = "Glucose Based Partial Application (GBPA)"; /* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ @@ -603,7 +615,7 @@ "Glucose effect of suspending insulin delivery" = "Effetto sulla glicemia della sospensione della somministrazione di insulina"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Glicemia inserita fuori dall'intervallo"; /* Title of the prediction input effect for glucose momentum */ @@ -612,9 +624,27 @@ /* Details for configuration error when glucose target range schedule is missing */ "Glucose Target Range Schedule" = "Programma degli intervalli degli obiettivi glicemici"; +/* No comment provided by engineer. */ +"HARDWARE SOUNDS" = "SUONI HARDWARE"; + +/* No comment provided by engineer. */ +"High Glucose" = "Glicemia alta"; + +/* No comment provided by engineer. */ +"How can I silence non-Critical Alerts?" = "Come posso silenziare gli avvisi non critici?"; + +/* No comment provided by engineer. */ +"How can I silence only Time Sensitive and Non-Critical alerts?" = "Come posso silenziare solo gli avvisi urgenti e non critici?"; + +/* Title text for temporarily silencing all sounds (1: app name) */ +"How can I temporarily silence all %1$@ app sounds?" = "Come posso silenziare temporaneamente tutti i suoni dell'app %1$@ ?"; + /* The title text for how to update */ "How to update (LoopDocs)" = "Come Aggiornare (LoopDocs)"; +/* Focus modes descriptive text (1: app name) */ +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Se la modalità Focus iOS è attiva e gli avvisi disattivati sono disattivati, gli avvisi critici verranno comunque inviati e gli avvisi non critici verranno silenziati finché %1$@ non verrà aggiunto a ciascuna modalità Focus come app consentita."; + /* Immediate Delivery status text */ "Immediate" = "Immediato"; @@ -660,7 +690,7 @@ "Insulin Type" = "Tipo d'insulina"; /* Title for integral retrospective correction experiment description - Title of integral retrospective correction experiment */ +Title of integral retrospective correction experiment */ "Integral Retrospective Correction" = "Correzione retrospettiva Integrale"; /* Description of Integral Retrospective Correction toggle. */ @@ -687,6 +717,12 @@ /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ "Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lettura del glucosio non valida con data e ora %1$@ nel futuro"; +/* No comment provided by engineer. */ +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Gli avvisi critici per iOS e gli avvisi urgenti sono tipi di notifiche Apple. Vengono utilizzati per eventi ad alta priorità. Alcuni esempi includono:"; + +/* No comment provided by engineer. */ +"IOS FOCUS MODES" = "MODALITÀ DI MESSA A FUOCO IOS"; + /* The title text for the issue report cell */ "Issue Report" = "Report dei problemi"; @@ -709,7 +745,7 @@ "Loading..." = "Caricamento..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Registra la dose"; /* The title of the screen displaying a manually entered insulin dose */ @@ -730,9 +766,6 @@ /* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ "Loop has not completed successfully in %@" = "Loop non ha funzionato correttamente per %@"; -/* Description of Glucose Based Partial Application toggle. */ -"Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." = "Loop normalmente fornisce il 40%1$ del fabbisogno di insulina previsto per ogni ciclo di dosaggio. \n\n Quando l'esperimento di Applicazione Parziale Basata sul Glucosio (GBPA) è abilitato, il Loop varierà la percentuale del bolo consigliato erogato ad ogni ciclo con il livello di glucosio. \n\nVicino all'intervallo di correzione, utilizzerà il 20%2$ (simile alla basale temporanea) e aumenterà gradualmente fino a un massimo dell'80%3$ in caso di glicemia elevata (200 mg/dl, 11,1 mmol/l). \n\nTieni presente che durante un rapido aumento della glicemia, ad esempio dopo un pasto imprevisto, questa caratteristica, combinata con la velocità e gli effetti di correzione retrospettiva, può comportare una dose maggiore di quella richiesta dall'FSI."; - /* Description string for automatic bolus dosing strategy */ "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop eseguirà automaticamente il bolo quando il fabbisogno d'insulina è superiore alla basale programmata e utilizzerà velocità basali temporanee quando necessario per ridurre l'erogazione d'insulina al di sotto della basale programmata."; @@ -743,12 +776,15 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop imposterà velocità basali temporanee per aumentare e diminuire l'erogazione d'insulina."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Glucosio basso"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Gestisci le autorizzazioni in Impostazioni"; +/* View title for how mute alerts work */ +"Managing Alerts" = "Gestione degli avvisi"; + /* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ "Manual Dose: %1$@ %2$@" = "Dose manuale: %1$@ %2$@"; @@ -782,9 +818,9 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Effetto glicemico attuale"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ -"More Info" = "Piu info"; +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ +"More Info" = "Ulteriori informazioni"; /* Label for button to mute all alerts */ "Mute All Alerts" = "Disattiva tutti gli avvisi"; @@ -805,8 +841,8 @@ "No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Nessun avviso o allarme suonerà quando l'audio è disattivato. Seleziona per quanto tempo desideri disattivare l'audio."; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Nessun bolo consigliato"; /* The error message displayed for device connection errors. */ @@ -855,12 +891,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh No! Loop si è chiuso mentre stava eseguendo un bolo e il dosaggio di insulina è stato messo in pausa, finchè la finestra sarà chiusa. L'elenco dell'infusione d'insulina potrebbe non essere accurato. Per favore rivedi con attenzione la tabella di infusione dell'insulina e sorveglia strettamente la tua glicemia"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -903,7 +939,7 @@ "Profile expires " = "Profilo scaduto"; /* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Il profilo scadra' presto"; +"Profile Expires Soon" = "Il profilo scade a breve"; /* The title of the pump section in settings */ "Pump" = "Microinfusore"; @@ -917,6 +953,9 @@ /* The title of the screen displaying a pump event */ "Pump Event" = "Evento Microinfusore"; +/* No comment provided by engineer. */ +"Pump Expired" = "Microinfusore scaduto"; + /* Details for configuration error when pump manager is missing */ "Pump Manager" = "Gestione Microinfusore"; @@ -951,7 +990,7 @@ "Recommended Basal" = "Basale Raccomandata"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Bolo Raccomandato"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -961,7 +1000,7 @@ "Recommended Bolus: %@ Units" = "Bolo Raccomandato: %@ Unità"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Inserimento di Bolo Remoto:%@ Unita'"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -970,6 +1009,9 @@ /* Details for missing data error when reservoir data is missing */ "Reservoir" = "Serbatoio"; +/* No comment provided by engineer. */ +"Reservoir Empty" = "Serbatoio vuoto"; + /* Title of the prediction input effect for retrospective correction */ "Retrospective Correction" = "Correzione retrospettiva"; @@ -979,12 +1021,12 @@ /* No comment provided by engineer. */ "Save" = "Salva"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Salva e Invia"; - /* No comment provided by engineer. */ "Save as favorite food" = "Salva come cibo preferito"; +/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ +"Save Carbs & Deliver" = "Salva carboidrati ed eroga"; + /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Salva senza bolo"; @@ -994,6 +1036,9 @@ /* No comment provided by engineer. */ "Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Selezionando un alimento preferito nella schermata di immissione dei carboidrati si riempiono automaticamente i campi relativi alla quantità di carboidrati, al tipo di alimento e al tempo di assorbimento! Tocca il pulsante Aggiungi qui sotto per creare il tuo primo cibo preferito!"; +/* No comment provided by engineer. */ +"Sensor Failed" = "Sensore guasto"; + /* The title of the services section in settings */ "Services" = "Servizi"; @@ -1031,7 +1076,7 @@ "Starting Bolus" = "Avvio Bolo"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Supporto"; /* The title text in settings */ @@ -1064,6 +1109,18 @@ /* The alert body for unmute alert confirmation */ "Tap Unmute to resume sound for your alerts and alarms." = "Tocca Riattiva per ripristinare l'audio per gli avvisi e le sveglie."; +/* Settings app TestFlight section */ +"TestFlight" = "TestFlight"; + +/* Settings TestFlight expiration view */ +"TestFlight Expiration" = "Scadenza di TestFlight"; + +/* Time that build expires */ +"TestFlight expires " = "TestFlight scade "; + +/* The title for notification of upcoming TestFlight expiration */ +"TestFlight Expires Soon" = "TestFlight scade a breve"; + /* Alert message for a bolus too small validation error */ "The bolus amount entered is smaller than the minimum deliverable." = "La quantità di bolo immessa è inferiore alla quantità minima erogabile."; @@ -1097,12 +1154,21 @@ /* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ "This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Questa opzione si applica solo quando la strategia di dosaggio di Loop è impostata su Bolo automatico."; +/* No comment provided by engineer. */ +"Time Sensitive Alerts" = "Avvisi sensibili al tempo"; + /* Time Sensitive Status text */ "Time Sensitive Notifications" = "Notifiche a tempo"; +/* No comment provided by engineer. */ +"Transmitter Low Battery" = "Batteria scarica del trasmettitore"; + /* Critical event log export error alert try again button */ "Try Again" = "Riprova"; +/* Description text for temporarily silencing non-critical alerts (1: app name) */ +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Disattiva il volume sul tuo dispositivo iOS o aggiungi %1$@ come app consentita a ciascuna modalità Focus. Gli avvisi urgenti e critici continueranno a suonare, ma gli avvisi non critici verranno silenziati."; + /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Attiva il Bluetooth per ricevere avvisi, allarmi o letture glicemiche del sensore."; @@ -1125,16 +1191,16 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Impossibile interrompere il bolo in corso. Avvicinare l'iPhone al microinfusore e riprovare. Controllare nella cronologia delle somministrazioni l'insulina e monitorare attentamente la glicemia."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Sconosciuto"; /* The error message displayed for unknown errors. (1: unknown error) */ "Unknown Error: %1$@" = "Errore sconosciuto: %1$@"; /* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Preimpostazione sconosciuta: %1$@"; +"Unknown preset: %1$@" = "Preset sconosciuta: %1$@"; /* Unknown amount of time in settings' profile expiration section */ "Unknown time" = "Ora sconosciuta"; @@ -1160,8 +1226,14 @@ /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ "Until I turn off" = "Finché non spengo"; +/* No comment provided by engineer. */ +"Urgent Low" = "Basso urgente"; + /* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Usa preimpostazione Pre-Pasto"; +"Use Pre-Meal Preset" = "Usa il preset Pre-Pasto"; + +/* Description text for temporarily silencing all sounds (1: app name) */ +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Utilizza la funzione Disattiva avvisi. Ti consente di silenziare temporaneamente tutti gli avvisi e gli allarmi tramite l'app %1$@ , inclusi gli avvisi critici e gli avvisi urgenti."; /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Utilizza i target glicemi per l'allenamento"; @@ -1175,6 +1247,9 @@ /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Attenzione! Le notifiche di sicurezza sono disattivate"; +/* No comment provided by engineer. */ +"What are examples of Critical and Time Sensitive alerts?" = "Quali sono alcuni esempi di avvisi critici e urgenti?"; + /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando la glicemia attuale o prevista è inferiore al limite di sicurezza, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità all'ora."; @@ -1187,6 +1262,12 @@ /* No comment provided by engineer. */ "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Quando non è in modalità ciclo chiuso, l'applicazione utilizza un calcolatore di bolo semplificato come un tipico microinfusore."; +/* App sounds descriptive text (1: app name) */ +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Quando gli avvisi silenziosi sono attivi, tutti gli avvisi provenienti dalla tua app %1$@ compresi gli avvisi critici e urgenti, verranno temporaneamente visualizzati senza suoni e solo con la vibrazione."; + +/* No comment provided by engineer. */ +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Anche se gli avvisi sono disattivati, il microinfusore per insulina e l'hardware CGM potrebbero comunque emettere suoni."; + /* Format string for message of reset loop alert. (1: App name) (2: error description) */ "While trying to restart %1$@ an error occured.\n\n%2$@" = "Durante il tentativo di riavviare %1$@ si è verificato un errore.\n\n%2$@"; @@ -1194,7 +1275,7 @@ "Workout Targets" = "Obiettivi di allenamento"; /* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "La regolazione della temperatura di allenamento è stata attivata per più di 24 ore. Assicurarsi di volerla ancora attivare o disattivarla nell'app."; +"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "La funzione Workout Temp Adjust è attiva da più di 24 ore. Assicurati di volerla mantenere attiva oppure disattivala nell'app."; /* Workout override still on reminder alert title */ "Workout Temp Adjust Still On" = "La regolazione della temperatura dell'allenamento è ancora attiva"; diff --git a/Loop/ja.lproj/Localizable.strings b/Loop/ja.lproj/Localizable.strings index 0e443836e9..1a7698f10c 100644 --- a/Loop/ja.lproj/Localizable.strings +++ b/Loop/ja.lproj/Localizable.strings @@ -230,7 +230,7 @@ "Disables" = "無効にする"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "閉じる"; /* The action hint of the workout mode toggle button when disabled */ @@ -331,8 +331,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "モメンタム効果"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "詳細"; /* Sensor state description for the non-valid state */ @@ -345,12 +345,12 @@ "No connected devices, or failure during device connection" = "機器が未接続、または接続に問題"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -459,9 +459,9 @@ "U" = "U"; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "不明"; /* The format for the description of a temporary override end date */ diff --git a/Loop/nb.lproj/Localizable.strings b/Loop/nb.lproj/Localizable.strings index 4284ceb32d..3e4377603c 100644 --- a/Loop/nb.lproj/Localizable.strings +++ b/Loop/nb.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ kunne ikke avbryte den nåværende midlertidige basaldosen, som er høyere enn den nye maksimale basalgrensen du har angitt. Dette kan føre til høyere insulintilførsel enn ønsket. \n\n Vurder å avbryte insulintilførselen manuelt og deretter umiddelbart gjenoppta for å innføre basaltilførsel med den nye grensen på plass."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@ %2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -58,8 +55,11 @@ /* Formats (1: carb start time) and (2: carb absorption duration) */ "%1$@ + %2$@" = "%1$@ + %2$@"; +/* App sounds title text (1: app name) */ +"%1$@ APP SOUNDS" = "%1$@ APP-LYDER"; + /* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ opererer med Closed Loop i OFF posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk."; +"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ opererer med Lukket Loop i AV-posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk."; /* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ "%1$@ is unable to clear the alert from your device" = "%1$@ kan ikke fjerne varselet fra enheten din"; @@ -85,6 +85,9 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ "%1$@ v%2$@" = "%1$@ v %2$@"; +/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ +"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ vil slutte å fungere i %2$@. Du må gjenoppbygge før det."; + /* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ "%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ slutter å fungere om %2$@ . Du må oppdatere før det, med en ny klargjøringsprofil."; @@ -92,7 +95,7 @@ "%1$@: %2$@" = "%1$@ : %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@ : %2$@ %3$@"; /* No comment provided by engineer. */ @@ -170,15 +173,18 @@ "Adjusted for" = "Justert for"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Administrasjon av varsler"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Varslingsinnstillinger"; +/* Alert Permissions descriptive text */ +"Alert Permissions and Mute Alerts" = "Varselstillatelser og demp varsler"; + /* Navigation title for algorithms experiments screen - The title of the Algorithm Experiments section in settings */ +The title of the Algorithm Experiments section in settings */ "Algorithm Experiments" = "Algoritmeeksperimenter"; /* Algorithm Experiments description. */ @@ -359,7 +365,7 @@ "Choose Favorite:" = "Velg favoritt:"; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Lukk"; /* The title text for the looping enabled switch cell */ @@ -481,7 +487,7 @@ "Disables" = "Deaktiverer"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Avvis"; /* No comment provided by engineer. */ @@ -571,12 +577,18 @@ /* The format string used to describe a finite workout targets duration */ "For %1$@" = "For %1$@"; +/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ +"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Av sikkerhetshensyn bør du tillate at kritiske varsler, tidssensitive varsler og varslingstillatelser (ikke-kritiske varsler) på enheten din fortsetter å bruke %1$@ og ikke kan slå av individuelle alarmer."; + /* No comment provided by engineer. */ "Forecasted blood glucose may still be higher than target range." = "Forventet blodsukker kan fortsatt være høyere enn målområdet."; /* Title for forecast explanation modal on bolus view */ "Forecasted Glucose" = "Forventet blodsukker"; +/* Label for link to see frequently asked questions */ +"Frequently asked questions about alerts" = "Ofte stilte spørsmål om varsler"; + /* The short unit display string for grams */ "g" = "g"; @@ -587,7 +599,7 @@ "Glucose" = "Blodsukker"; /* Title for glucose based partial application experiment description - Title of glucose based partial application experiment */ +Title of glucose based partial application experiment */ "Glucose Based Partial Application" = "Partiell anvendelse basert på glukosenivå"; /* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ @@ -603,7 +615,7 @@ "Glucose effect of suspending insulin delivery" = "Glukoseeffekt av å suspendere insulintilførsel"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Blodsukkerdata er utenfor intervallet"; /* Title of the prediction input effect for glucose momentum */ @@ -612,9 +624,27 @@ /* Details for configuration error when glucose target range schedule is missing */ "Glucose Target Range Schedule" = "Tidsplan for blodsukker målområde"; +/* No comment provided by engineer. */ +"HARDWARE SOUNDS" = "MASKINVARELYDER"; + +/* No comment provided by engineer. */ +"High Glucose" = "Høyt glukosenivå"; + +/* No comment provided by engineer. */ +"How can I silence non-Critical Alerts?" = "Hvordan kan jeg dempe ikke-kritiske varsler?"; + +/* No comment provided by engineer. */ +"How can I silence only Time Sensitive and Non-Critical alerts?" = "Hvordan kan jeg deaktivere kun tidssensitive og ikke-kritiske varsler?"; + +/* Title text for temporarily silencing all sounds (1: app name) */ +"How can I temporarily silence all %1$@ app sounds?" = "Hvordan kan jeg midlertidig dempe alle %1$@-applydene?"; + /* The title text for how to update */ "How to update (LoopDocs)" = "Hvordan oppdatere (LoopDocs)"; +/* Focus modes descriptive text (1: app name) */ +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Hvis iOS Focus Mode er PÅ og Mute Alerts er AV, vil kritiske varsler fortsatt bli levert og ikke-kritiske varsler vil bli dempet inntil %1$@ er lagt til i hver Focus Mode som en tillatt app."; + /* Immediate Delivery status text */ "Immediate" = "Umiddelbar"; @@ -660,7 +690,7 @@ "Insulin Type" = "Insulintype"; /* Title for integral retrospective correction experiment description - Title of integral retrospective correction experiment */ +Title of integral retrospective correction experiment */ "Integral Retrospective Correction" = "Integrert retrospektiv korreksjon"; /* Description of Integral Retrospective Correction toggle. */ @@ -687,6 +717,12 @@ /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ "Invalid glucose reading with a timestamp that is %1$@ in the future" = "Ugyldig blodsukkermåling med et tidsstempel som er %1$@ i fremtiden"; +/* No comment provided by engineer. */ +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "iOS Critical Alerts og Time Sensitive Alerts er typer Apple-varsler. De brukes ved hendelser med høy prioritet. Noen eksempler er:"; + +/* No comment provided by engineer. */ +"IOS FOCUS MODES" = "IOS-FOKUSMODUSER"; + /* The title text for the issue report cell */ "Issue Report" = "Problem Rapport"; @@ -709,7 +745,7 @@ "Loading..." = "Laster inn..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Logg Dose"; /* The title of the screen displaying a manually entered insulin dose */ @@ -730,9 +766,6 @@ /* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ "Loop has not completed successfully in %@" = "Loop har ikke fullført i %@"; -/* Description of Glucose Based Partial Application toggle. */ -"Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." = "Loop gir normalt 40 %1$ av det forventede insulinbehovet i hver doseringssyklus.\n\nNår eksperimentet Glukosebasert delvis tilførsel er aktivert, vil Loop variere prosentandelen av anbefalt bolus som tilføres hver syklus med glukosenivået.\n\nI nærheten av korreksjonsområdet bruker den 20 %2$ (i likhet med Temp Basal), og øker gradvis til maksimalt 80 %3$ ved høyt glukosenivå (200 mg/dL, 11,1 mmol/L).\n\nVær oppmerksom på at når glukosenivået stiger raskt, f.eks. etter et uanmeldt måltid, kan denne funksjonen, kombinert med hastighets- og retrospektive korreksjonseffekter, resultere i en større dose enn det ISF skulle tilsi."; - /* Description string for automatic bolus dosing strategy */ "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Lopp vil sette bolus når insulinbehovet er over planlagt basal, og vil bruke midlertidige basale rater når det er nødvendig for å redusere insulintilførselen under planlagt basal"; @@ -743,17 +776,20 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop vil sette midlertidige basal rater for å øke og redusere insulin levering."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Lavt blodsukker"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Behandle tillatelser i Innstillinger"; +/* View title for how mute alerts work */ +"Managing Alerts" = "Administrere varsler"; + /* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ "Manual Dose: %1$@ %2$@" = "Manuell dose: %1$@ %2$@"; /* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Maksimal basalrate per time"; +"Maximum Basal Rate Per Hour" = "Maksimal basaldose pr. time"; /* Details for configuration error when maximum bolus is missing */ "Maximum Bolus" = "Maks bolus"; @@ -782,8 +818,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Momentum effekter"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Mer info"; /* Label for button to mute all alerts */ @@ -805,8 +841,8 @@ "No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Ingen varsler eller alarmer vil høres mens de er dempet. Velg hvor lenge du ønsker å dempe lyden."; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Ingen anbefalt bolus"; /* The error message displayed for device connection errors. */ @@ -855,12 +891,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Å nei! Loop krasjet under dosering, og insulinjusteringer er satt på pause til denne dialogen er lukket. Doseringshistorikken er kanskje ikke nøyaktig. Vennligst sjekk diagrammer for insulin levering, og overvåk blodsukkeret nøye."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -917,6 +953,9 @@ /* The title of the screen displaying a pump event */ "Pump Event" = "Pumpehendelse"; +/* No comment provided by engineer. */ +"Pump Expired" = "Pumpen er utløpt"; + /* Details for configuration error when pump manager is missing */ "Pump Manager" = "Pumpe manager"; @@ -951,7 +990,7 @@ "Recommended Basal" = "Anbefalt Basal"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Anbefalt bolus"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -961,7 +1000,7 @@ "Recommended Bolus: %@ Units" = "Anbefalt bolus: %@ enheter"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Ekstern bolusregistrering: %@ E"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -970,6 +1009,9 @@ /* Details for missing data error when reservoir data is missing */ "Reservoir" = "Reservoar"; +/* No comment provided by engineer. */ +"Reservoir Empty" = "Reservoaret er tomt"; + /* Title of the prediction input effect for retrospective correction */ "Retrospective Correction" = "Retrospektiv korreksjon"; @@ -979,12 +1021,12 @@ /* No comment provided by engineer. */ "Save" = "Lagre"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Lagre og gi bolus"; - /* No comment provided by engineer. */ "Save as favorite food" = "Lagre som favorittmat"; +/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ +"Save Carbs & Deliver" = "Lagre og gi bolus"; + /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Lagre uten å sette bolus"; @@ -994,6 +1036,9 @@ /* No comment provided by engineer. */ "Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Når du velger en favorittmat i skjermbildet for innlegging av karbohydrater, fylles feltene for karbohydratmengde, matvaretype og opptakstid automatisk ut! Trykk på knappen Legg til nedenfor for å opprette din første favorittmat!"; +/* No comment provided by engineer. */ +"Sensor Failed" = "Sensor mislyktes"; + /* The title of the services section in settings */ "Services" = "Tjenester"; @@ -1031,7 +1076,7 @@ "Starting Bolus" = "Starter Bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Brukerstøtte"; /* The title text in settings */ @@ -1064,6 +1109,18 @@ /* The alert body for unmute alert confirmation */ "Tap Unmute to resume sound for your alerts and alarms." = "Trykk på Slå av lyd for å gjenoppta lyden for varsler og alarmer."; +/* Settings app TestFlight section */ +"TestFlight" = "TestFlight"; + +/* Settings TestFlight expiration view */ +"TestFlight Expiration" = "TestFlight-utløp"; + +/* Time that build expires */ +"TestFlight expires " = "TestFlight utløper "; + +/* The title for notification of upcoming TestFlight expiration */ +"TestFlight Expires Soon" = "TestFlight utløper snart"; + /* Alert message for a bolus too small validation error */ "The bolus amount entered is smaller than the minimum deliverable." = "Den angitte bolusmengden er mindre enn minimumsleveransen."; @@ -1097,12 +1154,21 @@ /* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ "This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Dette alternativet gjelder bare når Loops doseringsstrategi er satt til Automatisk bolus."; +/* No comment provided by engineer. */ +"Time Sensitive Alerts" = "Tidssensitive varsler"; + /* Time Sensitive Status text */ "Time Sensitive Notifications" = "Tidssensitive varsler"; +/* No comment provided by engineer. */ +"Transmitter Low Battery" = "Svakt batteri i senderen"; + /* Critical event log export error alert try again button */ "Try Again" = "Prøv på nytt"; +/* Description text for temporarily silencing non-critical alerts (1: app name) */ +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Slå av volumet på iOS-enheten eller legg til %1$@ som en tillatt app i hver fokusmodus. Tidssensitive og kritiske varsler vil fortsatt høres, men ikke-kritiske varsler blir dempet."; + /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Slå på Bluetooth for å motta varsler, alarmer eller avlesninger fra glukosesensor."; @@ -1125,9 +1191,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Kan ikke stoppe bolusen som pågår. Flytt iPhone nærmere pumpen og prøv igjen. Sjekk insulinleveringshistorikken for detaljer, og overvåk glukosen nøye."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Ukjent"; /* The error message displayed for unknown errors. (1: unknown error) */ @@ -1160,9 +1226,15 @@ /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ "Until I turn off" = "Frem til jeg skrur av"; +/* No comment provided by engineer. */ +"Urgent Low" = "Øyeblikkelig lav"; + /* The title of the alert controller used to select a duration for pre-meal targets */ "Use Pre-Meal Preset" = "Bruk pre-måltidsmål"; +/* Description text for temporarily silencing all sounds (1: app name) */ +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Bruk funksjonen Demp varsler. Med denne funksjonen kan du midlertidig dempe alle varsler og alarmer via %1$@-appen, inkludert kritiske varsler og tidssensitive varsler."; + /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Bruk treningsmodus for BS-målområde"; @@ -1175,11 +1247,14 @@ /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Advarsel! Sikkerhetsvarsler er slått AV"; +/* No comment provided by engineer. */ +"What are examples of Critical and Time Sensitive alerts?" = "Hva er eksempler på kritiske og tidssensitive varsler?"; + /* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når gjeldende eller anslått glukose er under glukosesikkerhetsgrensen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basalrate på 0 enheter per time."; +"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når gjeldende eller anslått glukose er under glukosesikkerhetsgrensen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basaldose på 0 enheter pr. time."; /* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når gjeldende eller anslått glukose er under suspenderingsterskelen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basalrate på 0 enheter per time."; +"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når gjeldende eller anslått glukose er under suspenderingsterskelen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basaldose på 0 enheter pr. time."; /* Description of missed meal notifications. */ "When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Når den er aktivert, kan Loop varsle deg når den oppdager et måltid som ikke ble logget."; @@ -1187,6 +1262,12 @@ /* No comment provided by engineer. */ "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Når den er ute av lukket Loop-modus, bruker appen en forenklet boluskalkulator som en vanlig pumpe."; +/* App sounds descriptive text (1: app name) */ +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Når lydløse varsler er på, vil alle varsler fra %1$@-appen, inkludert kritiske og tidssensitive varsler, midlertidig vises uten lyd og kun vibrere."; + +/* No comment provided by engineer. */ +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Selv om dempede varsler er aktivert, kan insulinpumpen og CGM-maskinvaren fortsatt avgi lyd."; + /* Format string for message of reset loop alert. (1: App name) (2: error description) */ "While trying to restart %1$@ an error occured.\n\n%2$@" = "Det oppstod en feil da du prøvde å starte %1$@ på nytt.\n\n%2$@"; diff --git a/Loop/nl.lproj/Localizable.strings b/Loop/nl.lproj/Localizable.strings index 15a1423c3f..e71d64843f 100644 --- a/Loop/nl.lproj/Localizable.strings +++ b/Loop/nl.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ kon je huidige tijdelijke basaalsnelheid niet annuleren, die hoger is dan de nieuwe Maximale Basaallimiet die je hebt ingesteld. Dit kan leiden tot een hogere insulinetoediening dan gewenst. \n\nOverweeg om de insulinetoediening handmatig te onderbreken en dan direct het hervatten van de basaaltoediening uit te laten voeren met de nieuwe geldende limiet."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ - %2$@ %3$@"; @@ -92,7 +89,7 @@ "%1$@: %2$@" = "%1$@ : %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* No comment provided by engineer. */ @@ -170,15 +167,15 @@ "Adjusted for" = "Aangepast voor"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Meldingbeheer"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Toestemming Meldingen"; /* Navigation title for algorithms experiments screen - The title of the Algorithm Experiments section in settings */ +The title of the Algorithm Experiments section in settings */ "Algorithm Experiments" = "Algoritme Experimenten"; /* Algorithm Experiments description. */ @@ -341,7 +338,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Kies een langere opnametijd voor grotere maaltijden of voor maaltijden die vetten en eiwitten bevatten. Dit is alleen een leidraad voor het algoritme en hoeft niet exact te zijn."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Sluiten"; /* The title text for the looping enabled switch cell */ @@ -454,7 +451,7 @@ "Disables" = "Uitschakelen"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Sluiten"; /* No comment provided by engineer. */ @@ -563,7 +560,7 @@ "Glucose Data Now Available" = "Glucosegegevens Nu Beschikbaar"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Glucose-invoer Buiten Bereik"; /* Title of the prediction input effect for glucose momentum */ @@ -656,7 +653,7 @@ "Loading..." = "Laden..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Registreer Dosis"; /* The title of the screen displaying a manually entered insulin dose */ @@ -687,7 +684,7 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop stelt tijdelijke basaalsnelheden in om de insulinetoediening te verhogen of te verlagen."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Lage Glucose"; /* Manage Permissions in Settings button text */ @@ -726,8 +723,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Trendlijneffecten"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Meer Informatie"; /* Label for button to mute all alerts */ @@ -743,8 +740,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Geen Bolus Aanbevolen"; /* The error message displayed for device connection errors. */ @@ -793,12 +790,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh nee! Loop is vastgelopen tijdens het toedienen, en insulineaanpassingen zijn gepauzeerd totdat dit dialoogvenster wordt gesloten. De doseringsgeschiedenis is mogelijk niet nauwkeurig. Bekijk de Insulinetoedieningsgrafieken en controleer je bloedglucose nauwkeurig."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "Ok"; /* Notification Setting Status is On */ @@ -886,7 +883,7 @@ "Recommended Basal" = "Aanbevolen Basaal"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Aanbevolen Bolus"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -896,7 +893,7 @@ "Recommended Bolus: %@ Units" = "Aanbevolen Bolus: %@ Eenheden"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Remote Bolusinvoer: %@ E"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -911,9 +908,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Opnieuw Proberen"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Opslaan en Toedienen"; - /* No comment provided by engineer. */ "Save as favorite food" = "Opslaan als favoriet voedsel"; @@ -963,7 +957,7 @@ "Starting Bolus" = "Bolus Starten"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Ondersteuning"; /* The title text in settings */ @@ -1045,9 +1039,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Kan de toedienende bolus niet stoppen. Plaats je iPhone dichter bij de pomp en probeer het opnieuw. Controleer je insulinetoedieningsgeschiedenis voor details, en houd je glucose nauwlettend in de gaten."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Onbekend"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/pl.lproj/Localizable.strings b/Loop/pl.lproj/Localizable.strings index 3a365d7036..14ae2795a6 100644 --- a/Loop/pl.lproj/Localizable.strings +++ b/Loop/pl.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ nie mógł anulować bieżącej tymczasowej dawki podstawowej, która jest wyższa niż nowy ustawiony limit maksymalnej dawki podstawowej. Może to skutkować wyższym niż pożądane podawaniem insuliny. \n\n Rozważ ręczne wstrzymanie podawania insuliny, a następnie natychmiastowe wznowienie podawania dawki podstawowej z obowiązującym nowym limitem."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -58,6 +55,9 @@ /* Formats (1: carb start time) and (2: carb absorption duration) */ "%1$@ + %2$@" = "%1$@ + %2$@"; +/* App sounds title text (1: app name) */ +"%1$@ APP SOUNDS" = "%1$@ DŹWIĘKI APLIKACJI"; + /* Alert message for closed loop off informational modal. (1: app name) */ "%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ działa z zamkniętą pętlą w pozycji OFF. Twoja pompa i CGM będą nadal działać, ale aplikacja nie będzie automatycznie dostosowywać insuliny."; @@ -85,6 +85,9 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ "%1$@ v%2$@" = "%1$@ v%2$@"; +/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ +"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ przestanie działać w %2$@. Konieczna będzie wcześniejsza odbudowa."; + /* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ "%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ przestanie działać za %2$@ . Wcześniej konieczna będzie aktualizacja przy użyciu nowego profilu udostępniania."; @@ -92,7 +95,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* No comment provided by engineer. */ @@ -170,15 +173,18 @@ "Adjusted for" = "Dostosowane do"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Zarządzanie alertami"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Uprawnienia alertów"; +/* Alert Permissions descriptive text */ +"Alert Permissions and Mute Alerts" = "Uprawnienia do alertów i wyciszanie alertów"; + /* Navigation title for algorithms experiments screen - The title of the Algorithm Experiments section in settings */ +The title of the Algorithm Experiments section in settings */ "Algorithm Experiments" = "Algorytmy Eksperymentalne"; /* Algorithm Experiments description. */ @@ -359,7 +365,7 @@ "Choose Favorite:" = "Wybierz ulubione:"; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Zamknij"; /* The title text for the looping enabled switch cell */ @@ -481,7 +487,7 @@ "Disables" = "Wyłącza"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Rozumiem"; /* No comment provided by engineer. */ @@ -566,17 +572,23 @@ "Fingerstick Glucose" = "Glukoza z krwi"; /* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Włącz powiadomienia i alerty krytyczne."; +"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Napraw teraz, włączając powiadomienia, alerty krytyczne i powiadomienia zależne od czasu."; /* The format string used to describe a finite workout targets duration */ "For %1$@" = "Do %1$@"; +/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ +"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Ze względów bezpieczeństwa należy zezwolić na alerty krytyczne, alerty zależne od czasu i uprawnienia do powiadomień (alerty niekrytyczne) na swoim urządzeniu na dalsze korzystanie z %1$@ i nie można wyłączać poszczególnych alarmów."; + /* No comment provided by engineer. */ "Forecasted blood glucose may still be higher than target range." = "Prognozowany poziom glukozy we krwi może nadal być wyższy niż zakres docelowy."; /* Title for forecast explanation modal on bolus view */ "Forecasted Glucose" = "Prognozowana glukoza"; +/* Label for link to see frequently asked questions */ +"Frequently asked questions about alerts" = "Często zadawane pytania dotyczące alertów"; + /* The short unit display string for grams */ "g" = "g"; @@ -587,7 +599,7 @@ "Glucose" = "Glukoza"; /* Title for glucose based partial application experiment description - Title of glucose based partial application experiment */ +Title of glucose based partial application experiment */ "Glucose Based Partial Application" = "Algorytm adaptacyjny"; /* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ @@ -603,7 +615,7 @@ "Glucose effect of suspending insulin delivery" = "Wpływ wstrzymania podawania insuliny na poziom glukozy"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Wprowadzanie glukoza jest poza zakresem"; /* Title of the prediction input effect for glucose momentum */ @@ -612,9 +624,27 @@ /* Details for configuration error when glucose target range schedule is missing */ "Glucose Target Range Schedule" = "Harmonogram zakresu docelowego glukozy"; +/* No comment provided by engineer. */ +"HARDWARE SOUNDS" = "DŹWIĘKI SPRZĘTOWE"; + +/* No comment provided by engineer. */ +"High Glucose" = "Wysoki poziom glukozy"; + +/* No comment provided by engineer. */ +"How can I silence non-Critical Alerts?" = "Jak mogę wyciszyć alerty niekrytyczne?"; + +/* No comment provided by engineer. */ +"How can I silence only Time Sensitive and Non-Critical alerts?" = "Jak wyciszyć tylko alerty zależne od czasu i niekrytyczne?"; + +/* Title text for temporarily silencing all sounds (1: app name) */ +"How can I temporarily silence all %1$@ app sounds?" = "Jak mogę tymczasowo wyciszyć wszystkie dźwięki aplikacji %1$@ ?"; + /* The title text for how to update */ "How to update (LoopDocs)" = "Jak zaktualizować (LoopDocs)"; +/* Focus modes descriptive text (1: app name) */ +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Jeśli tryb skupienia w systemie iOS jest włączony, a opcja Wycisz alerty jest wyłączona, alerty krytyczne będą nadal dostarczane, a alerty niekrytyczne będą wyciszane, dopóki %1$@ nie zostanie dodany do każdego trybu skupienia jako dozwolona aplikacja."; + /* Immediate Delivery status text */ "Immediate" = "Natychmiastowy"; @@ -660,7 +690,7 @@ "Insulin Type" = "Rodzaj insuliny"; /* Title for integral retrospective correction experiment description - Title of integral retrospective correction experiment */ +Title of integral retrospective correction experiment */ "Integral Retrospective Correction" = "Integralna korekta retrospektywna"; /* Description of Integral Retrospective Correction toggle. */ @@ -687,6 +717,12 @@ /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ "Invalid glucose reading with a timestamp that is %1$@ in the future" = "Nieprawidłowy odczyt glukozy ze znacznikiem czasu, który wynosi %1$@ w przyszłości"; +/* No comment provided by engineer. */ +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Alerty krytyczne systemu iOS i alerty zależne od czasu to typy powiadomień Apple. Wykorzystuje się je do zdarzeń o wysokim priorytecie. Oto kilka przykładów:"; + +/* No comment provided by engineer. */ +"IOS FOCUS MODES" = "TRYBY SKUPIENIA IOS"; + /* The title text for the issue report cell */ "Issue Report" = "Zgłaszanie błędów"; @@ -709,7 +745,7 @@ "Loading..." = "Ładowanie..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Zarejestruj dawkę"; /* The title of the screen displaying a manually entered insulin dose */ @@ -730,9 +766,6 @@ /* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ "Loop has not completed successfully in %@" = "Loop nie działał poprawnie przez %@"; -/* Description of Glucose Based Partial Application toggle. */ -"Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." = "Pętla zwykle daje 40%1$ przewidywanego zapotrzebowania na insulinę w każdym cyklu dawkowania. \n\nPo włączeniu eksperymentu częściowego podania insuliny w oparciu o glukozę, Loop będzie zmieniać procent zalecanego bolusa podawanego w każdym cyklu w zależności od poziomu glukozy. \n\nW pobliżu zakresu korekcji będzie zużywać 20%2$ (podobnie jak Baza Tymczasowa) i stopniowo zwiększać do maksimum 80%3$ przy wysokim stężeniu glukozy (200 mg/dl, 11,1 mmol/l). \n\nNależy pamiętać, że podczas szybkiego wzrostu stężenia glukozy, na przykład po niezapowiedzianym posiłku, ta funkcja w połączeniu z szybkością i retrospektywnymi efektami korekcyjnymi może skutkować większą dawką, niż wymagałby ISF."; - /* Description string for automatic bolus dosing strategy */ "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Pętla automatycznie poda bolusa, kiedy zapotrzebowanie na insulinę przekroczy zaplanowaną dawkę podstawową, a w razie potrzeby zredukuje zaplanowaną dawkę podstawową (bazę)."; @@ -743,12 +776,15 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Pętla ustawi tymczasowe dawki podstawowe, aby zwiększać lub zmniejszyć podawanie insuliny."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Niski poziom glukozy"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Zarządzaj uprawnieniami w Ustawieniach"; +/* View title for how mute alerts work */ +"Managing Alerts" = "Zarządzanie alertami"; + /* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ "Manual Dose: %1$@ %2$@" = "Dawka z pena: %1$@ %2$@"; @@ -782,8 +818,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "wpływ pędu"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Więcej informacji"; /* Label for button to mute all alerts */ @@ -805,8 +841,8 @@ "No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Po wyciszeniu nie będą emitowane żadne alerty ani alarmy. Wybierz, jak długo chcesz wyciszyć."; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Bolus nie jest zalecany"; /* The error message displayed for device connection errors. */ @@ -846,7 +882,7 @@ "Notifications give you important %1$@ app information without requiring you to open the app." = "Powiadomienia zawierają ważne informacje o aplikacji %1$@ bez konieczności otwierania aplikacji."; /* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Powiadomienia dostarczają ważnych informacji o aplikacji %1$@ bez konieczności otwierania aplikacji. \n\nWłącz je w ustawieniach telefonu, aby mieć pewność, że będziesz otrzymywać powiadomienia %1$@ , alerty krytyczne i powiadomienia czasowe."; +"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Powiadomienia dostarczają ważnych informacji o aplikacji %1$@ bez konieczności otwierania aplikacji. \n\nWłącz je w ustawieniach telefonu, aby mieć pewność, że będziesz otrzymywać powiadomienia %1$@ , alerty krytyczne i powiadomienia zależne od czasu."; /* Notification Setting Status is Off */ "Off" = "Wyłącz"; @@ -855,12 +891,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "O nie! Pętla uległa awarii podczas dozowania, a regulacja insuliny została wstrzymana do czasu zamknięcia tego okna dialogowego. Historia dawkowania może nie być dokładna. Przejrzyj wykresy podawania insuliny i uważnie monitoruj poziom glukozy we krwi."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -917,6 +953,9 @@ /* The title of the screen displaying a pump event */ "Pump Event" = "Zdarzenie pompy"; +/* No comment provided by engineer. */ +"Pump Expired" = "Pompa wygasła"; + /* Details for configuration error when pump manager is missing */ "Pump Manager" = "Zarządzanie Pompą"; @@ -951,7 +990,7 @@ "Recommended Basal" = "Zalecana baza"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Zalecany bolus"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -961,7 +1000,7 @@ "Recommended Bolus: %@ Units" = "Rekomendowany bolus: %@ jednostek"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Zdalne podanie bolusa: %@ J"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -970,6 +1009,9 @@ /* Details for missing data error when reservoir data is missing */ "Reservoir" = "Zbiorniczek"; +/* No comment provided by engineer. */ +"Reservoir Empty" = "Pusty zbiorniczek"; + /* Title of the prediction input effect for retrospective correction */ "Retrospective Correction" = "Korekcja retrospektywna"; @@ -979,9 +1021,6 @@ /* No comment provided by engineer. */ "Save" = "Zapisz"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Zapisz i podaj"; - /* No comment provided by engineer. */ "Save as favorite food" = "Zapisz jako ulubione jedzenie"; @@ -994,6 +1033,9 @@ /* No comment provided by engineer. */ "Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Wybór ulubionego jedzenia na ekranie wprowadzania węglowodanów powoduje automatyczne wypełnienie pól ilości węglowodanów, rodzaju jedzenia i czasu wchłaniania! Dotknij przycisku dodawania poniżej, aby stworzyć swoje pierwsze ulubione jedzenie!"; +/* No comment provided by engineer. */ +"Sensor Failed" = "Awaria sensora"; + /* The title of the services section in settings */ "Services" = "Usługi"; @@ -1031,7 +1073,7 @@ "Starting Bolus" = "Rozpoczynam podawanie bolusa"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Wsparcie"; /* The title text in settings */ @@ -1064,6 +1106,18 @@ /* The alert body for unmute alert confirmation */ "Tap Unmute to resume sound for your alerts and alarms." = "Stuknij opcję Wyłącz wyciszenie, aby wznowić dźwięk alertów i alarmów."; +/* Settings app TestFlight section */ +"TestFlight" = "TestFlight"; + +/* Settings TestFlight expiration view */ +"TestFlight Expiration" = "Wygaśnięcie TestFlight"; + +/* Time that build expires */ +"TestFlight expires " = "TestFlight wygasa"; + +/* The title for notification of upcoming TestFlight expiration */ +"TestFlight Expires Soon" = "TestFlight wkrótce wygaśnie"; + /* Alert message for a bolus too small validation error */ "The bolus amount entered is smaller than the minimum deliverable." = "Wprowadzona wielkość bolusa jest mniejsza niż minimalna możliwa do podania."; @@ -1097,12 +1151,21 @@ /* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ "This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Ta opcja ma zastosowanie tylko wtedy, gdy Strategia dawkowania pętli jest ustawiona na Automatyczny bolus."; +/* No comment provided by engineer. */ +"Time Sensitive Alerts" = "Alerty zależne od czasu"; + /* Time Sensitive Status text */ "Time Sensitive Notifications" = "Powiadomienia zależne od czasu"; +/* No comment provided by engineer. */ +"Transmitter Low Battery" = "Słaba bateria transmitera"; + /* Critical event log export error alert try again button */ "Try Again" = "Spróbuj ponownie"; +/* Description text for temporarily silencing non-critical alerts (1: app name) */ +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Wyłącz głośność na swoim urządzeniu iOS lub dodaj %1$@ jako dozwoloną aplikację do każdego trybu skupienia. Alerty zależne od czasu i krytyczne będą nadal emitowane, ale alerty niekrytyczne zostaną wyciszone."; + /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Włącz Bluetooth, aby otrzymywać powiadomienia, alarmy lub odczyty poziomu glukozy z sensora."; @@ -1125,9 +1188,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Nie można zatrzymać podawanego bolusa. Przybliż iPhone'a do pompy i spróbuj ponownie. Aby uzyskać szczegółowe informacje, sprawdź historię podawania insuliny i uważnie monitoruj poziom glukozy."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Nieznany"; /* The error message displayed for unknown errors. (1: unknown error) */ @@ -1160,9 +1223,15 @@ /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ "Until I turn off" = "Dopóki nie wyłączę"; +/* No comment provided by engineer. */ +"Urgent Low" = "Pilny niski"; + /* The title of the alert controller used to select a duration for pre-meal targets */ "Use Pre-Meal Preset" = "Użyj ustawień przed posiłkiem"; +/* Description text for temporarily silencing all sounds (1: app name) */ +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Użyj funkcji Wycisz alerty. Umożliwia tymczasowe wyciszenie wszystkich alertów i alarmów za pośrednictwem aplikacji %1$@ , w tym alertów krytycznych i alertów zależnych od czasu."; + /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Użyj zakresu glukozy dla wysiłku fizycznego"; @@ -1175,6 +1244,9 @@ /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Uwaga! Powiadomienia dotyczące bezpieczeństwa są WYŁĄCZONE"; +/* No comment provided by engineer. */ +"What are examples of Critical and Time Sensitive alerts?" = "Jakie są przykłady alertów krytycznych i alerty zależne od czasu?"; + /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Kiedy aktualny lub prognozowany poziom glukozy znajduje się poniżej granicy bezpieczeństwa, Loop nie zaleca bolusa i zawsze zaleca tymczasową dawkę podstawową wynoszącą 0 jednostek na godzinę."; @@ -1187,6 +1259,12 @@ /* No comment provided by engineer. */ "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Poza trybem pętli zamkniętej aplikacja korzysta z uproszczonego kalkulatora bolusa, takiego jak typowa pompa."; +/* App sounds descriptive text (1: app name) */ +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Gdy włączone jest wyciszenie alertów, wszystkie alerty z aplikacji %1$@ w tym alerty krytyczne i alerty zależne od czasu, będą tymczasowo wyświetlane bez dźwięków i będą jedynie wibrować."; + +/* No comment provided by engineer. */ +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Gdy włączone jest wyciszenie alertów, pompa insulinowa i sprzęt CGM mogą nadal wydawać dźwięki."; + /* Format string for message of reset loop alert. (1: App name) (2: error description) */ "While trying to restart %1$@ an error occured.\n\n%2$@" = "Podczas próby ponownego uruchomienia %1$@ wystąpił błąd. \n\n %2$@"; diff --git a/Loop/pt-BR.lproj/Localizable.strings b/Loop/pt-BR.lproj/Localizable.strings index cb0345df80..e78a0d1aa6 100644 --- a/Loop/pt-BR.lproj/Localizable.strings +++ b/Loop/pt-BR.lproj/Localizable.strings @@ -230,7 +230,7 @@ "Disables" = "Desativa"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Dispensar"; /* The action hint of the workout mode toggle button when disabled */ @@ -331,8 +331,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Efeitos de aceleração"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Mais Info"; /* Sensor state description for the non-valid state */ @@ -345,12 +345,12 @@ "No connected devices, or failure during device connection" = "Nenhum dispositivo conectado ou falha durante a conexão"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -459,9 +459,9 @@ "U" = "U"; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Desconhecido"; /* The format for the description of a temporary override end date */ diff --git a/Loop/ro.lproj/Localizable.strings b/Loop/ro.lproj/Localizable.strings index 3a0da3f688..cee5790643 100644 --- a/Loop/ro.lproj/Localizable.strings +++ b/Loop/ro.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ nu a putut anula rata bazală temporară actuală, care este mai mare decât noua limită bazală maximă pe care ați setat-o. Acest lucru poate duce la o administrare de insulină mai mare decât se dorește. \n\nLuați în considerare suspendarea manuală a administrării insulinei și apoi reluarea imediată pentru a pune în aplicare administrarea bazală cu noua limită în vigoare."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -92,7 +89,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* Description of the prediction input effect for glucose momentum */ @@ -164,11 +161,11 @@ "Adjusted for" = "Ajustat pentru"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Gestionarea alertelor"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Permisiuni pentru alarme"; /* The title of the section containing algorithm settings */ @@ -325,7 +322,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Alegeți o durată mai lungă de absorbție pentru mese mai mari sau pentru cele care conțin grăsimi și proteine. Nu e necesară o valoare exactă, scopul e să oferim doar o ghidare pentru algoritm."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Închide"; /* The title text for the looping enabled switch cell */ @@ -438,7 +435,7 @@ "Disables" = "Dezactivează"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Renunță"; /* No comment provided by engineer. */ @@ -544,7 +541,7 @@ "Glucose Data Now Available" = "Valorile glicemiei sunt disponibile"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Valoarea glicemică introdusă este în afara intervalului"; /* Title of the prediction input effect for glucose momentum */ @@ -637,7 +634,7 @@ "Loading..." = "Se încarcă..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Înregistrează Doză"; /* The title of the screen displaying a manually entered insulin dose */ @@ -668,7 +665,7 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop va stabili ratele bazale temporare pentru a crește și reduce cantitatea de insulina livrata."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Glicemie scăzută"; /* Manage Permissions in Settings button text */ @@ -707,8 +704,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Efecte momentum"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Detalii"; /* Label for button to mute all alerts */ @@ -724,8 +721,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Niciun bolus recomandat"; /* The error message displayed for device connection errors. */ @@ -774,12 +771,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh nu! Loop s-a blocat în timpul administrării, iar ajustările insulinei au fost întrerupte până când acest dialog este închis. Istoricul administrării poate să nu fie exact. Vă rugăm să consultați tabelele de livrare a insulinei și să vă monitorizați cu atenție glicemia."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -867,7 +864,7 @@ "Recommended Basal" = "Bazala recomandată"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Bolus recomandat"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -877,7 +874,7 @@ "Recommended Bolus: %@ Units" = "Bolus recomandat: %@ unități"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Introducere de la distanță a bolusului: %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -892,9 +889,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Reîncearcă"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Salvează si Livrează"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Salvează fără bolusare"; @@ -938,7 +932,7 @@ "Starting Bolus" = "Start Bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Asistenţă"; /* The title text in settings */ @@ -1020,9 +1014,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Nu s-a putut opri livrarea bolusului. Mutați iPhone-ul mai aproape de pompă și încercați din nou. Verificați istoricul administrării insulinei pentru detalii și monitorizați îndeaproape glicemia."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Necunoscut"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/ru.lproj/Localizable.strings b/Loop/ru.lproj/Localizable.strings index 43cb4146cb..f657557485 100644 --- a/Loop/ru.lproj/Localizable.strings +++ b/Loop/ru.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ не смог отменить вашу текущую ВБС, которая превышает установленный вами новый предел максимальной ВБС. Это может привести к большему количеству подаваемого инсулина, чем хотелось бы.\n\nРассмотрите возможность приостановить введение инсулина вручную, а затем немедленно возобновить введение базального инсулина с новым установленным лимитом."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@ %2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -58,6 +55,9 @@ /* Formats (1: carb start time) and (2: carb absorption duration) */ "%1$@ + %2$@" = "%1$@ + %2$@"; +/* App sounds title text (1: app name) */ +"%1$@ APP SOUNDS" = "%1$@ ЗВУКИ ПРИЛОЖЕНИЯ"; + /* Alert message for closed loop off informational modal. (1: app name) */ "%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ работает с замкнутым циклом в положении ВЫКЛ. Ваша помпа и CGM будут продолжать работать, но приложение не будет регулировать дозировку автоматически."; @@ -85,6 +85,9 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ "%1$@ v%2$@" = "%1$@ версии %2$@"; +/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ +"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ перестанет работать в %2$@. До этого времени необходимо пересобрать приложение заново."; + /* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ "%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ перестанет работать в %2$@. Вам нужно будет обновить его до этого, используя новую подпись."; @@ -92,7 +95,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* No comment provided by engineer. */ @@ -167,13 +170,16 @@ "Adjusted for" = "Скорректировано на"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Управление оповещениями"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Разрешение оповещений"; +/* Alert Permissions descriptive text */ +"Alert Permissions and Mute Alerts" = "Разрешения на оповещения и отключение звука оповещений"; + /* The title of the section containing algorithm settings */ "Algorithm Settings" = "Настройки алгоритма"; @@ -328,7 +334,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Выберите более длительное время усвоения для больших порций пищи или тех, которые содержат жиры и белки. Это лишь руководство к алгоритму и не обязательно должно быть точным."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Закрыть"; /* The title text for the looping enabled switch cell */ @@ -441,7 +447,7 @@ "Disables" = "Отключает"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Отклонить"; /* No comment provided by engineer. */ @@ -522,12 +528,18 @@ /* The format string used to describe a finite workout targets duration */ "For %1$@" = "В течение %1$@"; +/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ +"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "В целях безопасности вам следует разрешить критические оповещения, срочные оповещения и уведомления (некритические оповещения) на вашем устройстве, чтобы продолжить использовать %1$@ и не отключать отдельные тревоги."; + /* No comment provided by engineer. */ "Forecasted blood glucose may still be higher than target range." = "Прогнозируемый уровень глюкозы в крови все еще может быть выше целевого диапазона."; /* Title for forecast explanation modal on bolus view */ "Forecasted Glucose" = "Прогнозируемый уровень глюкозы"; +/* Label for link to see frequently asked questions */ +"Frequently asked questions about alerts" = "Часто задаваемые вопросы об оповещениях"; + /* The short unit display string for grams */ "g" = "г"; @@ -547,7 +559,7 @@ "Glucose Data Now Available" = "Данные о глюкозе теперь доступны"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Ввод глюкозы вне допустимого диапазона"; /* Title of the prediction input effect for glucose momentum */ @@ -556,9 +568,27 @@ /* Details for configuration error when glucose target range schedule is missing */ "Glucose Target Range Schedule" = "График целевого диапазона глюкозы"; +/* No comment provided by engineer. */ +"HARDWARE SOUNDS" = "АППАРАТНЫЕ ЗВУКИ"; + +/* No comment provided by engineer. */ +"High Glucose" = "Высокий уровень глюкозы"; + +/* No comment provided by engineer. */ +"How can I silence non-Critical Alerts?" = "Как отключить некритичные оповещения?"; + +/* No comment provided by engineer. */ +"How can I silence only Time Sensitive and Non-Critical alerts?" = "Как отключить только срочные и некритические предупреждения?"; + +/* Title text for temporarily silencing all sounds (1: app name) */ +"How can I temporarily silence all %1$@ app sounds?" = "Как временно отключить все звуки приложения %1$@?"; + /* The title text for how to update */ "How to update (LoopDocs)" = "Как обновить (LoopDocs)"; +/* Focus modes descriptive text (1: app name) */ +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Если режим фокусировки iOS включен, а функция отключения оповещений выключена, критические оповещения будут по-прежнему доставляться, а некритические будут глушиться до тех пор, пока %1$@ не будет добавлен в каждый режим фокусировки в качестве разрешенного приложения."; + /* Immediate Delivery status text */ "Immediate" = "Немедленно"; @@ -618,6 +648,12 @@ /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ "Invalid glucose reading with a timestamp that is %1$@ in the future" = "Неверное показание глюкозы с временной меткой, которая находится на %1$@ в будущем"; +/* No comment provided by engineer. */ +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Критические оповещения iOS и срочные оповещения — это типы уведомлений Apple. Они используются для проведения высокоприоритетных мероприятий. Вот некоторые примеры:"; + +/* No comment provided by engineer. */ +"IOS FOCUS MODES" = "РЕЖИМЫ ФОКУСИРОВКИ IOS"; + /* The title text for the issue report cell */ "Issue Report" = "Сообщить об ошибке"; @@ -640,7 +676,7 @@ "Loading..." = "Загрузка..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Доза из лога"; /* The title of the screen displaying a manually entered insulin dose */ @@ -671,12 +707,15 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Петля установит ВБС для увеличения или уменьшения подачи инсулина."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Низкий уровень глюкозы"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Управление разрешениями в настройках"; +/* View title for how mute alerts work */ +"Managing Alerts" = "Управление оповещениями"; + /* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ "Manual Dose: %1$@ %2$@" = "Ручная доза: %1$@ %2$@"; @@ -710,8 +749,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Влияние динамики СК"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Доп. инфо"; /* Label for button to mute all alerts */ @@ -727,8 +766,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Нет рекомендации болюса"; /* The error message displayed for device connection errors. */ @@ -777,12 +816,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Внимание! Во время подачи произошел сбой петли, и управление помпой было приостановлено до закрытия этого диалога. История событий может быть неточной. Пожалуйста, просмотрите графики введения инсулина в помпе и внимательно следите за уровнем глюкозы в крови."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -839,6 +878,9 @@ /* The title of the screen displaying a pump event */ "Pump Event" = "Событие помпы"; +/* No comment provided by engineer. */ +"Pump Expired" = "Срок работы помпы закончился"; + /* Details for configuration error when pump manager is missing */ "Pump Manager" = "Менеджер помпо"; @@ -873,7 +915,7 @@ "Recommended Basal" = "Рекомендуемый базал"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Рекомендуемый болюс"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -883,7 +925,7 @@ "Recommended Bolus: %@ Units" = "Рекомендуемый болюс: %@ ед"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Удаленный ввод болюса: %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -892,21 +934,24 @@ /* Details for missing data error when reservoir data is missing */ "Reservoir" = "Резервуар"; +/* No comment provided by engineer. */ +"Reservoir Empty" = "Резервуар пуст"; + /* Title of the prediction input effect for retrospective correction */ "Retrospective Correction" = "Ретроспективная коррекция"; /* The title of the notification action to retry a bolus command */ "Retry" = "Повторить"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Сохранить и подать болюс"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Сохранить без болюса"; /* Scheduled Delivery status text */ "Scheduled" = "Запланировано"; +/* No comment provided by engineer. */ +"Sensor Failed" = "Ошибка сенсора"; + /* The title of the services section in settings */ "Services" = "Службы"; @@ -944,7 +989,7 @@ "Starting Bolus" = "Начинаю болюс"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Поддержка"; /* The title text in settings */ @@ -968,6 +1013,18 @@ /* Message presented in the status row instructing the user to tap this row to stop a bolus */ "Tap to Stop" = "Нажмите, чтобы остановить"; +/* Settings app TestFlight section */ +"TestFlight" = "TestFlight"; + +/* Settings TestFlight expiration view */ +"TestFlight Expiration" = "Срок действия TestFlight"; + +/* Time that build expires */ +"TestFlight expires " = "Срок действия TestFlight истекает "; + +/* The title for notification of upcoming TestFlight expiration */ +"TestFlight Expires Soon" = "Срок действия TestFlight скоро истечет"; + /* Alert message for a bolus too small validation error */ "The bolus amount entered is smaller than the minimum deliverable." = "Введенное количество болюса меньше минимально допустимого в помпе"; @@ -1001,12 +1058,21 @@ /* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ "This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Эта опция применима только в том случае, если для стратегии дозирования петли установлено значение «Автоматический болюс»."; +/* No comment provided by engineer. */ +"Time Sensitive Alerts" = "Срочные оповещения"; + /* Time Sensitive Status text */ "Time Sensitive Notifications" = "Уведомления, чувствительные к времени"; +/* No comment provided by engineer. */ +"Transmitter Low Battery" = "Батарейка трансмиттера садится"; + /* Critical event log export error alert try again button */ "Try Again" = "Попробуйте еще раз"; +/* Description text for temporarily silencing non-critical alerts (1: app name) */ +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Выключите громкость на устройстве iOS или добавьте %1$@ в качестве разрешенного приложения для каждого режима фокусировки. Срочные и критические оповещения по-прежнему будут звучать, но некритические оповещения будут отключены."; + /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Включите Bluetooth для получения предупреждений, сигналов тревоги или показаний датчика глюкозы."; @@ -1029,9 +1095,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Не удается остановить текущий болюс. Переместите свой iPhone ближе к помпе и попробуйте еще раз. Проверьте историю введения инсулина и внимательно следите за уровнем глюкозы."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Неизвестно"; /* The error message displayed for unknown errors. (1: unknown error) */ @@ -1064,9 +1130,15 @@ /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ "Until I turn off" = "Пока я не выключу"; +/* No comment provided by engineer. */ +"Urgent Low" = "Очень низкий"; + /* The title of the alert controller used to select a duration for pre-meal targets */ "Use Pre-Meal Preset" = "Использовать функцию до еды"; +/* Description text for temporarily silencing all sounds (1: app name) */ +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Используйте функцию отключения оповещений. Она позволяет временно отключить все ваши оповещения и тревоги с помощью кнопки %1$@ , включая критические оповещения и срочные оповещения."; + /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Применить цели гликемии как для физической нагрузки"; @@ -1079,6 +1151,9 @@ /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Внимание! Уведомления о безопасности отключены"; +/* No comment provided by engineer. */ +"What are examples of Critical and Time Sensitive alerts?" = "Каковы примеры критических и срочных оповещений?"; + /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Если текущий или прогнозируемый уровень глюкозы ниже безопасного предела глюкозы, Loop не будет рекомендовать болюс и всегда будет рекомендовать временную базальную скорость 0 единиц в час."; @@ -1091,6 +1166,12 @@ /* No comment provided by engineer. */ "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Когда приложение выходит из режима замкнутого цикла, оно использует упрощенный калькулятор болюса, как в обычной помпе."; +/* App sounds descriptive text (1: app name) */ +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Пока отключение звука оповещений включено, все оповещения от вашего %1$@ приложения, включая критические и срочные оповещения, будут временно отображаться без звуков и будут только вибрировать."; + +/* No comment provided by engineer. */ +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "При отключении звуковых сигналов ваша инсулиновая помпа и мониторинг могут продолжать издавать звуки."; + /* Format string for message of reset loop alert. (1: App name) (2: error description) */ "While trying to restart %1$@ an error occured.\n\n%2$@" = "При попытке перезапустить %1$@ произошла ошибка. \n\n %2$@"; diff --git a/Loop/sk.lproj/Localizable.strings b/Loop/sk.lproj/Localizable.strings index a1bbaec38d..3df681b53c 100644 --- a/Loop/sk.lproj/Localizable.strings +++ b/Loop/sk.lproj/Localizable.strings @@ -227,12 +227,12 @@ "Off" = "Vypnuté"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -266,9 +266,9 @@ "U" = "j"; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Neznáme"; /* The title of the action used when confirming entered amount of carbohydrates. */ diff --git a/Loop/sv.lproj/Localizable.strings b/Loop/sv.lproj/Localizable.strings index ceec268207..a7482a4599 100644 --- a/Loop/sv.lproj/Localizable.strings +++ b/Loop/sv.lproj/Localizable.strings @@ -65,7 +65,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* Description of the prediction input effect for glucose momentum */ @@ -128,7 +128,7 @@ "Adjusted for" = "Justerad för"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Behörigheter för Varningar"; /* The title of the section containing algorithm settings */ @@ -258,7 +258,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Välj en längre absorptionstid för måltid med mycket fett eller protein. Ofta är det bäst att dela upp måltiden i snabba och långsamma kolhydrater och mata in dessa var för sig."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Stäng"; /* The title text for the looping enabled switch cell */ @@ -359,7 +359,7 @@ "Disables" = "Stänger av"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Avfärda"; /* No comment provided by engineer. */ @@ -444,7 +444,7 @@ "Glucose Data Now Available" = "Blodglukosvärde finns nu tillgängligt"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "Det manuellt inmatade blodsockervärdet utanför gränsvärden"; /* Title of the prediction input effect for glucose momentum */ @@ -504,7 +504,7 @@ "Loading..." = "Laddar..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Logga Dos"; /* The title of the screen displaying a manually entered insulin dose */ @@ -543,8 +543,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Momentumeffekter"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Mer info"; /* Sensor state description for the non-valid state */ @@ -554,8 +554,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Ingen bolus rekommenderas"; /* The error message displayed for device connection errors. */ @@ -580,12 +580,12 @@ "Off" = "Av"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -655,7 +655,7 @@ "Recommended Basal" = "Rekommenderad basaldos"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Rekommenderad bolus"; /* Accessibility hint describing recommended bolus units */ @@ -670,9 +670,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Försök igen"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Spara och ge"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Spara utan att ge bolus"; @@ -704,7 +701,7 @@ "Starting Bolus" = "Påbörjar bolus"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Support"; /* The title text in settings */ @@ -768,9 +765,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Det går inte att stoppa pågående bolus. Flytta din iPhone närmare din pump och försök igen. Kontrollera händelsehistorik för insulin för mer detaljerad information och var vaksam på sjunkande blodsocker."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Okänd"; /* The format for the description of a temporary override end date */ diff --git a/Loop/tr.lproj/Localizable.strings b/Loop/tr.lproj/Localizable.strings index 43663a02b4..c53f531fd4 100644 --- a/Loop/tr.lproj/Localizable.strings +++ b/Loop/tr.lproj/Localizable.strings @@ -43,9 +43,6 @@ /* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ , ayarladığınız yeni Maks Bazal limitinden daha yüksek olan mevcut geçici bazal oranınızı iptal edemedi. Bu, istenenden daha yüksek insülin iletimi ile sonuçlanabilir. \n\n İnsülin iletimini manuel olarak askıya almayı ve ardından yeni limit geçerliyken bazal iletimi etkinleştirmek için hemen devam etmeyi düşünün."; -/* Adds a full-stop to a statement (1: statement, 2: full stop character) */ -"%1@%2@" = "%1$@%2$@"; - /* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; @@ -92,7 +89,7 @@ "%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) - Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ +Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ "%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* Description of the prediction input effect for glucose momentum */ @@ -164,11 +161,11 @@ "Adjusted for" = "için düzeltilmiş"; /* Alert Permissions button text - Title of alert management screen */ +Title of alert management screen */ "Alert Management" = "Uyarı Yönetimi"; /* Alert Permissions button text - Notification & Critical Alert Permissions screen title */ +Notification & Critical Alert Permissions screen title */ "Alert Permissions" = "Uyarı İzinleri"; /* The title of the section containing algorithm settings */ @@ -325,7 +322,7 @@ "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Daha büyük öğünler veya yağ ve protein içeren besinler için daha uzun bir emilim süresi seçin. Bu değer yalnızca algoritmaya rehberlik eder ve kesin olması gerekmez."; /* Button title to close view - The button label of the action used to dismiss the unsafe notification permission alert */ +The button label of the action used to dismiss the unsafe notification permission alert */ "Close" = "Kapat"; /* The title text for the looping enabled switch cell */ @@ -438,7 +435,7 @@ "Disables" = "Devre Dışı"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Reddet"; /* No comment provided by engineer. */ @@ -544,7 +541,7 @@ "Glucose Data Now Available" = "KŞ Verileri Artık Kullanılabilir"; /* Alert title for a manual glucose entry out of range error - Title for bolus screen warning when glucose entry is out of range */ +Title for bolus screen warning when glucose entry is out of range */ "Glucose Entry Out of Range" = "KŞ Girişi Aralık Dışında"; /* Title of the prediction input effect for glucose momentum */ @@ -637,7 +634,7 @@ "Loading..." = "Yükleniyor..."; /* Button text to log a dose - Title for dose logging screen */ +Title for dose logging screen */ "Log Dose" = "Günlük Doz"; /* The title of the screen displaying a manually entered insulin dose */ @@ -668,7 +665,7 @@ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop, insülin iletimini artırmak ve azaltmak için geçici bazal oranlar ayarlayacaktır."; /* Title for bolus screen warning when glucose is below glucose warning limit. - Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ "Low Glucose" = "Düşük KŞ"; /* Manage Permissions in Settings button text */ @@ -707,8 +704,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Momentum etkileri"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Daha fazla bilgi"; /* Label for button to mute all alerts */ @@ -724,8 +721,8 @@ "Nightscout" = "Nightscout"; /* Title for bolus screen notice when no bolus is recommended - Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended - Title for bolus screen warning when no bolus is recommended */ +Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended +Title for bolus screen warning when no bolus is recommended */ "No Bolus Recommended" = "Bolus Önerilmez"; /* The error message displayed for device connection errors. */ @@ -774,12 +771,12 @@ "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh hayır! Dozlama sırasında Loop çöktü ve bu iletişim kutusu kapatılana kadar insülin ayarlamaları duraklatıldı. Dozlama geçmişi doğru olmayabilir. Lütfen İnsülin İletim tablolarını gözden geçirin ve kan şekerinizi dikkatle izleyin."; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "Tamam"; /* Notification Setting Status is On */ @@ -867,7 +864,7 @@ "Recommended Basal" = "Önerilen Bazal"; /* Label for recommended bolus row on bolus screen - Label for recommended bolus row on simple bolus screen */ +Label for recommended bolus row on simple bolus screen */ "Recommended Bolus" = "Önerilen Bolus"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ @@ -877,7 +874,7 @@ "Recommended Bolus: %@ Units" = "Önerilen Bolus: %@ Ünite"; /* The notification title for a remote bolus. (1: Bolus amount) - The notification title for a remote failure. (1: Bolus amount) */ +The notification title for a remote failure. (1: Bolus amount) */ "Remote Bolus Entry: %@ U" = "Uzak Bolus Girişi: %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ @@ -892,9 +889,6 @@ /* The title of the notification action to retry a bolus command */ "Retry" = "Yeniden dene"; -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save and Deliver" = "Kaydet ve İlet"; - /* Button text to save carbs and/or manual glucose entry without a bolus */ "Save without Bolusing" = "Bolus olmadan Kaydet"; @@ -938,7 +932,7 @@ "Starting Bolus" = "Bolus başlatılıyor"; /* Section title for Support - The title of the support section in settings */ +The title of the support section in settings */ "Support" = "Destek"; /* The title text in settings */ @@ -1020,9 +1014,9 @@ "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Devam etmekte olan bolus durdurulamıyor. iPhone'unuzu pompaya yaklaştırın ve tekrar deneyin. Ayrıntılar için insülin uygulama geçmişinizi kontrol edin ve kan şekerinizi yakından takip edin."; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Bilinmeyen"; /* The error message displayed for unknown errors. (1: unknown error) */ diff --git a/Loop/vi.lproj/Localizable.strings b/Loop/vi.lproj/Localizable.strings index 1ee202e94e..b9070efbe5 100644 --- a/Loop/vi.lproj/Localizable.strings +++ b/Loop/vi.lproj/Localizable.strings @@ -230,7 +230,7 @@ "Disables" = "Vô hiệu hóa"; /* Default alert dismissal - The button label of the action used to dismiss an error alert */ +The button label of the action used to dismiss an error alert */ "Dismiss" = "Từ bỏ"; /* The action hint of the workout mode toggle button when disabled */ @@ -331,8 +331,8 @@ /* Details for missing data error when momentum effects are missing */ "Momentum effects" = "Hiệu ứng động lượng"; -/* Text for more info action on notification of upcoming profile expiration - Text for more info action on notification of upcoming TestFlight expiration */ +/* Text for more info action on notification of upcoming TestFlight expiration +Text for more info action on notification of upcoming profile expiration */ "More Info" = "Thêm thông tin"; /* Sensor state description for the non-valid state */ @@ -345,12 +345,12 @@ "No connected devices, or failure during device connection" = "Không có thiết bị nào được kết nối, hoặc lỗi trong quá trình kết nối"; /* Alert acknowledgment OK button - Critical Alert permissions disabled alert button - Default action for alert when alert acknowledgment fails - Notifications permissions disabled alert button - Text for ok action on notification of upcoming profile expiration - Text for ok action on notification of upcoming TestFlight expiration - The title of the notification action to acknowledge a device alert */ +Critical Alert permissions disabled alert button +Default action for alert when alert acknowledgment fails +Notifications permissions disabled alert button +Text for ok action on notification of upcoming TestFlight expiration +Text for ok action on notification of upcoming profile expiration +The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ @@ -459,9 +459,9 @@ "U" = "U"; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "Không nhận ra"; /* The format for the description of a temporary override end date */ diff --git a/Loop/zh-Hans.lproj/Localizable.strings b/Loop/zh-Hans.lproj/Localizable.strings index c132f5ea4b..ca2f12eeec 100644 --- a/Loop/zh-Hans.lproj/Localizable.strings +++ b/Loop/zh-Hans.lproj/Localizable.strings @@ -379,9 +379,9 @@ "U" = "U"; /* Event title displayed when StoredPumpEvent.title is not set - label for when the alert mute end time is unknown - result when time cannot be formatted - The default description to use when an entry has no dose description */ +The default description to use when an entry has no dose description +label for when the alert mute end time is unknown +result when time cannot be formatted */ "Unknown" = "未知"; /* The format for the description of a temporary override end date */ diff --git a/LoopUI/ar.lproj/InfoPlist.strings b/LoopUI/ar.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/ar.lproj/InfoPlist.strings +++ b/LoopUI/ar.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/da.lproj/InfoPlist.strings b/LoopUI/da.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/da.lproj/InfoPlist.strings +++ b/LoopUI/da.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/de.lproj/InfoPlist.strings b/LoopUI/de.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/de.lproj/InfoPlist.strings +++ b/LoopUI/de.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/es.lproj/InfoPlist.strings b/LoopUI/es.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/es.lproj/InfoPlist.strings +++ b/LoopUI/es.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fi.lproj/InfoPlist.strings b/LoopUI/fi.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/fi.lproj/InfoPlist.strings +++ b/LoopUI/fi.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fr.lproj/InfoPlist.strings b/LoopUI/fr.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/fr.lproj/InfoPlist.strings +++ b/LoopUI/fr.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fr.lproj/Localizable.strings b/LoopUI/fr.lproj/Localizable.strings index c112b82f3b..dd5d08fca6 100644 --- a/LoopUI/fr.lproj/Localizable.strings +++ b/LoopUI/fr.lproj/Localizable.strings @@ -41,7 +41,7 @@ "<1 min ago" = "moins qu'une minute"; /* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Loop fermée"; +"Closed loop" = "Boucle fermée"; /* Title of green open loop OFF message */ "Closed Loop OFF" = "Boucle Ouverte"; diff --git a/LoopUI/he.lproj/InfoPlist.strings b/LoopUI/he.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/he.lproj/InfoPlist.strings +++ b/LoopUI/he.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/it.lproj/InfoPlist.strings b/LoopUI/it.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/it.lproj/InfoPlist.strings +++ b/LoopUI/it.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ja.lproj/InfoPlist.strings b/LoopUI/ja.lproj/InfoPlist.strings index f8e9a2b43f..bbcf8f9040 100644 --- a/LoopUI/ja.lproj/InfoPlist.strings +++ b/LoopUI/ja.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/nb.lproj/InfoPlist.strings b/LoopUI/nb.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/nb.lproj/InfoPlist.strings +++ b/LoopUI/nb.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/nb.lproj/Localizable.strings b/LoopUI/nb.lproj/Localizable.strings index eb5ce50cb9..e40fb78eb1 100644 --- a/LoopUI/nb.lproj/Localizable.strings +++ b/LoopUI/nb.lproj/Localizable.strings @@ -8,7 +8,7 @@ "\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "%1$@\n\nTrykk på statusikonene for CGM og insulinpumpe for mer informasjon. %2$@ vil fortsette å prøve å fullføre en loop, men se etter potensielle kommunikasjonsproblemer med pumpen og CGM."; /* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "%1$@ opererer med Closed Loop i OFF posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk.\n\n%2$@"; +"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "%1$@ opererer med Lukket Loop i AV-posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk.\n\n%2$@"; /* No glucose value representation (3 dashes for mg/dL) */ "– – –" = "– – –"; @@ -29,7 +29,7 @@ "%1$@ at %2$@" = "%1$@ kl. %2$@"; /* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ enheter per time kl. %2$@"; +"%1$@ units per hour at %2$@" = "%1$@ enheter pr. time kl. %2$@"; /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ "%1$@ v%2$@" = "%1$@ v %2$@"; diff --git a/LoopUI/nl.lproj/InfoPlist.strings b/LoopUI/nl.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/nl.lproj/InfoPlist.strings +++ b/LoopUI/nl.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/pl.lproj/InfoPlist.strings b/LoopUI/pl.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/pl.lproj/InfoPlist.strings +++ b/LoopUI/pl.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/pt-BR.lproj/InfoPlist.strings b/LoopUI/pt-BR.lproj/InfoPlist.strings index f8e9a2b43f..bbcf8f9040 100644 --- a/LoopUI/pt-BR.lproj/InfoPlist.strings +++ b/LoopUI/pt-BR.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ro.lproj/InfoPlist.strings b/LoopUI/ro.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/ro.lproj/InfoPlist.strings +++ b/LoopUI/ro.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ru.lproj/InfoPlist.strings b/LoopUI/ru.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/ru.lproj/InfoPlist.strings +++ b/LoopUI/ru.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/sv.lproj/InfoPlist.strings b/LoopUI/sv.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/sv.lproj/InfoPlist.strings +++ b/LoopUI/sv.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/tr.lproj/InfoPlist.strings b/LoopUI/tr.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/tr.lproj/InfoPlist.strings +++ b/LoopUI/tr.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/vi.lproj/InfoPlist.strings b/LoopUI/vi.lproj/InfoPlist.strings index f8e9a2b43f..bbcf8f9040 100644 --- a/LoopUI/vi.lproj/InfoPlist.strings +++ b/LoopUI/vi.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/WatchApp Extension/ar.lproj/Localizable.strings b/WatchApp Extension/ar.lproj/Localizable.strings index a592945b1d..35141444a8 100644 --- a/WatchApp Extension/ar.lproj/Localizable.strings +++ b/WatchApp Extension/ar.lproj/Localizable.strings @@ -26,7 +26,7 @@ "Dismiss" = "تجاهل"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails diff --git a/WatchApp Extension/da.lproj/Localizable.strings b/WatchApp Extension/da.lproj/Localizable.strings index 3098b33856..037bdcc6cc 100644 --- a/WatchApp Extension/da.lproj/Localizable.strings +++ b/WatchApp Extension/da.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Afvis"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Sørg for, at din iPhone er i nærheden og prøv igen"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Sørg for, at din iPhone er tæt på og prøv igen."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/de.lproj/Localizable.strings b/WatchApp Extension/de.lproj/Localizable.strings index 7815ef0798..80e05d012c 100644 --- a/WatchApp Extension/de.lproj/Localizable.strings +++ b/WatchApp Extension/de.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Schließen"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Stelle sicher, dass Dein iPhone in der Nähe ist, und versuche es erneut."; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Stelle sicher, dass Dein iPhone in der Nähe ist, und versuche es erneut."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/es.lproj/Localizable.strings b/WatchApp Extension/es.lproj/Localizable.strings index 6dcbce1045..124b9af0b0 100644 --- a/WatchApp Extension/es.lproj/Localizable.strings +++ b/WatchApp Extension/es.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Ignorar"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Asegúrate que tu iPhone se encuentre cerca e inténtalo de nuevo"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Asegúrate que tu iPhone se encuentre cerca e inténtalo de nuevo."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/fi.lproj/Localizable.strings b/WatchApp Extension/fi.lproj/Localizable.strings index 7f4af4de98..d97c7e52d7 100644 --- a/WatchApp Extension/fi.lproj/Localizable.strings +++ b/WatchApp Extension/fi.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Ohita"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Varmista, että iPhone on riittävän lähellä ja yritä uudelleen"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Varmista, että iPhone on riittävän lähellä ja yritä uudelleen."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/fr.lproj/Localizable.strings b/WatchApp Extension/fr.lproj/Localizable.strings index d433047a67..00d645b8bd 100644 --- a/WatchApp Extension/fr.lproj/Localizable.strings +++ b/WatchApp Extension/fr.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Fermer"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Assurez-vous que votre iPhone est à proximité et réessayez"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Assurez-vous que votre iPhone est à proximité et réessayez."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/he.lproj/Localizable.strings b/WatchApp Extension/he.lproj/Localizable.strings index 936389eac0..dd41617793 100644 --- a/WatchApp Extension/he.lproj/Localizable.strings +++ b/WatchApp Extension/he.lproj/Localizable.strings @@ -29,7 +29,7 @@ "Dismiss" = "Dismiss"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails diff --git a/WatchApp Extension/it.lproj/Localizable.strings b/WatchApp Extension/it.lproj/Localizable.strings index 2ec6d8bdc3..00223f900e 100644 --- a/WatchApp Extension/it.lproj/Localizable.strings +++ b/WatchApp Extension/it.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "OK"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Assicurati che il tuo iPhone sia vicino e riprova"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Assicurati che il tuo iPhone sia vicino e riprova."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/ja.lproj/Localizable.strings b/WatchApp Extension/ja.lproj/Localizable.strings index 4128891d83..f462cab002 100644 --- a/WatchApp Extension/ja.lproj/Localizable.strings +++ b/WatchApp Extension/ja.lproj/Localizable.strings @@ -29,7 +29,7 @@ "Dismiss" = "閉じる"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails diff --git a/WatchApp Extension/nb.lproj/Localizable.strings b/WatchApp Extension/nb.lproj/Localizable.strings index 9d6b5baaf0..fb857579a4 100644 --- a/WatchApp Extension/nb.lproj/Localizable.strings +++ b/WatchApp Extension/nb.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Avvis"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Pass på at iPhone er i nærheten, og prøv igjen"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Sjekk at din iPhone er i nærheten og prøv igjen."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/nl.lproj/Localizable.strings b/WatchApp Extension/nl.lproj/Localizable.strings index e3401838f3..192c2c3f99 100644 --- a/WatchApp Extension/nl.lproj/Localizable.strings +++ b/WatchApp Extension/nl.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Sluiten"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Zorg dat je iPhone in de buurt is en probeer opnieuw"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Zorg dat je iPhone in de buurt is en probeer het opnieuw."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/pl.lproj/Localizable.strings b/WatchApp Extension/pl.lproj/Localizable.strings index a11ca5bd91..a7f5d3d080 100644 --- a/WatchApp Extension/pl.lproj/Localizable.strings +++ b/WatchApp Extension/pl.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Rozumiem"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Upewnij się, że Twój iPhone jest w pobliżu i spróbuj ponownie"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Upewnij się, że Twój iPhone jest w pobliżu i spróbuj ponownie."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/pt-BR.lproj/Localizable.strings b/WatchApp Extension/pt-BR.lproj/Localizable.strings index 6075041cd4..5a3b603c77 100644 --- a/WatchApp Extension/pt-BR.lproj/Localizable.strings +++ b/WatchApp Extension/pt-BR.lproj/Localizable.strings @@ -29,7 +29,7 @@ "Dismiss" = "Dispensar"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails diff --git a/WatchApp Extension/ro.lproj/Localizable.strings b/WatchApp Extension/ro.lproj/Localizable.strings index 7283a04a92..4110a055a8 100644 --- a/WatchApp Extension/ro.lproj/Localizable.strings +++ b/WatchApp Extension/ro.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Renunță"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Asigurați-vă că iPhone-ul este în apropiere, după care încercați din nou"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Asigurați-vă că iPhone-ul este în apropiere, după care încercați din nou."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/ru.lproj/Localizable.strings b/WatchApp Extension/ru.lproj/Localizable.strings index 578dd16208..1b54bb09b7 100644 --- a/WatchApp Extension/ru.lproj/Localizable.strings +++ b/WatchApp Extension/ru.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Отклонить"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "г"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Убедитесь, что ваш iPhone поблизости и повторите попытку"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Убедитесь, что ваш iPhone находится поблизости, и повторите попытку."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/sk.lproj/Localizable.strings b/WatchApp Extension/sk.lproj/Localizable.strings index 3c82924847..f74275e347 100644 --- a/WatchApp Extension/sk.lproj/Localizable.strings +++ b/WatchApp Extension/sk.lproj/Localizable.strings @@ -23,7 +23,7 @@ "dB" = "dB"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/sv.lproj/Localizable.strings b/WatchApp Extension/sv.lproj/Localizable.strings index 4899f2cc69..76d880ed56 100644 --- a/WatchApp Extension/sv.lproj/Localizable.strings +++ b/WatchApp Extension/sv.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Avfärda"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "Säkerställ att telefonen är inom räckhåll och försök igen"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "Säkerställ att din telefon är inom räckhåll och försök igen."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/tr.lproj/Localizable.strings b/WatchApp Extension/tr.lproj/Localizable.strings index 7566f1dfd2..2637ba19f2 100644 --- a/WatchApp Extension/tr.lproj/Localizable.strings +++ b/WatchApp Extension/tr.lproj/Localizable.strings @@ -38,7 +38,7 @@ "Dismiss" = "Reddet"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "gr"; /* The recovery message displayed after a bolus attempt fails @@ -47,7 +47,7 @@ "Make sure your iPhone is nearby and try again" = "iPhone'nunuzun yakında olduğundan emin olun ve tekrar deneyin"; /* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a potential carb entry send attempt fails */ +The recovery message displayed after a potential carb entry send attempt fails */ "Make sure your iPhone is nearby and try again." = "iPhone'unuzun yakında olduğundan emin olun ve tekrar deneyin."; /* The short unit display string for milligrams of glucose per decilter */ diff --git a/WatchApp Extension/vi.lproj/Localizable.strings b/WatchApp Extension/vi.lproj/Localizable.strings index 81a9491471..0e1f6e5cc8 100644 --- a/WatchApp Extension/vi.lproj/Localizable.strings +++ b/WatchApp Extension/vi.lproj/Localizable.strings @@ -29,7 +29,7 @@ "Dismiss" = "Từ bỏ"; /* Short unit label for gram measurement - The short unit display string for grams */ +The short unit display string for grams */ "g" = "g"; /* The recovery message displayed after a bolus attempt fails diff --git a/WatchApp/nb.lproj/Interface.strings b/WatchApp/nb.lproj/Interface.strings index 92d8e5a056..c1dd5548a2 100644 --- a/WatchApp/nb.lproj/Interface.strings +++ b/WatchApp/nb.lproj/Interface.strings @@ -20,7 +20,7 @@ "jj3-Gq-HBy.text" = "Bolus feilet"; /* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Løper"; +"JXa-s1-PJx.text" = "Kjører"; /* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ "Mhe-aR-kQQ.text" = "–"; From d6bd8e768a43373eca7936844320626f04e47648 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 28 Aug 2025 16:56:40 -0700 Subject: [PATCH 02/41] revert Intents and InfoPlist modifications --- Common/hi.lproj/Intents.strings | 30 +++++++++------------------- Common/it.lproj/Intents.strings | 4 ++-- Loop/da.lproj/InfoPlist.strings | 3 --- Loop/it.lproj/InfoPlist.strings | 2 +- LoopUI/ar.lproj/InfoPlist.strings | 4 ++-- LoopUI/da.lproj/InfoPlist.strings | 4 ++-- LoopUI/de.lproj/InfoPlist.strings | 4 ++-- LoopUI/es.lproj/InfoPlist.strings | 4 ++-- LoopUI/fi.lproj/InfoPlist.strings | 4 ++-- LoopUI/fr.lproj/InfoPlist.strings | 4 ++-- LoopUI/he.lproj/InfoPlist.strings | 4 ++-- LoopUI/it.lproj/InfoPlist.strings | 4 ++-- LoopUI/ja.lproj/InfoPlist.strings | 2 +- LoopUI/nb.lproj/InfoPlist.strings | 4 ++-- LoopUI/nl.lproj/InfoPlist.strings | 4 ++-- LoopUI/pl.lproj/InfoPlist.strings | 4 ++-- LoopUI/pt-BR.lproj/InfoPlist.strings | 2 +- LoopUI/ro.lproj/InfoPlist.strings | 4 ++-- LoopUI/ru.lproj/InfoPlist.strings | 4 ++-- LoopUI/sv.lproj/InfoPlist.strings | 4 ++-- LoopUI/tr.lproj/InfoPlist.strings | 4 ++-- LoopUI/vi.lproj/InfoPlist.strings | 2 +- 22 files changed, 45 insertions(+), 60 deletions(-) diff --git a/Common/hi.lproj/Intents.strings b/Common/hi.lproj/Intents.strings index 69202aa99c..853af215c0 100644 --- a/Common/hi.lproj/Intents.strings +++ b/Common/hi.lproj/Intents.strings @@ -1,36 +1,24 @@ -/* (No Comment) */ -"9KhaIS" = "I've set the preset"; - -/* (No Comment) */ "80eo5o" = "Add Carb Entry"; -/* (No Comment) */ -"b085BW" = "I wasn't able to set the preset."; +"9KhaIS" = "I've set the preset"; -/* (No Comment) */ "I4OZy8" = "Enable Override Preset"; -/* (No Comment) */ +"OcNxIj" = "Add Carb Entry"; + +"XNNmtH" = "Enable preset in Loop"; + +"ZZ3mtM" = "Enable an override preset in Loop"; + +"b085BW" = "I wasn't able to set the preset."; + "lYMuWV" = "Override Name"; -/* (No Comment) */ "nDKAmn" = "What's the name of the override you'd like to set?"; -/* (No Comment) */ -"OcNxIj" = "Add Carb Entry"; - -/* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; -/* (No Comment) */ -"XNNmtH" = "Enable preset in Loop"; - -/* (No Comment) */ "yBzwCL" = "Override Selection"; -/* (No Comment) */ "yc02Yq" = "Add a carb entry to Loop"; -/* (No Comment) */ -"ZZ3mtM" = "Enable an override preset in Loop"; - diff --git a/Common/it.lproj/Intents.strings b/Common/it.lproj/Intents.strings index f89cd7b4e9..847d80d4eb 100644 --- a/Common/it.lproj/Intents.strings +++ b/Common/it.lproj/Intents.strings @@ -1,11 +1,11 @@ /* (No Comment) */ -"9KhaIS" = "Ho impostato il preset"; +"9KhaIS" = "Ho impostato la preimpostazione"; /* (No Comment) */ "80eo5o" = "Agg. Carb. Assunti"; /* (No Comment) */ -"b085BW" = "Non sono riuscito a impostare il preset."; +"b085BW" = "I wasn't able to set the preset."; /* (No Comment) */ "I4OZy8" = "Abilita Programma Alternativo"; diff --git a/Loop/da.lproj/InfoPlist.strings b/Loop/da.lproj/InfoPlist.strings index ec4d258296..3c10346dc8 100644 --- a/Loop/da.lproj/InfoPlist.strings +++ b/Loop/da.lproj/InfoPlist.strings @@ -4,9 +4,6 @@ /* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; -/* Privacy - NFC Scan Usage Description */ -"NFCReaderUsageDescription" = "Appen bruger NFC til at parre sig med diabetesapparater."; - /* Privacy - Bluetooth Always Usage Description */ "NSBluetoothAlwaysUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor."; diff --git a/Loop/it.lproj/InfoPlist.strings b/Loop/it.lproj/InfoPlist.strings index b1e96170c4..f86acc5698 100644 --- a/Loop/it.lproj/InfoPlist.strings +++ b/Loop/it.lproj/InfoPlist.strings @@ -26,5 +26,5 @@ "NSHealthUpdateUsageDescription" = "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit."; /* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione dei preset con la tua voce"; +"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione delle preimpostazioni con la tua voce"; diff --git a/LoopUI/ar.lproj/InfoPlist.strings b/LoopUI/ar.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/ar.lproj/InfoPlist.strings +++ b/LoopUI/ar.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/da.lproj/InfoPlist.strings b/LoopUI/da.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/da.lproj/InfoPlist.strings +++ b/LoopUI/da.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/de.lproj/InfoPlist.strings b/LoopUI/de.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/de.lproj/InfoPlist.strings +++ b/LoopUI/de.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/es.lproj/InfoPlist.strings b/LoopUI/es.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/es.lproj/InfoPlist.strings +++ b/LoopUI/es.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fi.lproj/InfoPlist.strings b/LoopUI/fi.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/fi.lproj/InfoPlist.strings +++ b/LoopUI/fi.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fr.lproj/InfoPlist.strings b/LoopUI/fr.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/fr.lproj/InfoPlist.strings +++ b/LoopUI/fr.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/he.lproj/InfoPlist.strings b/LoopUI/he.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/he.lproj/InfoPlist.strings +++ b/LoopUI/he.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/it.lproj/InfoPlist.strings b/LoopUI/it.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/it.lproj/InfoPlist.strings +++ b/LoopUI/it.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ja.lproj/InfoPlist.strings b/LoopUI/ja.lproj/InfoPlist.strings index bbcf8f9040..f8e9a2b43f 100644 --- a/LoopUI/ja.lproj/InfoPlist.strings +++ b/LoopUI/ja.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/nb.lproj/InfoPlist.strings b/LoopUI/nb.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/nb.lproj/InfoPlist.strings +++ b/LoopUI/nb.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/nl.lproj/InfoPlist.strings b/LoopUI/nl.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/nl.lproj/InfoPlist.strings +++ b/LoopUI/nl.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/pl.lproj/InfoPlist.strings b/LoopUI/pl.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/pl.lproj/InfoPlist.strings +++ b/LoopUI/pl.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/pt-BR.lproj/InfoPlist.strings b/LoopUI/pt-BR.lproj/InfoPlist.strings index bbcf8f9040..f8e9a2b43f 100644 --- a/LoopUI/pt-BR.lproj/InfoPlist.strings +++ b/LoopUI/pt-BR.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ro.lproj/InfoPlist.strings b/LoopUI/ro.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/ro.lproj/InfoPlist.strings +++ b/LoopUI/ro.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ru.lproj/InfoPlist.strings b/LoopUI/ru.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/ru.lproj/InfoPlist.strings +++ b/LoopUI/ru.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/sv.lproj/InfoPlist.strings b/LoopUI/sv.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/sv.lproj/InfoPlist.strings +++ b/LoopUI/sv.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/tr.lproj/InfoPlist.strings b/LoopUI/tr.lproj/InfoPlist.strings index 13ab538314..5c1fb13406 100644 --- a/LoopUI/tr.lproj/InfoPlist.strings +++ b/LoopUI/tr.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* Bundle display name */ +/* (No Comment) */ "CFBundleDisplayName" = "LoopUI"; -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/vi.lproj/InfoPlist.strings b/LoopUI/vi.lproj/InfoPlist.strings index bbcf8f9040..f8e9a2b43f 100644 --- a/LoopUI/vi.lproj/InfoPlist.strings +++ b/LoopUI/vi.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* Bundle name */ +/* (No Comment) */ "CFBundleName" = "$(PRODUCT_NAME)"; From c647d63f57e4f57792b843dd66baa08d16a7c302 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 30 Aug 2025 12:36:47 -0700 Subject: [PATCH 03/41] Updated translations from Lokalise on Sat Aug 30 10:22:12 PDT 2025 --- Common/fr.lproj/Intents.strings | 2 +- Common/hi.lproj/Intents.strings | 30 +- Common/it.lproj/Intents.strings | 24 +- .../it.lproj/Localizable.strings | 2 +- .../it.lproj/Localizable.strings | 4 +- .../it.lproj/MainInterface.strings | 2 +- .../Bootstrap/it.lproj/Localizable.strings | 4 +- Loop/da.lproj/InfoPlist.strings | 3 + Loop/fr.lproj/Localizable.strings | 12 +- Loop/it.lproj/InfoPlist.strings | 10 +- Loop/it.lproj/Localizable.strings | 482 +++++++++--------- Loop/it.lproj/Main.strings | 22 +- LoopCore/it.lproj/Localizable.strings | 4 +- LoopUI/ar.lproj/InfoPlist.strings | 4 +- LoopUI/da.lproj/InfoPlist.strings | 4 +- LoopUI/de.lproj/InfoPlist.strings | 4 +- LoopUI/es.lproj/InfoPlist.strings | 4 +- LoopUI/fi.lproj/InfoPlist.strings | 4 +- LoopUI/fr.lproj/InfoPlist.strings | 4 +- LoopUI/he.lproj/InfoPlist.strings | 4 +- LoopUI/it.lproj/InfoPlist.strings | 4 +- LoopUI/it.lproj/Localizable.strings | 30 +- LoopUI/ja.lproj/InfoPlist.strings | 2 +- LoopUI/nb.lproj/InfoPlist.strings | 4 +- LoopUI/nl.lproj/InfoPlist.strings | 4 +- LoopUI/pl.lproj/InfoPlist.strings | 4 +- LoopUI/pt-BR.lproj/InfoPlist.strings | 2 +- LoopUI/ro.lproj/InfoPlist.strings | 4 +- LoopUI/ru.lproj/InfoPlist.strings | 4 +- LoopUI/sv.lproj/InfoPlist.strings | 4 +- LoopUI/tr.lproj/InfoPlist.strings | 4 +- LoopUI/vi.lproj/InfoPlist.strings | 2 +- .../it.lproj/Localizable.strings | 30 +- .../it.lproj/ckcomplication.strings | 2 +- WatchApp/it.lproj/Interface.strings | 12 +- 35 files changed, 378 insertions(+), 363 deletions(-) diff --git a/Common/fr.lproj/Intents.strings b/Common/fr.lproj/Intents.strings index 56bed88c3f..229cc8c994 100644 --- a/Common/fr.lproj/Intents.strings +++ b/Common/fr.lproj/Intents.strings @@ -14,7 +14,7 @@ "lYMuWV" = "Nom Ajustement"; /* (No Comment) */ -"nDKAmn" = "Quel est le nom de l'ajustement que vous voulez définir ?"; +"nDKAmn" = "Quel est le nom de l'ajustement que vous voulez définir?"; /* (No Comment) */ "OcNxIj" = "Ajouter des glucides"; diff --git a/Common/hi.lproj/Intents.strings b/Common/hi.lproj/Intents.strings index 853af215c0..69202aa99c 100644 --- a/Common/hi.lproj/Intents.strings +++ b/Common/hi.lproj/Intents.strings @@ -1,24 +1,36 @@ -"80eo5o" = "Add Carb Entry"; - +/* (No Comment) */ "9KhaIS" = "I've set the preset"; -"I4OZy8" = "Enable Override Preset"; - -"OcNxIj" = "Add Carb Entry"; - -"XNNmtH" = "Enable preset in Loop"; - -"ZZ3mtM" = "Enable an override preset in Loop"; +/* (No Comment) */ +"80eo5o" = "Add Carb Entry"; +/* (No Comment) */ "b085BW" = "I wasn't able to set the preset."; +/* (No Comment) */ +"I4OZy8" = "Enable Override Preset"; + +/* (No Comment) */ "lYMuWV" = "Override Name"; +/* (No Comment) */ "nDKAmn" = "What's the name of the override you'd like to set?"; +/* (No Comment) */ +"OcNxIj" = "Add Carb Entry"; + +/* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; +/* (No Comment) */ +"XNNmtH" = "Enable preset in Loop"; + +/* (No Comment) */ "yBzwCL" = "Override Selection"; +/* (No Comment) */ "yc02Yq" = "Add a carb entry to Loop"; +/* (No Comment) */ +"ZZ3mtM" = "Enable an override preset in Loop"; + diff --git a/Common/it.lproj/Intents.strings b/Common/it.lproj/Intents.strings index 847d80d4eb..a39b42da6f 100644 --- a/Common/it.lproj/Intents.strings +++ b/Common/it.lproj/Intents.strings @@ -1,36 +1,36 @@ /* (No Comment) */ -"9KhaIS" = "Ho impostato la preimpostazione"; +"9KhaIS" = "Ho impostato il Preset"; /* (No Comment) */ -"80eo5o" = "Agg. Carb. Assunti"; +"80eo5o" = "Aggiungi inserimento carboidrati"; /* (No Comment) */ -"b085BW" = "I wasn't able to set the preset."; +"b085BW" = "Non sono riuscito a impostare il Preset."; /* (No Comment) */ -"I4OZy8" = "Abilita Programma Alternativo"; +"I4OZy8" = "Attiva Preset Override"; /* (No Comment) */ -"lYMuWV" = "Nome Programma Alternativo"; +"lYMuWV" = "Nome Override"; /* (No Comment) */ -"nDKAmn" = "Qual'è il nome del programma alternativo che vuoi impostare?"; +"nDKAmn" = "Qual'è il nome dell'Override che vuoi impostare?"; /* (No Comment) */ -"OcNxIj" = "Agg. Carb. Assunti"; +"OcNxIj" = "Aggiungi inserimento carboidrati"; /* (No Comment) */ -"oLQSsJ" = "Abilita '${overrideName}' Programma Alternativo"; +"oLQSsJ" = "Attiva '${OverrideName}' Preset Override"; /* (No Comment) */ -"XNNmtH" = "Enable preset in Loop"; +"XNNmtH" = "Attiva Preset in Loop"; /* (No Comment) */ -"yBzwCL" = "Selezione Programma Alternativo"; +"yBzwCL" = "Selezione Override"; /* (No Comment) */ -"yc02Yq" = "Aggiungi carboidrati a Loop"; +"yc02Yq" = "Aggiungi inserimento carboidrati a Loop"; /* (No Comment) */ -"ZZ3mtM" = "Attiva Programma Alternativo in Loop"; +"ZZ3mtM" = "Attiva un Preset Override in Loop"; diff --git a/Loop Intent Extension/it.lproj/Localizable.strings b/Loop Intent Extension/it.lproj/Localizable.strings index dcd56fd902..f4d2b4576f 100644 --- a/Loop Intent Extension/it.lproj/Localizable.strings +++ b/Loop Intent Extension/it.lproj/Localizable.strings @@ -1,3 +1,3 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; +"%1$@ v%2$@" = "%1$@ v%2$@"; diff --git a/Loop Status Extension/it.lproj/Localizable.strings b/Loop Status Extension/it.lproj/Localizable.strings index a0659c388e..70580ce441 100644 --- a/Loop Status Extension/it.lproj/Localizable.strings +++ b/Loop Status Extension/it.lproj/Localizable.strings @@ -11,10 +11,10 @@ "%1$@ U" = "%1$@ U"; /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; +"%1$@ v%2$@" = "%1$@ v%2$@"; /* Widget label title describing the active carbs */ -"Active Carbs" = "Carboidrati Attivi"; +"Active Carbs" = "Carboidrati attivi"; /* Widget label title describing the active insulin */ "Active Insulin" = "Insulina attiva"; diff --git a/Loop Status Extension/it.lproj/MainInterface.strings b/Loop Status Extension/it.lproj/MainInterface.strings index ab9c005998..665d9a287d 100644 --- a/Loop Status Extension/it.lproj/MainInterface.strings +++ b/Loop Status Extension/it.lproj/MainInterface.strings @@ -1,5 +1,5 @@ /* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carb Attivi"; +"9iF-xY-Bh4.text" = "Carboidrati attivi"; /* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ "dPp-lJ-5sh.text" = "0 g"; diff --git a/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings index e048bd3a2f..f67f3f6c70 100644 --- a/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings +++ b/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings @@ -14,7 +14,7 @@ "%@ U" = "%@ U"; /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; +"%1$@ v%2$@" = "%1$@ v%2$@"; /* The short unit display string for decibles */ "dB" = "dB"; @@ -26,7 +26,7 @@ "g" = "g"; /* No comment provided by engineer. */ -"Loop Status Widget" = "Widget Stato loop"; +"Loop Status Widget" = "Widget di stato del ciclo"; /* The short unit display string for milligrams of glucose per decilter */ "mg/dL" = "mg/dL"; diff --git a/Loop/da.lproj/InfoPlist.strings b/Loop/da.lproj/InfoPlist.strings index 3c10346dc8..ec4d258296 100644 --- a/Loop/da.lproj/InfoPlist.strings +++ b/Loop/da.lproj/InfoPlist.strings @@ -4,6 +4,9 @@ /* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; +/* Privacy - NFC Scan Usage Description */ +"NFCReaderUsageDescription" = "Appen bruger NFC til at parre sig med diabetesapparater."; + /* Privacy - Bluetooth Always Usage Description */ "NSBluetoothAlwaysUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor."; diff --git a/Loop/fr.lproj/Localizable.strings b/Loop/fr.lproj/Localizable.strings index e1a5843e2a..2ceefdadd7 100644 --- a/Loop/fr.lproj/Localizable.strings +++ b/Loop/fr.lproj/Localizable.strings @@ -215,7 +215,7 @@ The title of the Algorithm Experiments section in settings */ "Are you sure you want to delete all history entries?" = "Voulez-vous vraiment supprimer toutes les entrées de l’historique?"; /* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Voulez-vous vraiment supprimer toutes les entrées de dose enregistrées ?"; +"Are you sure you want to delete all logged dose entries?" = "Voulez-vous vraiment supprimer toutes les entrées de dose enregistrées?"; /* Action sheet confirmation message for reservoir deletion */ "Are you sure you want to delete all reservoir values?" = "Voulez-vous vraiment supprimer toutes les valeurs de réservoir?"; @@ -227,7 +227,7 @@ The title of the Algorithm Experiments section in settings */ "Are you sure you want to delete this CGM?" = "Voulez-vous vraiment supprimer ce CGM?"; /* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Voulez-vous vraiment supprimer ce service ?"; +"Are you sure you want to delete this service?" = "Voulez-vous vraiment supprimer ce service?"; /* Format fragment for a specific time */ "at %@" = "à %@"; @@ -442,7 +442,7 @@ The button label of the action used to dismiss the unsafe notification permissio "Diabetes Treatment" = "Traitement du diabète"; /* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Aviez-vous l'intention d'entrer %1$@ grammes comme quantité de glucides pour ce repas ?"; +"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Aviez-vous l'intention d'entrer %1$@ grammes comme quantité de glucides pour ce repas?"; /* The action hint of the workout mode toggle button when enabled */ "Disables" = "Désactive"; @@ -573,7 +573,7 @@ Title for bolus screen warning when glucose entry is out of range */ "High Glucose" = "Glycémie élevée"; /* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Comment puis-je désactiver temporairement tous les sons de l'application %1$@ ?"; +"How can I temporarily silence all %1$@ app sounds?" = "Comment puis-je désactiver temporairement tous les sons de l'application %1$@?"; /* The title text for how to update */ "How to update (LoopDocs)" = "Comment mettre à jour (LoopDocs)"; @@ -1141,7 +1141,7 @@ result when time cannot be formatted */ "Warning! Safety notifications are turned OFF" = "Attention! Les notifications de sécurité sont DÉSACTIVÉES"; /* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Quels sont des exemples d'alertes critiques et urgentes ?"; +"What are examples of Critical and Time Sensitive alerts?" = "Quels sont des exemples d'alertes critiques et urgentes?"; /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Lorsque la glycémie actuelle ou prévue est inférieure au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure."; @@ -1180,7 +1180,7 @@ result when time cannot be formatted */ "Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "L'heure de votre %1$@ a été modifiée. %2$@ a besoin d'enregistrements de temps précis pour établir des prédictions sur votre glycémie et ajuster votre insuline en conséquence. \n\nEnregistrez vos paramètres %1$@ (Général / Date et heure) et vérifiez que \"Régler automatiquement\" est activé. L'absence de résolution pourrait entraîner une sous-administration ou une sur-administration grave d'insuline."; /* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Votre glycémie est inférieure à %1$@. Êtes-vous sûr de vouloir administrer un bolus ?"; +"Your glucose is below %1$@. Are you sure you want to bolus?" = "Votre glycémie est inférieure à %1$@. Êtes-vous sûr de vouloir administrer un bolus?"; /* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ "Your glucose is below or predicted to go below your glucose safety limit, %@." = "Votre glycémie est en-dessous ou prévue pour aller en dessous de votre limite de sécurité de glycémie, %@."; diff --git a/Loop/it.lproj/InfoPlist.strings b/Loop/it.lproj/InfoPlist.strings index f86acc5698..9e803ffc85 100644 --- a/Loop/it.lproj/InfoPlist.strings +++ b/Loop/it.lproj/InfoPlist.strings @@ -5,19 +5,19 @@ "CFBundleName" = "$(PRODUCT_NAME)"; /* Privacy - NFC Scan Usage Description */ -"NFCReaderUsageDescription" = "L'app utilizza NFC per l'accoppiamento con i dispositivi per il diabete."; +"NFCReaderUsageDescription" = "L'app utilizza NFC per l'abbinamento con i dispositivi per il diabete."; /* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Il Bluetooth è utilizzato per comunicare con il microinfusore ed il sensore glicemico"; +"NSBluetoothAlwaysUsageDescription" = "Il Bluetooth viene utilizzato per comunicare con le pompe d'insulina e con i dispositivi di monitoraggio continuo della glicemia."; /* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Il Bluetooth è utilizzato per comunicare con il microinfusore ed il sensore glicemico"; +"NSBluetoothPeripheralUsageDescription" = "Il Bluetooth viene utilizzato per comunicare con le pompe d'insulina e con i dispositivi di monitoraggio continuo della glicemia."; /* Privacy - Camera Usage Description */ "NSCameraUsageDescription" = "La fotocamera è utilizzata per scansionare i codici a barre dei tuoi dispositivi."; /* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID viene utilizzato per autenticare il bolo."; +"NSFaceIDUsageDescription" = "Face ID viene utilizzato per autenticare il bolo d'insulina e per salvare le modifiche alle impostazioni della terapia."; /* Privacy - Health Share Usage Description */ "NSHealthShareUsageDescription" = "I dati sui pasti dal database Salute vengono utilizzati per determinare gli effetti del glucosio. I dati del glucosio del database Salute vengono utilizzati per il calcolo del grafico della glicemia."; @@ -26,5 +26,5 @@ "NSHealthUpdateUsageDescription" = "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit."; /* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione delle preimpostazioni con la tua voce"; +"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione dei Preset con la tua voce."; diff --git a/Loop/it.lproj/Localizable.strings b/Loop/it.lproj/Localizable.strings index efb90127e1..fbd96204d6 100644 --- a/Loop/it.lproj/Localizable.strings +++ b/Loop/it.lproj/Localizable.strings @@ -1,17 +1,17 @@ /* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (prevista l'erogazione di: %@)"; +" (pending: %@)" = " (in attesa: %@)"; /* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "Preset del Pre-Pasto"; +" Pre-meal Preset" = " Preset pre-pasto"; /* remaining time in setting's profile expiration section */ -" remaining" = "Rimanente"; +" remaining" = " rimanenti"; /* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = "Le notifiche di sicurezza risultano spente"; +" Safety Notifications are OFF" = " Le notifiche di sicurezza sono disattivate"; /* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "Preset modalità allenamento"; +" Workout Preset" = " Preset allenamento"; /* String denoting lack of a recommended bolus amount in the simple bolus calculator */ "–" = "–"; @@ -29,10 +29,10 @@ "%@ %@" = "%1$@ %2$@"; /* Formats absorbed carb value */ -"%@ absorbed" = "%@ assorbito"; +"%@ absorbed" = "%@ assorbiti"; /* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ rimanente"; +"%@ remaining" = "%@ rimanenti"; /* The subtitle format describing total insulin. (1: localized insulin total) */ "%@ U Total" = "%@ U Totali"; @@ -50,7 +50,7 @@ "%1$@ %2$@" = "%1$@ %2$@"; /* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@ /U"; +"%1$@ %2$@/U" = "%1$@ %2$@/U"; /* Formats (1: carb start time) and (2: carb absorption duration) */ "%1$@ + %2$@" = "%1$@ + %2$@"; @@ -59,77 +59,77 @@ "%1$@ APP SOUNDS" = "%1$@ SUONI DELL'APP"; /* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ sta funzionando in modalità Loop chiuso spento. Il tuo microinfusore e il tuo sensore continueranno a funzionare, ma l'applicazione non regolerà la somministrazione d'insulina automaticamente."; +"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ è in funzione con Loop chiuso disattivato. La pompa e il CGM continueranno a funzionare, ma l'applicazione non regolerà automaticamente il dosaggio."; /* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ non può cancellare l'allarme dal tuo dispositivo"; +"%1$@ is unable to clear the alert from your device" = "%1$@ non è in grado di cancellare l'avviso dal tuo dispositivo"; /* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ è impossibilitato a comunicare con il tuo microinfusore. L'applicazione continuerà a cercare di contattare il microinfusore, ma le informazioni sulla somministrazione di insulina non potranno essere aggiornate e nessuna automazione può essere continuata. Puoi aspettare alcuni minuti per vedere se il problema si risolve oppure premere il bottone qui sotto per conoscere le varie opzioni."; +"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ non riesce a comunicare con la pompa. L'app continuerà a provare a contattare la pompa, ma le informazioni sull'erogazione dell'insulina non possono essere aggiornate e l'automazione non può proseguire. \nPuoi attendere alcuni minuti per vedere se il problema si risolve oppure toccare il pulsante qui sotto per saperne di più sulle altre opzioni."; /* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ le impostazioni dell'orario necessitano una revisione"; +"%1$@ Time Settings Need Attention" = "%1$@ Le impostazioni dell'orario richiedono attenzione"; /* Reservoir entry (1: volume value) */ "%1$@ U" = "%1$@ U"; /* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U sinistra"; +"%1$@ U left" = "%1$@ U rimaste"; /* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U sinistra: %2$@"; +"%1$@ U left: %2$@" = "%1$@ U rimaste: %2$@"; /* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ "%1$@ U/hour @ %2$@" = "%1$@ U/ora @ %2$@"; /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; +"%1$@ v%2$@" = "%1$@ v%2$@"; /* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ "%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario ricostruirlo."; /* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ smetterà di funzionare in %2$@. Dovrai aggiornare prima di tale data con un nuovo provisioning profile."; +"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario effettuare l'aggiornamento con un nuovo profilo di provisioning."; /* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@ : %2$@"; +"%1$@: %2$@" = "%1$@: %2$@"; /* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@ : %2$@ %3$@"; +"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; /* No comment provided by engineer. */ "⚠️" = "⚠️"; /* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "Coefficiente di regressione del glucosio a 15 min (b₁), interpolato con il decadimento a 30 min."; +"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "Coefficiente di regressione della glicemia a 15 minuti (b₁), continuato con decadimento per 30 minuti"; /* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "Confronto di 30 minuti tra la previsione del glucosio e quella effettiva, continuato con decadimento per 60 minuti"; +"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "Confronto di 30 minuti tra la previsione della glicemia e quella effettiva, continuato con decadimento per 60 minuti"; /* Estimated remaining duration with a few seconds */ "A few seconds remaining" = "Pochi secondi rimanenti"; /* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Una glicemia manuale deve essere inserita tra %1$@ e %2$@"; +"A manual glucose entry must be between %@ and %@" = "Un inserimento manuale della glicemia deve essere compreso tra %1$@ e %2$@"; /* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Una glicemia manuale deve essere inserita tra %1$@ e %2$@"; +"A manual glucose entry must be between %1$@ and %2$@." = "Un inserimento manuale della glicemia deve essere compreso tra %1$@ e %2$@."; /* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Modello basato sull'assorbimento dichiarato dell'insulina Fiasp"; +"A model based on the published absorption of Fiasp insulin." = "Un modello basato sull'assorbimento pubblicato dell'insulina Fiasp."; /* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Modello basato sull'assorbimento dichiarato dell'insulina Humalog, Novolog e Apidra negli adulti"; +"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Un modello basato sull'assorbimento pubblicato dell'insulina Humalog, Novolog e Apidra negli adulti."; /* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Una nuova versione di %@ è disponibile ed è raccomandato di continuare a utilizzare l'app."; +"A new version of %@ is available and is recommended to continue using the app." = "È disponibile una nuova versione di %@ e si consiglia di continuare a utilizzare l'app."; /* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "È disponibile una nuova versione di %@ ."; +"A new version of %@ is available." = "È disponibile una nuova versione di %@."; /* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Prima di poter erogare un bolo, è necessario configurare un microinfusore."; +"A pump must be configured before a bolus can be delivered." = "Prima di poter erogare un bolo, è necessario configurare una pompa."; /* Action to copy the recommended Bolus value to the actual Bolus Field */ "AcceptRecommendedBolus" = "AcceptRecommendedBolus"; @@ -141,7 +141,7 @@ Description of a bolus dose entry (1: title for dose type, 2: value (? if no val "Active Carbohydrates: %@" = "Carboidrati attivi: %@"; /* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Carboidrati Attivi"; +"Active Carbs" = "Carboidrati attivi"; /* The title of the Insulin On-Board graph */ "Active Insulin" = "Insulina attiva"; @@ -153,51 +153,51 @@ Description of a bolus dose entry (1: title for dose type, 2: value (? if no val "Add a new favorite food" = "Aggiungi un nuovo cibo preferito"; /* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Agg. Carb. Assunti"; +"Add Carb Entry" = "Aggiungi inserimento carboidrati"; /* Action sheet title selecting CGM Title text for button to set up a CGM */ "Add CGM" = "Aggiungi CGM"; /* The label of the meal button */ -"Add Meal" = "Aggiungi Pasto"; +"Add Meal" = "Aggiungi pasto"; /* Action sheet title selecting Pump Title text for button to set up a new pump */ -"Add Pump" = "Aggiungi MICRO"; +"Add Pump" = "Aggiungi pompa"; /* Title text for button to set up a service */ -"Add Service" = "Aggiungi Servizio"; +"Add Service" = "Aggiungi servizio"; /* No comment provided by engineer. */ -"Adjusted for" = "Corretto per"; +"Adjusted for" = "Regolato per"; /* Alert Permissions button text Title of alert management screen */ -"Alert Management" = "Gestione Avvisi"; +"Alert Management" = "Gestione avvisi"; /* Alert Permissions button text Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Avvisi"; +"Alert Permissions" = "Permessi di avviso"; /* Alert Permissions descriptive text */ "Alert Permissions and Mute Alerts" = "Autorizzazioni avvisi e avvisi disattivati"; /* Navigation title for algorithms experiments screen The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Esperimenti sugli algoritmi"; +"Algorithm Experiments" = "Esperimenti algoritmo"; /* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Gli esperimenti sull'algoritmo sono modifiche opzionali all'algoritmo del loop. Queste modifiche sono meno testate rispetto all'algoritmo Loop standard, quindi utilizzale con Attenzione."; +"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Gli esperimenti sull'algoritmo sono modifiche opzionali all'algoritmo di Loop. Queste modifiche sono meno testate rispetto all'algoritmo Loop standard, quindi utilizzale con attenzione."; /* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Impostazioni Algoritmo"; +"Algorithm Settings" = "Impostazioni algoritmo"; /* Warning text for when alerts are muted */ -"All Alerts Muted" = "Tutti gli avvisi silenziati"; +"All Alerts Muted" = "Tutti gli avvisi disattivati"; /* Label for when mute alert will end */ -"All alerts muted until" = "silenzia tutti gli avvisi fino"; +"All alerts muted until" = "Tutti gli avvisi disattivati fino a"; /* No comment provided by engineer. */ "All Favorites" = "Tutti i preferiti"; @@ -206,19 +206,19 @@ The title of the Algorithm Experiments section in settings */ "Amount Consumed" = "Quantità consumata"; /* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; +"Amplitude" = "Ampiezza"; /* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Un programma alternativo sta modificando il tuo rapporto insulina carboidrato e la tua sensibilità all'insulina. Se non vuoi che questo influisca sul calcolo del tuo bolo e sulla glicemia predetta, considera di cancellare il programma alternativo."; +"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Un Override attivo sta modificando il rapporto di carboidrati e la sensibilità insulina. Se non si vuole che questo influisca sul calcolo del bolo e sulla glicemia prevista, si consiglia di disattivare la funzione di Override."; /* Alert message for a carb entry persistence error */ "An error occurred while trying to save your carb entry." = "Si è verificato un errore durante il tentativo di salvare l'inserimento dei carboidrati."; /* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Si è verificato un errore durante il tentativo di salvare l'inserimento manuale della Glicemia."; +"An error occurred while trying to save your manual glucose entry." = "Si è verificato un errore durante il tentativo di salvare l'inserimento manuale della glicemia."; /* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Si è verificato un errore nell'inserimento"; +"An unexpected onboarding error state occurred." = "Si è verificato un errore di onboarding imprevisto."; /* Alert message when glucose data returns while on bolus screen */ "An updated bolus recommendation is available." = "È disponibile una raccomandazione aggiornata sul bolo."; @@ -230,7 +230,7 @@ The title of the Algorithm Experiments section in settings */ "API Secret" = "Chiave personale API"; /* Settings app profile section */ -"App Profile" = "Profilo App"; +"App Profile" = "Profilo app"; /* Action sheet confirmation message for pump history deletion */ "Are you sure you want to delete all history entries?" = "Sei sicuro di voler eliminare tutte le voci della cronologia?"; @@ -248,7 +248,7 @@ The title of the Algorithm Experiments section in settings */ "Are you sure you want to delete this CGM?" = "Sei sicuro di voler eliminare questo CGM?"; /* No comment provided by engineer. */ -"Are you sure you want to delete this food?" = "Sei sicuro di voler cancellare questo cibo?"; +"Are you sure you want to delete this food?" = "Sei sicuro di voler eliminare questo cibo?"; /* Confirmation message for deleting a service */ "Are you sure you want to delete this service?" = "Sei sicuro di voler eliminare questo servizio?"; @@ -257,13 +257,13 @@ The title of the Algorithm Experiments section in settings */ "at %@" = "a %@"; /* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Eseguire l'autenticazione per il bolo di %@ Unità"; +"Authenticate to Bolus %@ Units" = "Esegui l'autenticazione per il bolo di %@ Unità"; /* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Eseguire l'autenticazione per registrare %@ Unità"; +"Authenticate to log %@ Units" = "Esegui l'autenticazione per registrare %@ Unità"; /* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Impostazione Velocità Basale"; +"Basal Rate Schedule" = "Tabella di velocità basale"; /* The title of the basal rate profile screen The title text for the basal rate schedule */ @@ -273,10 +273,10 @@ The title of the Algorithm Experiments section in settings */ "Based on your predicted glucose, no bolus is recommended." = "In base alla glicemia prevista, non è consigliato alcun bolo."; /* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth\n Spento"; +"Bluetooth\nOff" = "Bluetooth\nDisattivato"; /* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth\n Non disponibile"; +"Bluetooth\nUnavailable" = "Bluetooth\nNon disponibile"; /* Bluetooth off alert title */ "Bluetooth Off Alert" = "Avviso Bluetooth disattivato"; @@ -295,7 +295,7 @@ The title of the Algorithm Experiments section in settings */ "Bolus Recommendation Updated" = "Raccomandazioni sul bolo aggiornate"; /* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Riepilogo Boli"; +"Bolus Summary" = "Riepilogo bolo"; /* Alert title for a bolus too small validation error */ "Bolus Too Small" = "Bolo troppo piccolo"; @@ -310,56 +310,56 @@ The title of the Algorithm Experiments section in settings */ "Cancel" = "Annulla"; /* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Annullamento bolo"; +"Canceling Bolus" = "Annullamento bolo in corso"; /* Details for missing data error when carb effects are missing */ "Carb effects" = "Effetto carboidrati"; /* Label for carb entry row on bolus screen */ -"Carb Entry" = "Carboidrati Assunti"; +"Carb Entry" = "Carboidrati inseriti"; /* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Programma Rapporto Carboidrati"; +"Carb Ratio Schedule" = "Tabella del rapporto carboidrati"; /* The title of the carb ratios schedule screen The title text for the carb ratio schedule */ "Carb Ratios" = "Rapporti carboidrati"; /* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Agg. Carb. Assunti"; +"carb-entry-title-add" = "Aggiungi inserimento carboidrati"; /* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Le voci dei Carboidrati inseriti sono troppo grandi"; +"Carbohydrate Entry Too Large" = "Carboidrati inseriti troppo alti"; /* Title of the prediction input effect for carbohydrates */ "Carbohydrates" = "Carboidrati"; /* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carboidrati Assorbiti ÷ Rapporto Carboidrati (gr/U) × Sensibilità Insulinica (%1$@/U)"; +"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carboidrati assorbiti ÷ Rapporto carboidrati (gr/U) × Sensibilità insulinica (%1$@/U)"; /* No comment provided by engineer. */ "Caution" = "Attenzione"; /* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Cambiare immediatamente la batteria del microinfusore"; +"Change the pump battery immediately" = "Sostituisci immediatamente la batteria della pompa"; /* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Cambiare subito il serbatoio del microinfusore"; +"Change the pump reservoir now" = "Cambia ora il serbatoio della pompa"; /* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Controllare le impostazioni"; +"Check settings" = "Controlla le impostazioni"; /* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Controllare che il microinfusore si trovi vicino"; +"Check that your pump is in range" = "Controlla che la pompa sia nel raggio d'azione"; /* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Controllare la sorgente dati del sensore"; +"Check your CGM data source" = "Controlla la sorgente dati del sensore"; /* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Controlla l'ora del tuo dispositivo e/o rimuovi eventuali dati non validi da Apple Salute."; +"Check your device time and/or remove any invalid data from Apple Health." = "Controlla l'orario del tuo dispositivo e/o rimuovi eventuali dati non validi da Apple Salute."; /* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Scegli un tempo di assorbimento piu lungo per i pasti piu grandi o quelli contenenti grassi e proteine. Questa e solo una guida all’algoritmo e non e necessario che sia esatta."; +"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Scegli un periodo di assorbimento piu lungo per i pasti piu grandi o quelli contenenti grassi e proteine. Questa e solo una guida all’algoritmo e non e necessario che sia esatta."; /* No comment provided by engineer. */ "Choose Favorite:" = "Scegli il preferito:"; @@ -369,28 +369,28 @@ The button label of the action used to dismiss the unsafe notification permissio "Close" = "Chiudi"; /* The title text for the looping enabled switch cell */ -"Closed Loop" = "Loop Chiuso"; +"Closed Loop" = "Loop chiuso"; /* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Circuito chiuso OFF"; +"Closed Loop OFF" = "Loop chiuso disattivato"; /* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Loop chiuso richiede almeno una sessione attiva del sensore CGM"; +"Closed Loop requires an active CGM Sensor Session" = "Loop chiuso richiede almeno una sessione attiva del sensore CGM"; /* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Loop Chiuso richiede che la sua configurazione sia completa"; +"Closed Loop requires Setup to be Complete" = "Loop chiuso richiede che la configurazione sia completata"; /* The format string describing the date of an IOB value. The first format argument is the localized date. */ "com.loudnate.InsulinKit.IOBDateLabel" = "a %1$@"; /* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "in %1$@"; +"com.loudnate.InsulinKit.totalDateLabel" = "da %1$@"; /* The title of the action used to dismiss an error alert */ "com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; /* Title text for button to complete setup */ -"Complete Setup" = "Configurazione completata"; +"Complete Setup" = "Completa configurazione"; /* The title of the configuration section in settings */ "Configuration" = "Configurazione"; @@ -402,11 +402,11 @@ The button label of the action used to dismiss the unsafe notification permissio "Continue" = "Continua"; /* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "CGM:\nMonitoraggio Continuo Glicemia"; +"Continuous Glucose Monitor" = "Monitoraggio continuo glicemia"; /* The title of the glucose target range schedule screen The title text for the glucose target range schedule */ -"Correction Range" = "Intervallo Glicemico"; +"Correction Range" = "Intervallo di correzione"; /* Format string for title of reset loop alert. (1: App name) */ "Could Not Restart %1$@" = "Impossibile riavviare %1$@"; @@ -415,22 +415,22 @@ The button label of the action used to dismiss the unsafe notification permissio "Critical Alerts" = "Avvisi critici"; /* Critical event log ready text */ -"Critical Event Log Ready" = "Registro eventi Critici pronto"; +"Critical Event Log Ready" = "Registro eventi critici pronto"; /* Critical event log export title */ -"Critical Event Logs" = "Registro eventi Critici"; +"Critical Event Logs" = "Registri eventi critici"; /* Critical event log export error alert message */ "Critical Event Logs were not able to be exported." = "Non è stato possibile esportare i registri degli eventi critici."; /* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Glicemia Attuale"; +"Current Glucose" = "Glicemia attuale"; /* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "La glicemia attuale di %1$@ è al di sotto dell'intervallo glicemico selezionato."; +"Current glucose of %1$@ is below correction range." = "La glicemia attuale di %1$@ è al di sotto dell'intervallo glicemico."; /* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Progr. Alternativo"; +"Custom Override" = "Override personalizzato"; /* The title of the cell indicating a generic custom preset is enabled */ "Custom Preset" = "Programmazione"; @@ -442,49 +442,49 @@ The button label of the action used to dismiss the unsafe notification permissio "dB" = "dB"; /* No comment provided by engineer. */ -"Delete" = "Cancella"; +"Delete" = "Elimina"; /* No comment provided by engineer. */ -"Delete “%@”?" = "Cancellare \"%@\" ?"; +"Delete “%@”?" = "Eliminare \"%@\" ?"; /* The title of the button to remove the credentials for a service */ -"Delete Account" = "Cancella Account"; +"Delete Account" = "Elimina account"; /* Button title to delete all objects */ -"Delete All" = "Cancella tutto"; +"Delete All" = "Elimina tutto"; /* Button title to delete CGM */ "Delete CGM" = "Elimina CGM"; /* No comment provided by engineer. */ -"Delete Food" = "Cancella cibo"; +"Delete Food" = "Elimina cibo"; /* Button title to delete a service */ -"Delete Service" = "Elimina Servizio"; +"Delete Service" = "Elimina servizio"; /* No comment provided by engineer. */ "Delete Testing CGM Data" = "Elimina dati test CGM"; /* No comment provided by engineer. */ -"Delete Testing Data" = "Cancella i dati test"; +"Delete Testing Data" = "Elimina dati test"; /* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Cancella i dati test del microinfusore"; +"Delete Testing Pump Data" = "Elimina dati test della pompa"; /* Button text to deliver a bolus */ -"Deliver" = "Somministra"; +"Deliver" = "Eroga"; /* Title text for delivery limits */ -"Delivery Limits" = "Limiti Erogazione"; +"Delivery Limits" = "Limiti erogazione"; /* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Trattamento del diabete"; +"Diabetes Treatment" = "Terapia"; /* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ "Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Intendevi inserire %1$@ grammi come quantità di carboidrati per questo pasto?"; /* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Disabilita"; +"Disables" = "Disattiva"; /* Default alert dismissal The button label of the action used to dismiss an error alert */ @@ -494,7 +494,7 @@ The button label of the action used to dismiss an error alert */ "Done" = "Fine"; /* Title for card to log dose */ -"Dose Summary" = "Riassunto della dose"; +"Dose Summary" = "Riepilogo della dose"; /* The title of the Dosing Strategy section in settings */ "Dosing Strategy" = "Strategia di dosaggio"; @@ -503,46 +503,46 @@ The button label of the action used to dismiss an error alert */ "Duration exceeds: %1$.1f hours" = "La durata supera: %1$.1f ore"; /* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Abilita\n Bluetooth"; +"Enable\nBluetooth" = "Attiva\nBluetooth"; /* Title for Glucose Based Partial Application toggle */ -"Enable Glucose Based Partial Application" = "Abilita l'applicazione parziale basata sul glucosio"; +"Enable Glucose Based Partial Application" = "Attiva Applicazione parziale basata sulla glicemia (GBPA)"; /* Title for Integral Retrospective Correction toggle */ -"Enable Integral Retrospective Correction" = "Abilita Correzione Retrospettiva Integrale"; +"Enable Integral Retrospective Correction" = "Attiva Correzione retrospettiva integrale (IRC)"; /* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Abilita"; +"Enables" = "Attiva"; /* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Inserisci una glicemia da glucometro per una quantità di bolo consigliata."; +"Enter a blood glucose from a meter for a recommended bolus amount." = "Inserirsci la glicemia capillare per ottenere la quantità di bolo consigliata."; /* Button text to begin entering a bolus */ -"Enter Bolus" = "Invio Bolo"; +"Enter Bolus" = "Inserisci bolo"; /* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Glicemia da dito"; +"Enter Fingerstick Glucose" = "Inserirsci glicemia capillare"; /* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Inserisci limite di sicurezza"; +"Enter glucose safety limit" = "Inserisci limite di sicurezza glicemia"; /* The placeholder text instructing users to enter a suspend treshold */ "Enter suspend threshold" = "Inserisci soglia di sospensione"; /* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Errore durante l'Annullamento del Bolo"; +"Error Canceling Bolus" = "Errore durante l'annullamento del bolo"; /* Critical event log export error alert title */ "Error Exporting Logs" = "Errore durante l'esportazione dei registri"; /* The alert title for a resume error */ -"Error Resuming" = "Errore durante la Ripresa"; +"Error Resuming" = "Errore durante la ripresa"; /* Segmented button title for insulin delivery log event history */ -"Event History" = "Storia degli Eventi"; +"Event History" = "Cronologia degli eventi"; /* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Probabile Glic. %@"; +"Eventually %@" = "Infine %@"; /* Bolus error description: bolus exceeds maximum bolus in settings. */ "Exceeds maximum allowed bolus in settings" = "Supera il bolo massimo consentito nelle impostazioni"; @@ -551,7 +551,7 @@ The button label of the action used to dismiss an error alert */ "Exceeds maximum allowed carbs" = "Supera i carboidrati massimi consentiti"; /* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Supera Bolo Massimo"; +"Exceeds Maximum Bolus" = "Supera il bolo massimo"; /* The title of the export critical event logs in support */ "Export Critical Event Logs" = "Esporta registri eventi critici"; @@ -569,16 +569,16 @@ The button label of the action used to dismiss an error alert */ "Fiasp" = "Fiasp"; /* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Glicemia da dito"; +"Fingerstick Glucose" = "Glicemia capillare"; /* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Risolvilo ora attivando Notifiche, Avvisi critici e Notifiche urgenti."; +"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Risolvilo ora attivando notifiche, avvisi critici e notifiche sensibili al tempo."; /* The format string used to describe a finite workout targets duration */ "For %1$@" = "Per %1$@"; /* Description text for silencing time sensitive and non-critical alerts (1: app name) */ -"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Per motivi di sicurezza, dovresti consentire gli avvisi critici, le autorizzazioni urgenti e di notifica (avvisi non critici) sul tuo dispositivo per continuare a utilizzare %1$@ e non puoi disattivare i singoli allarmi."; +"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Per motivi di sicurezza, dovresti consentire gli avvisi critici, gli avvisi sensibili al tempo e le autorizzazioni di notifica (avvisi non critici) sul tuo dispositivo per continuare a utilizzare %1$@ e non puoi disattivare i singoli allarmi."; /* No comment provided by engineer. */ "Forecasted blood glucose may still be higher than target range." = "La glicemia prevista potrebbe essere più elevata di quella impostata come obiettivo."; @@ -600,29 +600,29 @@ The button label of the action used to dismiss an error alert */ /* Title for glucose based partial application experiment description Title of glucose based partial application experiment */ -"Glucose Based Partial Application" = "Glucose Based Partial Application (GBPA)"; +"Glucose Based Partial Application" = "Applicazione parziale basata sulla glicemia (GBPA)"; /* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "I dati sulla glicemia sono %1$@ vecchi"; +"Glucose data is %1$@ old" = "I dati sulla glicemia sono vecchi di %1$@"; /* Description of error when glucose data is missing */ -"Glucose data not available" = "I dati sulla glicemia non disponibili"; +"Glucose data not available" = "Dati sulla glicemia non disponibili"; /* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Dati Glicemie ora disponibili"; +"Glucose Data Now Available" = "Dati glicemia ora disponibili"; /* Description of the prediction input effect for suspension of insulin delivery */ -"Glucose effect of suspending insulin delivery" = "Effetto sulla glicemia della sospensione della somministrazione di insulina"; +"Glucose effect of suspending insulin delivery" = "Effetto sulla glicemia della sospensione dell'erogazione d'insulina"; /* Alert title for a manual glucose entry out of range error Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Glicemia inserita fuori dall'intervallo"; +"Glucose Entry Out of Range" = "Glicemia inserita fuori intervallo"; /* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Effetto Glicemico"; +"Glucose Momentum" = "Momento della glicemia"; /* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Programma degli intervalli degli obiettivi glicemici"; +"Glucose Target Range Schedule" = "Programma di intervalli target di glicemia"; /* No comment provided by engineer. */ "HARDWARE SOUNDS" = "SUONI HARDWARE"; @@ -634,7 +634,7 @@ Title for bolus screen warning when glucose entry is out of range */ "How can I silence non-Critical Alerts?" = "Come posso silenziare gli avvisi non critici?"; /* No comment provided by engineer. */ -"How can I silence only Time Sensitive and Non-Critical alerts?" = "Come posso silenziare solo gli avvisi urgenti e non critici?"; +"How can I silence only Time Sensitive and Non-Critical alerts?" = "Come posso silenziare solo gli avvisi sensibili al tempo e non critici?"; /* Title text for temporarily silencing all sounds (1: app name) */ "How can I temporarily silence all %1$@ app sounds?" = "Come posso silenziare temporaneamente tutti i suoni dell'app %1$@ ?"; @@ -643,7 +643,7 @@ Title for bolus screen warning when glucose entry is out of range */ "How to update (LoopDocs)" = "Come Aggiornare (LoopDocs)"; /* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Se la modalità Focus iOS è attiva e gli avvisi disattivati sono disattivati, gli avvisi critici verranno comunque inviati e gli avvisi non critici verranno silenziati finché %1$@ non verrà aggiunto a ciascuna modalità Focus come app consentita."; +"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Se la modalità Focus iOS è attiva e Disattiva avvisi è disattivata, gli avvisi critici verranno comunque inviati e gli avvisi non critici verranno silenziati finché %1$@ non verrà aggiunto a ciascuna modalità Focus come app consentita."; /* Immediate Delivery status text */ "Immediate" = "Immediato"; @@ -652,19 +652,19 @@ Title for bolus screen warning when glucose entry is out of range */ "In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "Nelle versioni future di Loop questi esperimenti potrebbero cambiare, diventare parti standard dell'algoritmo Loop o essere rimossi completamente da Loop. Segui la chat di Loop Zulip per rimanere informato su possibili modifiche a queste funzionalità."; /* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "A tempo indeterminato"; +"Indefinitely" = "Indefinitamente"; /* Title of the prediction input effect for insulin */ "Insulin" = "Insulina"; /* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Assorbimento Insulinico (U) × Sensibilità Insulinica (%1$@/U)"; +"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulina assorbita (U) × Sensibilità insulinica (%1$@/U)"; /* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Le regolazioni dell'insulina sono state disabilitate!"; +"Insulin adjustments have been disabled!" = "Le regolazioni dell'insulina sono state disattivate!"; /* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulina Somministrata"; +"Insulin Delivery" = "Erogazione insulina"; /* Details for missing data error when insulin effects are missing */ "Insulin effects" = "Effetto dell’insulina"; @@ -674,36 +674,36 @@ Title for bolus screen warning when glucose entry is out of range */ "Insulin Model" = "Modello di azione dell'Insulina"; /* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Microinfusore"; +"Insulin Pump" = "Pompa"; /* The title of the insulin sensitivities schedule screen The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Sensibilità Insulinica"; +"Insulin Sensitivities" = "Sensibilità insulinica"; /* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Programma di sensibilità all'insulina"; +"Insulin Sensitivity Schedule" = "Programma di sensibilità insulinica"; /* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Erogazione Insulina sospesa"; +"Insulin Suspended" = "Insulina sospesa"; /* Insulin type label */ "Insulin Type" = "Tipo d'insulina"; /* Title for integral retrospective correction experiment description Title of integral retrospective correction experiment */ -"Integral Retrospective Correction" = "Correzione retrospettiva Integrale"; +"Integral Retrospective Correction" = "Correzione retrospettiva integrale (IRC)"; /* Description of Integral Retrospective Correction toggle. */ -"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "La Correzione Retrospettiva Integrale (IRC) è un'estensione del componente standard dell'algoritmo di correzione retrospettiva (RC) in Loop, che regola la previsione in base alla cronologia delle discrepanze tra i livelli di glucosio previsti e quelli effettivi. \n\nA differenza di RC, che esamina le discrepanze negli ultimi 30 minuti, con IRC la cronologia delle discrepanze si accumula nel tempo. Pertanto, continue discrepanze positive nel tempo comporteranno un aumento del dosaggio. Se le discrepanze diventano negative nel tempo, Loop ridurrà ulteriormente il dosaggio."; +"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Correzione retrospettiva integrale (IRC) è un'estensione del componente standard dell'algoritmo di correzione retrospettiva (RC) in Loop, che regola la previsione in base alla cronologia delle discrepanze tra i livelli di glicemia previsti e quelli effettivi. \n\nA differenza di RC, che esamina le discrepanze negli ultimi 30 minuti, con IRC la cronologia delle discrepanze si accumula nel tempo. Pertanto, continue discrepanze positive nel tempo comporteranno un aumento del dosaggio. Se le discrepanze diventano negative nel tempo, Loop ridurrà ulteriormente il dosaggio."; /* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Interrotto %1$@ : %2$@ di %3$@ %4$@"; +"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Interrotto %1$@: %2$@ di %3$@ %4$@"; /* Carb error description: invalid absorption time. (1: Input duration in hours). */ -"Invalid absorption time: %1$@ hours" = "Tempo di assorbimento non valido: %d ore"; +"Invalid absorption time: %1$@ hours" = "Periodo di assorbimento non valido: %1$@ ore"; /* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Quantità di bolo non valida"; +"Invalid Bolus Amount" = "Quantità bolo non valida"; /* Carb error description: invalid carb amount. */ "Invalid carb amount" = "Quantità di carboidrati non valida"; @@ -712,22 +712,22 @@ Title of integral retrospective correction experiment */ "Invalid data: %1$@" = "Dati non validi: %1$@"; /* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Glucosio futuro non valido"; +"Invalid Future Glucose" = "Glicemia futura non valida"; /* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lettura del glucosio non valida con data e ora %1$@ nel futuro"; +"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lettura della glicemia non valida con data e ora %1$@ nel futuro"; /* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Gli avvisi critici per iOS e gli avvisi urgenti sono tipi di notifiche Apple. Vengono utilizzati per eventi ad alta priorità. Alcuni esempi includono:"; +"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "gli avvisi critici e gli avvisi sensibili al tempo di iOS sono tipi di notifiche Apple. Vengono utilizzati per eventi ad alta priorità. Alcuni esempi sono:"; /* No comment provided by engineer. */ -"IOS FOCUS MODES" = "MODALITÀ DI MESSA A FUOCO IOS"; +"IOS FOCUS MODES" = "MODALITÀ FOCUS IOS"; /* The title text for the issue report cell */ -"Issue Report" = "Report dei problemi"; +"Issue Report" = "Report problemi"; /* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Sembra che non sia stato registrato un pasto consumato. Toccare per registrarlo ora."; +"It looks like you may not have logged a meal you ate. Tap to log it now." = "Sembra che non sia stato registrato un pasto consumato. Tocca per registrarlo ora."; /* Title of the warning shown when a large meal was entered */ "Large Meal Entered" = "Pasto abbondante inserito"; @@ -739,26 +739,26 @@ Title of integral retrospective correction experiment */ "Learn More" = "Ulteriori informazioni"; /* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Manca meno di un minuto"; +"Less than a minute remaining" = "Meno di un minuto rimanente"; /* The loading message for the diagnostic report screen */ -"Loading..." = "Caricamento..."; +"Loading..." = "Caricamento in corso..."; /* Button text to log a dose Title for dose logging screen */ -"Log Dose" = "Registra la dose"; +"Log Dose" = "Registra dose"; /* The title of the screen displaying a manually entered insulin dose */ "Logged Insulin Dose" = "Dose d'insulina registrata"; /* Title for crash recovery alert */ -"Loop Crashed" = "Loop si è bloccato"; +"Loop Crashed" = "Loop è crashato"; /* The notification title for a loop failure */ "Loop Failure" = "Malfunzionamento di Loop"; /* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop ha rilevato un problema con le tue impostazioni Bluetooth e non funzionerà correttamente finché il Bluetooth non sarà abilitato. Non riceverai letture glicemiche né potrai eseguire il bolo."; +"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop ha rilevato un problema con le tue impostazioni Bluetooth e non funzionerà correttamente finché il Bluetooth non sarà attivato. Non riceverai letture glicemiche né potrai eseguire il bolo."; /* Warning displayed when user is adding a meal from an missed meal notification */ "Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop ha rilevato un pasto saltato e ne ha stimato le dimensioni. Modifica la quantità di carboidrati in modo che corrisponda alla quantità di carboidrati che potresti aver mangiato."; @@ -770,14 +770,14 @@ Title for dose logging screen */ "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop eseguirà automaticamente il bolo quando il fabbisogno d'insulina è superiore alla basale programmata e utilizzerà velocità basali temporanee quando necessario per ridurre l'erogazione d'insulina al di sotto della basale programmata."; /* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop non funzionerà correttamente fino a quando il Bluetooth non sarà abilitato. Non riceverai letture glicemiche né potrai eseguire il bolo."; +"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop non funzionerà correttamente fino a quando il Bluetooth non sarà attivato. Non riceverai letture glicemiche né potrai eseguire il bolo."; /* Description string for temp basal only dosing strategy */ "Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop imposterà velocità basali temporanee per aumentare e diminuire l'erogazione d'insulina."; /* Title for bolus screen warning when glucose is below glucose warning limit. Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Glucosio basso"; +"Low Glucose" = "Glicemia bassa"; /* Manage Permissions in Settings button text */ "Manage Permissions in Settings" = "Gestisci le autorizzazioni in Impostazioni"; @@ -789,13 +789,13 @@ Title for bolus screen warning when glucose is below suspend threshold, but a bo "Manual Dose: %1$@ %2$@" = "Dose manuale: %1$@ %2$@"; /* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Velocità Basale Massima all'ora"; +"Maximum Basal Rate Per Hour" = "Velocità basale massima all'ora"; /* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Bolo Massimo"; +"Maximum Bolus" = "Bolo massimo"; /* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Bolo Massimo Superato"; +"Maximum Bolus Exceeded" = "Bolo massimo superato"; /* Title for bolus entry screen when also entering carbs */ "Meal Bolus" = "Bolo pasto"; @@ -816,7 +816,7 @@ Title for bolus screen warning when glucose is below suspend threshold, but a bo "mmol/L" = "mmol/L"; /* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Effetto glicemico attuale"; +"Momentum effects" = "Effetti del momento"; /* Text for more info action on notification of upcoming TestFlight expiration Text for more info action on notification of upcoming profile expiration */ @@ -826,10 +826,10 @@ Text for more info action on notification of upcoming profile expiration */ "Mute All Alerts" = "Disattiva tutti gli avvisi"; /* Title for mute alert duration selection action sheet */ -"Mute All Alerts Temporarily" = "silenzia tutti gli avvisi temporaneamente"; +"Mute All Alerts Temporarily" = "Disattiva temporaneamente tutti gli avvisi"; /* Sensor state description for the non-valid state */ -"Needs Attention" = "Esige Attenzione"; +"Needs Attention" = "Richiede attenzione"; /* Override error description: negative duration error. */ "Negative duration not allowed" = "Durata negativa non consentita"; @@ -852,25 +852,25 @@ Title for bolus screen warning when no bolus is recommended */ "No Maximum Bolus Configured" = "Nessun bolo massimo configurato"; /* Alert title for a missing pump error */ -"No Pump Configured" = "Nessun Microinfusore configurato"; +"No Pump Configured" = "Nessuna pompa configurata"; /* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "No Glicemia Recente"; +"No Recent Glucose" = "Nessuna glicemia recente"; /* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Nessun Dato Recente Glicemia"; +"No Recent Glucose Data" = "Nessun dato recente sulla glicemia"; /* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Nessun dato recente sul Microinfusore"; +"No Recent Pump Data" = "Nessun dato recente sulla pompa"; /* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "No, modifica l'importo"; +"No, edit amount" = "No, modifica la quantità"; /* Notification Delivery Status text */ -"Notification Delivery" = "Notifiche erogazione"; +"Notification Delivery" = "Invio delle notifiche"; /* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "L'invio delle notifiche è impostato su Riepilogo pianificato nelle impostazioni del telefono. \n\n Per evitare ritardi nella ricezione delle notifiche da %1$@ , ti consigliamo di impostare la consegna delle notifiche su Consegna immediata."; +"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "L'invio delle notifiche è impostato su Riepilogo pianificato nelle impostazioni del telefono. \n\nPer evitare ritardi nella ricezione delle notifiche da %1$@ , ti consigliamo di impostare l'invio delle notifiche su Consegna immediata."; /* Notifications Status text */ "Notifications" = "Notifiche"; @@ -882,13 +882,13 @@ Title for bolus screen warning when no bolus is recommended */ "Notifications give you important %1$@ app information without requiring you to open the app." = "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app."; /* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app. \n\n Tienili attivati nelle impostazioni del tuo telefono per assicurarti di ricevere %1$@ Notifiche, Avvisi critici e Notifiche urgenti."; +"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app. \n\nTienile attive nelle impostazioni del tuo telefono per assicurarti di ricevere %1$@ notifiche, avvisi critici e notifiche sensibili al tempo."; /* Notification Setting Status is Off */ -"Off" = "Spento"; +"Off" = "Disattivato"; /* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh No! Loop si è chiuso mentre stava eseguendo un bolo e il dosaggio di insulina è stato messo in pausa, finchè la finestra sarà chiusa. L'elenco dell'infusione d'insulina potrebbe non essere accurato. Per favore rivedi con attenzione la tabella di infusione dell'insulina e sorveglia strettamente la tua glicemia"; +"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh No! Loop si è chiuso mentre stava eseguendo un bolo e il dosaggio d'insulina è stato messo in pausa, finchè la finestra sarà chiusa. L'elenco dell'infusione d'insulina potrebbe non essere accurato. Per favore rivedi con attenzione la tabella di infusione dell'insulina e sorveglia strettamente la tua glicemia"; /* Alert acknowledgment OK button Critical Alert permissions disabled alert button @@ -900,79 +900,79 @@ The title of the notification action to acknowledge a device alert */ "OK" = "OK"; /* Notification Setting Status is On */ -"On" = "Acceso"; +"On" = "Attivato"; /* The title text for the override presets */ -"Override Presets" = "Programma Alternativo"; +"Override Presets" = "Override"; /* The notification title for a meal that was possibly not logged in Loop. */ "Possible Missed Meal" = "Possibile pasto saltato"; /* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Obiettivo Pre-Pasto"; +"Pre-Meal Targets" = "Obiettivo pre-pasto"; /* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "La glicemia prevista tra %1$@ e' di %2$@."; +"Predicted glucose at %1$@ is %2$@." = "La glicemia prevista a %1$@ è di %2$@."; /* Notice when predicted glucose for bolus recommendation is in range */ "Predicted glucose is in range." = "La glicemia prevista è nell'intervallo"; /* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "La glicemia prevista da %1$@ è al di sotto del tuo limite glicemico di sicurezza"; +"Predicted glucose of %1$@ is below your glucose safety limit setting." = "La glicemia prevista da %1$@ è al di sotto del tuo limite glicemico di sicurezza."; /* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "La glicemia prevista %1$@ e' inferiore al valore soglia per la sospensione dell'erogazione."; +"Predicted glucose of %1$@ is below your suspend threshold setting." = "La glicemia prevista %1$@ è inferiore al valore soglia per la sospensione dell'erogazione."; /* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ "Predicted: %1$@\nActual: %2$@ (%3$@)" = "Previsto: %1$@\nEffettivo: %2$@ (%3$@)"; /* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "previsione-descrizione-integrale-retrospettiva-correzione"; +"prediction-description-integral-retrospective-correction" = "previsione-descrizione-integrale-correzione-retrospettiva"; /* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Lista degli eventi critici in preparazione"; +"Preparing Critical Event Logs" = "Preparazione dei registri degli eventi critici in corso"; /* Settings App Profile expiration view */ -"Profile Expiration" = "Scadenza Profilo"; +"Profile Expiration" = "Scadenza profilo"; /* Time that profile expires */ -"Profile expires " = "Profilo scaduto"; +"Profile expires " = "Il profilo scade "; /* The title for notification of upcoming profile expiration */ "Profile Expires Soon" = "Il profilo scade a breve"; /* The title of the pump section in settings */ -"Pump" = "Microinfusore"; +"Pump" = "Pompa"; /* The notification title for a low pump battery */ -"Pump Battery Low" = "Batteria Microinfusore bassa"; +"Pump Battery Low" = "Batteria della pompa scarica"; /* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "I dati forniti dal microinfusore sono di %1$@ fa"; +"Pump data is %1$@ old" = "I dati forniti dalla pompa sono di %1$@ fa"; /* The title of the screen displaying a pump event */ -"Pump Event" = "Evento Microinfusore"; +"Pump Event" = "Evento pompa"; /* No comment provided by engineer. */ -"Pump Expired" = "Microinfusore scaduto"; +"Pump Expired" = "Pompa scaduta"; /* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Gestione Microinfusore"; +"Pump Manager" = "Pump Manager"; /* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Errore gestione microinfusore:%1$@"; +"Pump Manager Error: %1$@" = "Errore Pump Manager: %1$@"; /* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Serbatoio microinfusore Vuoto"; +"Pump Reservoir Empty" = "Serbatoio della pompa vuoto"; /* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Serbatoio microinfusore Basso"; +"Pump Reservoir Low" = "Serbatoio della pompa scarico"; /* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Microinfusore sospeso"; +"Pump Suspended" = "Pompa sospesa"; /* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Microinfusore Sospeso. Il dosagio autoamtico e' disattivato"; +"Pump Suspended. Automatic dosing is disabled." = "Pompa sospesa. Il dosaggio automatico è disattivato."; /* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ "QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; @@ -987,21 +987,21 @@ The title of the notification action to acknowledge a device alert */ "Recommendation expired: %1$@ old" = "La raccomandazione è scaduta: %1$@ fa"; /* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Basale Raccomandata"; +"Recommended Basal" = "Basale raccomandata"; /* Label for recommended bolus row on bolus screen Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Bolo Raccomandato"; +"Recommended Bolus" = "Bolo raccomandato"; /* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Il Bolo Raccomandato supera la quantità del Bolo Massimo."; +"Recommended Bolus Exceeds Maximum Bolus" = "Il bolo raccomandato supera la quantità del bolo massimo."; /* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolo Raccomandato: %@ Unità"; +"Recommended Bolus: %@ Units" = "Bolo raccomandato: %@ Unità"; /* The notification title for a remote bolus. (1: Bolus amount) The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Inserimento di Bolo Remoto:%@ Unita'"; +"Remote Bolus Entry: %@ U" = "Inserimento bolo remoto: %@ U"; /* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ "Remote Carbs Entry: %d grams" = "Inserimento remoto di carboidrati: %d grammi"; @@ -1028,13 +1028,13 @@ The notification title for a remote failure. (1: Bolus amount) */ "Save Carbs & Deliver" = "Salva carboidrati ed eroga"; /* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Salva senza bolo"; +"Save without Bolusing" = "Salva senza erogare bolo"; /* Scheduled Delivery status text */ "Scheduled" = "Programmato"; /* No comment provided by engineer. */ -"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Selezionando un alimento preferito nella schermata di immissione dei carboidrati si riempiono automaticamente i campi relativi alla quantità di carboidrati, al tipo di alimento e al tempo di assorbimento! Tocca il pulsante Aggiungi qui sotto per creare il tuo primo cibo preferito!"; +"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Selezionando un alimento preferito nella schermata di inserimento dei carboidrati, i campi relativi a quantità di carboidrati, tipo di alimento e tempo di assorbimento vengono compilati automaticamente! Tocca \"Aggiungi\" qui sotto per creare il tuo primo alimento preferito!"; /* No comment provided by engineer. */ "Sensor Failed" = "Sensore guasto"; @@ -1046,7 +1046,7 @@ The notification title for a remote failure. (1: Bolus amount) */ "Settings" = "Impostazioni"; /* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Impostazione Incompleta"; +"Setup Incomplete" = "Configurazione incompleta"; /* Loop Completion HUD accessibility hint */ "Shows last loop error" = "Mostra l'ultimo errore di Loop"; @@ -1067,47 +1067,47 @@ The notification title for a remote failure. (1: Bolus amount) */ "Software Update" = "Aggiornamento software"; /* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "L'ora di inizio non rientra nell'intervallo: %@"; +"Start time is out of range: %@" = "L'orario di inizio non rientra nell'intervallo: %@"; /* The format for the description of a temporary override start date */ -"starting at %@" = "inizia a %@"; +"starting at %@" = "a partire da %@"; /* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Avvio Bolo"; +"Starting Bolus" = "Avvio bolo in corso"; /* Section title for Support The title of the support section in settings */ "Support" = "Supporto"; /* The title text in settings */ -"Suspend Threshold" = "Sospendi Soglia"; +"Suspend Threshold" = "Soglia di sospensione"; /* Title of the prediction input effect for suspension of insulin delivery */ -"Suspension of Insulin Delivery" = "Sospensione della somministrazione di insulina"; +"Suspension of Insulin Delivery" = "Sospensione dell'erogazione d'insulina"; /* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Premi per impostare un CGM"; +"Tap here to set up a CGM" = "Tocca per impostare un CGM"; /* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Premi per impostare un Microinfusore "; +"Tap here to set up a pump" = "Tocca per impostare una pompa"; /* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Premi per configurare un servizio"; +"Tap here to set up a Service" = "Tocca per configurare un servizio"; /* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Aggiungi"; +"Tap to Add" = "Tocca per aggiungere"; /* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Riprendi"; +"Tap to Resume" = "Tocca per riprendere"; /* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Interrompi"; +"Tap to Stop" = "Tocca per interrompere"; /* Label for button to unmute all alerts */ -"Tap to Unmute Alerts" = "Clicca per riattivare gli avvisi"; +"Tap to Unmute Alerts" = "Tocca per riattivare gli avvisi"; /* The alert body for unmute alert confirmation */ -"Tap Unmute to resume sound for your alerts and alarms." = "Tocca Riattiva per ripristinare l'audio per gli avvisi e le sveglie."; +"Tap Unmute to resume sound for your alerts and alarms." = "Tocca \"Riattiva\" audio per riattivare l'audio degli avvisi e delle sveglie."; /* Settings app TestFlight section */ "TestFlight" = "TestFlight"; @@ -1131,43 +1131,43 @@ The title of the support section in settings */ "The bolus recommendation has updated. Please reconfirm the bolus amount." = "La raccomandazione del bolo è stata aggiornata. Si prega di riconfermare la quantità di bolo."; /* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "ll modello antecedente usato da Loop, che consente la personalizzazione della durata dell'azione."; +"The legacy model used by Loop, allowing customization of action duration." = "Il modello legacy utilizzato da Loop, che consente la personalizzazione della durata dell'azione."; /* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ "The maximum allowed amount is %@ grams." = "La quantità massima consentita è %@ grammi."; /* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "L'importo massimo consentito è %1$@ ."; +"The maximum amount allowed is %1$@." = "La quantità massima consentita è %1$@ ."; /* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "L'importo massimo del bolo è %@ U."; +"The maximum bolus amount is %@ U." = "La quantità massima consentita del bolo è %@ U."; /* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Il Bolo Massimo è %@ Unità"; +"The maximum bolus amount is %@ Units" = "La quantità massima consentita del bolo è %@ Unità"; /* Alert message for a missing maximum bolus setting error */ "The maximum bolus setting must be configured before a bolus can be delivered." = "L'impostazione del bolo massimo deve essere configurata prima di poter erogare un bolo."; /* Title text for button to Therapy Settings */ -"Therapy Settings" = "Impostazioni Terapia"; +"Therapy Settings" = "Impostazioni terapia"; /* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Questa opzione si applica solo quando la strategia di dosaggio di Loop è impostata su Bolo automatico."; +"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Questa opzione si applica solo quando Strategia di dosaggio di Loop è impostata su Bolo automatico."; /* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Avvisi sensibili al tempo"; +"Time Sensitive Alerts" = "Notifiche sensibili al tempo"; /* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Notifiche a tempo"; +"Time Sensitive Notifications" = "Notifiche sensibili al tempo"; /* No comment provided by engineer. */ -"Transmitter Low Battery" = "Batteria scarica del trasmettitore"; +"Transmitter Low Battery" = "Batteria del trasmettitore scarica"; /* Critical event log export error alert try again button */ "Try Again" = "Riprova"; /* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Disattiva il volume sul tuo dispositivo iOS o aggiungi %1$@ come app consentita a ciascuna modalità Focus. Gli avvisi urgenti e critici continueranno a suonare, ma gli avvisi non critici verranno silenziati."; +"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Disattiva il volume sul tuo dispositivo iOS o aggiungi %1$@ come app consentita per ciascuna modalità Focus. Gli avvisi sensibili al tempo e critici continueranno a suonare, ma gli avvisi non critici verranno silenziati."; /* Bluetooth off foreground alert body */ "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Attiva il Bluetooth per ricevere avvisi, allarmi o letture glicemiche del sensore."; @@ -1179,7 +1179,7 @@ The title of the support section in settings */ "Unable To Clear Alert" = "Impossibile cancellare l'avviso"; /* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Impossibile raggiungere il microinfusore"; +"Unable To Reach Pump" = "Impossibile contattare la pompa"; /* Alert title for a carb entry persistence error */ "Unable to Save Carb Entry" = "Impossibile salvare l'inserimento di carboidrati"; @@ -1188,7 +1188,7 @@ The title of the support section in settings */ "Unable to Save Manual Glucose Entry" = "Impossibile salvare l'inserimento manuale delle glicemie"; /* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Impossibile interrompere il bolo in corso. Avvicinare l'iPhone al microinfusore e riprovare. Controllare nella cronologia delle somministrazioni l'insulina e monitorare attentamente la glicemia."; +"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Impossibile interrompere il bolo in corso. Avvicina l'iPhone alla pompa e riprova. Controlla la cronologia delle erogazioni d'insulina per maggiori dettagli e monitora attentamente la glicemia."; /* Event title displayed when StoredPumpEvent.title is not set The default description to use when an entry has no dose description @@ -1200,16 +1200,16 @@ result when time cannot be formatted */ "Unknown Error: %1$@" = "Errore sconosciuto: %1$@"; /* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Preset sconosciuta: %1$@"; +"Unknown preset: %1$@" = "Preset sconosciuto: %1$@"; /* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Ora sconosciuta"; +"Unknown time" = "Orario sconosciuto"; /* The title of the action used to unmute alerts */ "Unmute" = "Riattiva"; /* The alert title for unmute alert confirmation */ -"Unmute Alerts?" = "Attivare gli avvisi?"; +"Unmute Alerts?" = "Disattivare gli avvisi?"; /* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ "Unsupported Notification Service: %1$@" = "Servizio di notifica non supportato: %1$@"; @@ -1218,55 +1218,55 @@ result when time cannot be formatted */ "until %@" = "fino a %@"; /* indication of when alerts will be unmuted (1: time when alerts unmute) */ -"Until %1$@" = "Fino al %1$@"; +"Until %1$@" = "Fino a %1$@"; /* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ "Until I enter carbs" = "Fino a quando non inserisco carboidrati"; /* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Finché non spengo"; +"Until I turn off" = "Finché non disattivato"; /* No comment provided by engineer. */ -"Urgent Low" = "Basso urgente"; +"Urgent Low" = "Ipo urgente"; /* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Usa il preset Pre-Pasto"; +"Use Pre-Meal Preset" = "Usa il Preset pre-pasto"; /* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Utilizza la funzione Disattiva avvisi. Ti consente di silenziare temporaneamente tutti gli avvisi e gli allarmi tramite l'app %1$@ , inclusi gli avvisi critici e gli avvisi urgenti."; +"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Utilizza la funzione Disattiva avvisi. Consente di silenziare temporaneamente tutti gli avvisi e gli allarmi tramite l'app %1$@, compresi gli avvisi critici e gli avvisi sensibili al tempo."; /* The title of the alert controller used to select a duration for workout targets */ "Use Workout Glucose Targets" = "Utilizza i target glicemi per l'allenamento"; /* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Usa l'allenamento preimpostato"; +"Use Workout Preset" = "Usa il Preset allenamento"; /* Title of insulin model setting */ -"Walsh" = "modello mimetico modificabile di insulina "; +"Walsh" = "Walsh"; /* Alert Permissions Need Attention alert title */ "Warning! Safety notifications are turned OFF" = "Attenzione! Le notifiche di sicurezza sono disattivate"; /* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Quali sono alcuni esempi di avvisi critici e urgenti?"; +"What are examples of Critical and Time Sensitive alerts?" = "Quali sono alcuni esempi di avvisi critici e sensibili al tempo?"; /* Explanation of glucose safety limit */ "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando la glicemia attuale o prevista è inferiore al limite di sicurezza, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità all'ora."; /* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando la glicemia attuale o prevista è sotto la soglia di sospensione, Loop non consiglia un bolo, e raccomanda una velocità basale temporanea di 0 unità per ora."; +"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando la glicemia attuale o prevista è sotto la soglia di sospensione, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità per ora."; /* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Se abilitato, Loop può avvisarti quando rileva un pasto che non è stato registrato."; +"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Se attivato, Loop può avvisarti quando rileva un pasto che non è stato registrato."; /* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Quando non è in modalità ciclo chiuso, l'applicazione utilizza un calcolatore di bolo semplificato come un tipico microinfusore."; +"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Quando non è in modalità Loop chiuso, l'applicazione utilizza un calcolatore di bolo semplificato come una tipica pompa."; /* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Quando gli avvisi silenziosi sono attivi, tutti gli avvisi provenienti dalla tua app %1$@ compresi gli avvisi critici e urgenti, verranno temporaneamente visualizzati senza suoni e solo con la vibrazione."; +"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Quando Disattiva avvisi è attiva, tutti gli avvisi dell'app %1$@, compresi gli avvisi critici e quelli sensibili al tempo, vengono temporaneamente visualizzati senza suoni e solo con una vibrazione."; /* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Anche se gli avvisi sono disattivati, il microinfusore per insulina e l'hardware CGM potrebbero comunque emettere suoni."; +"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Anche se gli avvisi sono disattivati, la pompa per insulina e l'hardware CGM potrebbero comunque emettere suoni."; /* Format string for message of reset loop alert. (1: App name) (2: error description) */ "While trying to restart %1$@ an error occured.\n\n%2$@" = "Durante il tentativo di riavviare %1$@ si è verificato un errore.\n\n%2$@"; @@ -1275,44 +1275,44 @@ result when time cannot be formatted */ "Workout Targets" = "Obiettivi di allenamento"; /* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "La funzione Workout Temp Adjust è attiva da più di 24 ore. Assicurati di volerla mantenere attiva oppure disattivala nell'app."; +"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "L'Override di allenamento è attivo da più di 24 ore. Assicurati di volerlo mantenere attivato oppure disattivalo nell'app."; /* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "La regolazione della temperatura dell'allenamento è ancora attiva"; +"Workout Temp Adjust Still On" = "L'Override di allenamento è ancora attivo"; /* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "sì"; +"Yes" = "SÌ"; /* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Potresti non ricevere avvisi sonori, visivi o con vibrazione relativi a informazioni critiche sulla sicurezza. \n\n Per risolvere il problema, tocca \"Impostazioni\" e assicurati che Notifiche, Avvisi critici e Notifiche siano attivate."; +"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Potresti non ricevere avvisi sonori, visivi o con vibrazione relativi a informazioni critiche sulla sicurezza. \n\nPer risolvere il problema, tocca Impostazioni e assicurati che notifiche, avvisi critici e notifiche sensibili al tempo siano attivate."; /* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "L'orario di %1$@ è stato modificato. La %2$@ ha bisogno di registrazioni accurate dell'orario per fare previsioni sulle glicemie e regolare l'insulina di conseguenza.\n\nControllare nelle Impostazioni di %1$@ (Generale / Data e ora) e verificare che l'opzione \"Imposta automaticamente\" sia attivata. In caso contrario, l'insulina potrebbe essere somministrata in quantità insufficiente o eccessiva."; +"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "L'orario di %1$@ è stato modificato. La %2$@ ha bisogno di registrazioni accurate dell'orario per fare previsioni sulle glicemie e regolare l'insulina di conseguenza.\n\nControlla in Impostazioni di %1$@ (Generale / Data e ora) e verifica che l'opzione Imposta automaticamente sia attivata. In caso contrario, l'insulina potrebbe essere erogata in quantità insufficiente o eccessiva."; /* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ "Your glucose is below %1$@. Are you sure you want to bolus?" = "La glicemia è inferiore a %1$@. Sei sicuro di voler fare il bolo?"; /* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "La glicemia è inferiore o si prevede che scenda al di sotto del limite di sicurezza, %@."; +"Your glucose is below or predicted to go below your glucose safety limit, %@." = "La tua glicemia è inferiore o si prevede che scenderà al di sotto del limite di sicurezza della glicemia, %@."; /* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ "Your glucose is below your glucose safety limit, %1$@." = "La tua glicemia è al di sotto del limite di sicurezza, %1$@ ."; /* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "La tua Glicemia è Bassa! Mangia dei carboidrati semplici e valuta la possibilità di aspettare a fare il Bolo fino a quando la tua Glicemia raggiunge un intervallo di sicurezza."; +"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "La tua glicemia è bassa. Mangia carboidrati e valuta di aspettare il bolo finché la glicemia non torna a un intervallo sicuro."; /* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "La tua Glicemia è Bassa! Mangia dei Carboidrati Semplici e monitora la tua glicemia attivamente."; +"Your glucose is low. Eat carbs and monitor closely." = "La tua glicemia è bassa. Mangia carboidrati e monitora attentamente."; /* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "La quantità del tuo Bolo Massimo è %1$@"; +"Your maximum bolus amount is %1$@." = "La quantità massima consentita del tuo bolo è %1$@."; /* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "I dati del microinfusore sono obsoleti. %1$@ non può consigliare una quantità di bolo."; +"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "I dati della pompa sono obsoleti. %1$@ non può consigliare un bolo."; /* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Il microinfusore sta erogando una velocità basale temporanea manuale."; +"Your pump is delivering a manual temporary basal rate." = "La pompa sta erogando una velocità basale temporanea manuale."; /* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Il Bolo Raccomandato supera la quantità' del Bolo Massimo di %1$@"; +"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Il bolo raccomandato supera la quantità del bolo massimo di %1$@."; diff --git a/Loop/it.lproj/Main.strings b/Loop/it.lproj/Main.strings index 84d413cf5d..55e5e82db6 100644 --- a/Loop/it.lproj/Main.strings +++ b/Loop/it.lproj/Main.strings @@ -5,7 +5,7 @@ "5gz-kZ-iF1.text" = "3.5 U/ora @ 12:12 PM"; /* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Predetto"; +"87H-N1-0vJ.text" = "Previsto"; /* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ "aCb-Qs-bpu.text" = "Dettaglio"; @@ -14,19 +14,19 @@ "bIL-Ub-qYp.text" = "Etichetta"; /* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Modifica Carboidrati"; +"bq4-98-cQU.text" = "Modifica carboidrati"; /* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "Totale gr"; +"d3X-AN-tA5.text" = "g Totali"; /* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "La glicemia futura è predetta combinando gli effetti di più dati inseriti. L'utilizzo di questo applicativo permette di valutare come i singoli dati inseriti influiscano sul valore finale predetto."; +"D4C-I2-dhA.text" = "La glicemia futura viene prevista combinando gli effetti di più input. Utilizza questo strumento per alternare diversi input e confrontarli con la previsione finale."; /* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ "d6m-qV-wWi.text" = "Etichetta"; /* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "probabile glic. 92 mg/dL"; +"E41-FN-nkk.text" = "alla fine 92 mg/dL"; /* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ "EAn-Ja-S1d.text" = "Osservato"; @@ -38,13 +38,13 @@ "hZZ-2S-lrd.title" = "Effetti dei carboidrati"; /* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Per valutare l'assorbimento dei carboidrati, è possibile utilizzare i cambiamenti osservati nel glucosio, sottraendo i cambiamenti modellati dall'erogazione di insulina."; +"IxU-As-glo.text" = "Per valutare l'assorbimento dei carboidrati, è possibile utilizzare i cambiamenti osservati nella glicemia, sottraendo i cambiamenti modellati dall'erogazione d'insulina."; /* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ "J7x-W5-gwo.text" = "Dettaglio"; /* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Basale Raccomandata"; +"k3F-Na-7mn.text" = "Basale raccomandata"; /* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ "Krd-Aa-ret.text" = "Etichetta"; @@ -53,13 +53,13 @@ "OFA-qT-ZAg.text" = "Etichetta"; /* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Glicemia Prevista"; +"PA3-sP-cWY.title" = "Glicemia prevista"; /* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "probabile glic. 92 mg/dL"; +"Rse-x8-amW.text" = "alla fine 92 mg/dL"; /* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Carboidrati attivi"; +"SQx-au-ZcM.text" = "g carboidrati attivi"; /* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ "tuw-av-A3x.text" = "Glicemia"; @@ -71,7 +71,7 @@ "Vpi-5b-bY5.title" = "Carboidrati"; /* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Basale Raccomandata"; +"xhx-PI-bBI.text" = "Basale raccomandata"; /* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ "yn7-2M-jZz.text" = "0"; diff --git a/LoopCore/it.lproj/Localizable.strings b/LoopCore/it.lproj/Localizable.strings index 61672471fd..8a2f211935 100644 --- a/LoopCore/it.lproj/Localizable.strings +++ b/LoopCore/it.lproj/Localizable.strings @@ -1,8 +1,8 @@ /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; +"%1$@ v%2$@" = "%1$@ v%2$@"; /* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Bolo Automatico"; +"Automatic Bolus" = "Bolo automatico"; /* Title string for temp basal only dosing strategy */ "Temp Basal Only" = "Solo basale temporanea"; diff --git a/LoopUI/ar.lproj/InfoPlist.strings b/LoopUI/ar.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/ar.lproj/InfoPlist.strings +++ b/LoopUI/ar.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/da.lproj/InfoPlist.strings b/LoopUI/da.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/da.lproj/InfoPlist.strings +++ b/LoopUI/da.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/de.lproj/InfoPlist.strings b/LoopUI/de.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/de.lproj/InfoPlist.strings +++ b/LoopUI/de.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/es.lproj/InfoPlist.strings b/LoopUI/es.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/es.lproj/InfoPlist.strings +++ b/LoopUI/es.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fi.lproj/InfoPlist.strings b/LoopUI/fi.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/fi.lproj/InfoPlist.strings +++ b/LoopUI/fi.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/fr.lproj/InfoPlist.strings b/LoopUI/fr.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/fr.lproj/InfoPlist.strings +++ b/LoopUI/fr.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/he.lproj/InfoPlist.strings b/LoopUI/he.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/he.lproj/InfoPlist.strings +++ b/LoopUI/he.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/it.lproj/InfoPlist.strings b/LoopUI/it.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/it.lproj/InfoPlist.strings +++ b/LoopUI/it.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/it.lproj/Localizable.strings b/LoopUI/it.lproj/Localizable.strings index 37c6c625cb..977d55c51e 100644 --- a/LoopUI/it.lproj/Localizable.strings +++ b/LoopUI/it.lproj/Localizable.strings @@ -1,14 +1,14 @@ /* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ sta funzionando con il ciclo chiuso in posizione ON."; +"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ sta funzionando con il Loop chiuso attivato."; /* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nPer ulteriori informazioni, toccare le icone di stato del CGM e del microinfusore d'insulina. %2$@ continuerà a tentare di completare un ciclo, ma controlla eventuali problemi di comunicazione con il microinfusore e il CGM."; +"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@ \n \nTocca le icone di stato del CGM e della pompa per ulteriori informazioni. %2$@ continuerà a provare a completare un ciclo, ma controlla eventuali problemi di comunicazione con la pompa e il CGM."; /* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nPer ulteriori informazioni, toccare le icone di stato del CGM e del microinfusore d'insulina. %2$@ continuerà a tentare di completare un ciclo, ma è necessario prestare attenzione a potenziali problemi di comunicazione con il microinfusore e il CGM."; +"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@ \n \nTocca le icone di stato del CGM e della pompa per ulteriori informazioni. %2$@ continuerà a provare a completare un ciclo, ma fai attenzione a potenziali problemi di comunicazione con la pompa e il CGM."; /* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ sta funzionando con il ciclo chiuso in posizione OFF. Il microinfusore e il CGM continueranno a funzionare, ma l'applicazione non regolerà automaticamente il dosaggio.\n\n%2$@"; +"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ è in funzione con il Loop chiuso disattivato. La pompa e il CGM continueranno a funzionare, ma l'app non regolerà automaticamente il dosaggio. \n\n%2$@"; /* No glucose value representation (3 dashes for mg/dL) */ "– – –" = "---"; @@ -23,31 +23,31 @@ "%1$@ ago" = "%1$@ fa"; /* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ fa alle %2$@"; +"%1$@ ago at %2$@" = "%1$@ fa a %2$@"; /* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ "%1$@ at %2$@" = "%1$@ a %2$@"; /* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ unità per ora a %2$@"; +"%1$@ units per hour at %2$@" = "%1$@ unità all'ora a %2$@"; /* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; +"%1$@ v%2$@" = "%1$@ v%2$@"; /* Format string describing glucose units per minute (1: glucose unit string) */ "%1$@/min" = "%1$@/min"; /* Format string describing last completion */ -"<1 min ago" = "< 1 minuto fa"; +"<1 min ago" = "<1 minuto fa"; /* Accessibility hint describing completion HUD for a closed loop */ "Closed loop" = "Loop chiuso"; /* Title of green open loop OFF message */ -"Closed Loop OFF" = "Circuito chiuso OFF"; +"Closed Loop OFF" = "Loop chiuso disattivato"; /* Title of green closed loop ON message */ -"Closed Loop ON" = "Circuito chiuso ON"; +"Closed Loop ON" = "Loop chiuso attivato"; /* The short unit display string for decibles */ "dB" = "dB"; @@ -59,13 +59,13 @@ "HIGH" = "ALTO"; /* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Ultimo ciclo completato %1$@ ."; +"Last completed loop %1$@." = "Ultimo ciclo completato %1$@."; /* Title of red loop message */ "Loop Failure" = "Malfunzionamento di Loop"; /* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop funziona %@ fa"; +"Loop ran %@ ago" = "Loop eseguito %@ fa"; /* Title of yellow loop message */ "Loop Warning" = "Avviso Loop"; @@ -80,7 +80,7 @@ "mmol/L" = "mmol/L"; /* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Esige attenzione"; +"Needs attention" = "Richiede attenzione"; /* Accessbility hint describing completion HUD for an open loop */ "Open loop" = "Loop aperto"; @@ -89,7 +89,7 @@ "QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; /* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Tocca impostazioni per attivare il ciclo chiuso se si desidera che l'app automatizzi l'insulina."; +"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Tocca \"Impostazioni\" per attivare Loop chiuso se si desidera che l'app automatizzi l'insulina."; /* The short unit display string for international units of insulin */ "U" = "U"; @@ -98,7 +98,7 @@ "Unknown" = "Sconosciuto"; /* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "In attesa di prima esecuzione"; +"Waiting for first run" = "In attesa della prima esecuzione"; /* Format string describing last completion. (1: the date */ "was at %1$@" = "era a %1$@"; diff --git a/LoopUI/ja.lproj/InfoPlist.strings b/LoopUI/ja.lproj/InfoPlist.strings index f8e9a2b43f..bbcf8f9040 100644 --- a/LoopUI/ja.lproj/InfoPlist.strings +++ b/LoopUI/ja.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/nb.lproj/InfoPlist.strings b/LoopUI/nb.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/nb.lproj/InfoPlist.strings +++ b/LoopUI/nb.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/nl.lproj/InfoPlist.strings b/LoopUI/nl.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/nl.lproj/InfoPlist.strings +++ b/LoopUI/nl.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/pl.lproj/InfoPlist.strings b/LoopUI/pl.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/pl.lproj/InfoPlist.strings +++ b/LoopUI/pl.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/pt-BR.lproj/InfoPlist.strings b/LoopUI/pt-BR.lproj/InfoPlist.strings index f8e9a2b43f..bbcf8f9040 100644 --- a/LoopUI/pt-BR.lproj/InfoPlist.strings +++ b/LoopUI/pt-BR.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ro.lproj/InfoPlist.strings b/LoopUI/ro.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/ro.lproj/InfoPlist.strings +++ b/LoopUI/ro.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/ru.lproj/InfoPlist.strings b/LoopUI/ru.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/ru.lproj/InfoPlist.strings +++ b/LoopUI/ru.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/sv.lproj/InfoPlist.strings b/LoopUI/sv.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/sv.lproj/InfoPlist.strings +++ b/LoopUI/sv.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/tr.lproj/InfoPlist.strings b/LoopUI/tr.lproj/InfoPlist.strings index 5c1fb13406..13ab538314 100644 --- a/LoopUI/tr.lproj/InfoPlist.strings +++ b/LoopUI/tr.lproj/InfoPlist.strings @@ -1,6 +1,6 @@ -/* (No Comment) */ +/* Bundle display name */ "CFBundleDisplayName" = "LoopUI"; -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/LoopUI/vi.lproj/InfoPlist.strings b/LoopUI/vi.lproj/InfoPlist.strings index f8e9a2b43f..bbcf8f9040 100644 --- a/LoopUI/vi.lproj/InfoPlist.strings +++ b/LoopUI/vi.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ -/* (No Comment) */ +/* Bundle name */ "CFBundleName" = "$(PRODUCT_NAME)"; diff --git a/WatchApp Extension/it.lproj/Localizable.strings b/WatchApp Extension/it.lproj/Localizable.strings index 00223f900e..c4cb33de06 100644 --- a/WatchApp Extension/it.lproj/Localizable.strings +++ b/WatchApp Extension/it.lproj/Localizable.strings @@ -11,22 +11,22 @@ "%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; /* HUD row title for COB */ -"Active Carbs" = "Carboidrati Attivi"; +"Active Carbs" = "Carboidrati attivi"; /* HUD row title for IOB */ "Active Insulin" = "Insulina attiva"; /* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Agg. Carb. Assunti"; +"Add Carb Entry" = "Aggiungi inserimento carboidrati"; /* Button text to confirm manual bolus on Apple Watch */ "Bolus" = "Bolo"; /* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolo Fallito"; +"Bolus Failed" = "Bolo fallito"; /* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Raccomandazioni sul bolo aggiornate"; +"Bolus Recommendation Updated" = "Raccomandazione bolo aggiornata"; /* Button text to continue from carb entry to bolus entry on Apple Watch */ "Continue" = "Continua"; @@ -60,37 +60,37 @@ The recovery message displayed after a potential carb entry send attempt fails * "Net Basal Rate" = "Velocità basale netta"; /* Label for off button */ -"Off" = "Spento"; +"Off" = "Disattivato"; /* No comment provided by engineer. */ "OK" = "OK"; /* Label for on button */ -"On" = "Acceso"; +"On" = "Attivato"; /* The text for the Watch button for enabling a temporary override */ -"Override" = "Programma Alternativo"; +"Override" = "Override"; /* Alert message for updated bolus recommendation on Apple Watch */ "Please reconfirm the bolus amount." = "Si prega di riconfermare la quantità di bolo."; /* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-Pasto"; +"Pre-Meal" = "Pre-pasto"; /* The text for the Watch button for enabling a custom preset */ -"Preset" = "Preimpostato"; +"Preset" = "Preset"; /* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ "QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; /* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; +"Rec: %@ U" = "Rac: %@ U"; /* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "REC: %@ U"; +"REC: %@ U" = "RAC: %@ U"; /* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "REC: Calcolo..."; +"REC: Calculating..." = "RAC: Calcolo in corso..."; /* HUD row title for remaining reservoir volume */ "Reservoir Volume" = "Volume serbatoio"; @@ -103,10 +103,10 @@ The recovery message displayed after a potential carb entry send attempt fails * /* The title of the alert controller displayed after a carb entry send attempt fails The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Invio Fallito"; +"Send Failed" = "Invio fallito"; /* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Ruotare la corona digitale\nper il bolo"; +"Turn Digital Crown\nto bolus" = "Ruota la corona digitale\nper il bolo"; /* The short unit display string for international units of insulin */ "U" = "U"; @@ -115,7 +115,7 @@ The recovery message displayed after a potential carb entry send attempt fails * "U/hr" = "U/ora"; /* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Impossibile raggiungere iPhone"; +"Unable to Reach iPhone" = "Impossibile contattare iPhone"; /* The text for the Watch button for enabling workout mode */ "Workout" = "Allenamento"; diff --git a/WatchApp Extension/it.lproj/ckcomplication.strings b/WatchApp Extension/it.lproj/ckcomplication.strings index 5b1e3674cc..8c414cbcf9 100644 --- a/WatchApp Extension/it.lproj/ckcomplication.strings +++ b/WatchApp Extension/it.lproj/ckcomplication.strings @@ -8,5 +8,5 @@ "120↘︎" = "120↘︎"; /* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@ %@ %@"; +"UtilitarianLargeFlat" = "%@%@ %@"; diff --git a/WatchApp/it.lproj/Interface.strings b/WatchApp/it.lproj/Interface.strings index e7f8c1ef97..daa8e89123 100644 --- a/WatchApp/it.lproj/Interface.strings +++ b/WatchApp/it.lproj/Interface.strings @@ -8,19 +8,19 @@ "Dt1-kz-jMZ.text" = "---"; /* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-Pasto"; +"f5G-bS-9pd.text" = "Pre-pasto"; /* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carb."; +"hln-CI-MRP.text" = "Carbs"; /* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ "IRi-4t-ESO.text" = "–"; /* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolo Fallito"; +"jj3-Gq-HBy.text" = "Bolo fallito"; /* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Corsa"; +"JXa-s1-PJx.text" = "In esecuzione"; /* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ "Mhe-aR-kQQ.text" = "–"; @@ -29,7 +29,7 @@ "MZU-QV-PtZ.text" = "TITOLO"; /* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Programma Alternativo"; +"nC0-X3-oFJ.text" = "Override"; /* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ "rNf-Mh-tID.title" = "Loop"; @@ -50,7 +50,7 @@ "XkS-y5-khE.text" = ""; /* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "CARBOIDRATI ATTIVI"; +"ycL-5X-a05.text" = "CARBS ATTIVI"; /* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ "yl8-ZP-c3l.text" = "---"; From a634e2fa8bb465ba082f0f08c67a0e17c7e4b684 Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Sun, 31 Aug 2025 10:33:18 -0500 Subject: [PATCH 04/41] Updates for iOS26. Fix bolus action button --- .../StatusTableViewController.swift | 5 ++ Loop/Views/BolusEntryView.swift | 80 +++++++++---------- LoopUI/Views/DeviceStatusHUDView.swift | 4 +- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/Loop/View Controllers/StatusTableViewController.swift b/Loop/View Controllers/StatusTableViewController.swift index 0e14f2167c..94df013244 100644 --- a/Loop/View Controllers/StatusTableViewController.swift +++ b/Loop/View Controllers/StatusTableViewController.swift @@ -380,6 +380,11 @@ final class StatusTableViewController: LoopChartsTableViewController { override func reloadData(animated: Bool = false) { dispatchPrecondition(condition: .onQueue(.main)) + + guard view.window != nil else { + return + } + // This should be kept up to date immediately hudView?.loopCompletionHUD.lastLoopCompleted = deviceManager.loopManager.lastLoopCompleted diff --git a/Loop/Views/BolusEntryView.swift b/Loop/Views/BolusEntryView.swift index 3a25576f01..23012f50cb 100644 --- a/Loop/Views/BolusEntryView.swift +++ b/Loop/Views/BolusEntryView.swift @@ -18,17 +18,22 @@ struct BolusEntryView: View { @EnvironmentObject private var displayGlucosePreference: DisplayGlucosePreference @Environment(\.dismissAction) var dismiss @Environment(\.appName) var appName - + @Environment(\.dynamicTypeSize) private var dynamicTypeSize + @ObservedObject var viewModel: BolusEntryViewModel @State private var enteredBolusString = "" - @State private var shouldBolusEntryBecomeFirstResponder = false @State private var isInteractingWithChart = false - @State private var isKeyboardVisible = false @State private var pickerShouldExpand = false @State private var editedBolusAmount = false + @FocusState private var bolusFieldFocused: Bool + + private var accessoryClearance: CGFloat { + dynamicTypeSize.isAccessibilitySize ? 72 : 52 + } + var body: some View { GeometryReader { geometry in VStack(spacing: 0) { @@ -36,27 +41,9 @@ struct BolusEntryView: View { self.chartSection self.summarySection } - // As of iOS 13, we can't programmatically scroll to the Bolus entry text field. This ugly hack scoots the - // list up instead, so the summarySection is visible and the keyboard shows when you tap "Enter Bolus". - // Unfortunately, after entry, the field scoots back down and remains hidden. So this is not a great solution. - // TODO: Fix this in Xcode 12 when we're building for iOS 14. - .padding(.top, self.shouldAutoScroll(basedOn: geometry) ? -200 : -28) .insetGroupedListStyle() - self.actionArea - .frame(height: self.isKeyboardVisible ? 0 : nil) - .opacity(self.isKeyboardVisible ? 0 : 1) } - .onKeyboardStateChange { state in - self.isKeyboardVisible = state.height > 0 - - if state.height == 0 { - // Ensure tapping 'Enter Bolus' can make the text field the first responder again - self.shouldBolusEntryBecomeFirstResponder = false - } - } - .keyboardAware() - .edgesIgnoringSafeArea(self.isKeyboardVisible ? [] : .bottom) .navigationBarTitle(self.title) .supportedInterfaceOrientations(.portrait) .alert(item: self.$viewModel.activeAlert, content: self.alert(for:)) @@ -73,6 +60,14 @@ struct BolusEntryView: View { enteredBolusStringBinding.wrappedValue = newEnteredBolusString } } + .safeAreaInset(edge: .bottom, spacing: 0) { + if bolusFieldFocused { + // Reserve space so the toolbar doesn’t overlap the field + Color.clear.frame(height: accessoryClearance) + } else { + actionArea + } + } } } @@ -83,12 +78,6 @@ struct BolusEntryView: View { return Text("Meal Bolus", comment: "Title for bolus entry screen when also entering carbs") } - private func shouldAutoScroll(basedOn geometry: GeometryProxy) -> Bool { - // Taking a guess of 640 to cover iPhone SE, iPod Touch, and other smaller devices. - // Devices such as the iPhone 11 Pro Max do not need to auto-scroll. - return shouldBolusEntryBecomeFirstResponder && geometry.size.height > 640 - } - private var chartSection: some View { Section { VStack(spacing: 8) { @@ -253,18 +242,29 @@ struct BolusEntryView: View { Text("Bolus", comment: "Label for bolus entry row on bolus screen") Spacer() HStack(alignment: .firstTextBaseline) { - DismissibleKeyboardTextField( - text: enteredBolusStringBinding, - placeholder: viewModel.formatBolusAmount(0.0), - font: .preferredFont(forTextStyle: .title1), - textColor: .loopAccent, - textAlignment: .right, - keyboardType: .decimalPad, - shouldBecomeFirstResponder: shouldBolusEntryBecomeFirstResponder, - maxLength: 5, - doneButtonColor: .loopAccent, - textFieldDidBeginEditing: didBeginEditing - ) + TextField(viewModel.formatBolusAmount(0.0), text: enteredBolusStringBinding) + .keyboardType(.decimalPad) + .textInputAutocapitalization(.never) + .disableAutocorrection(true) + .font(.title) + .multilineTextAlignment(.trailing) + .foregroundColor(.loopAccent) + .focused($bolusFieldFocused) + .onTapGesture { didBeginEditing() } + // Optional: keep to 5 chars like before + .onChange(of: enteredBolusString) { newValue in + if newValue.count > 5 { + enteredBolusString = String(newValue.prefix(5)) + viewModel.updateEnteredBolus(enteredBolusString) + } + } + // Keyboard toolbar "Done" + .toolbar { + ToolbarItemGroup(placement: .keyboard) { + Spacer() + Button("Done") { bolusFieldFocused = false } + } + } bolusUnitsLabel } } @@ -354,7 +354,7 @@ struct BolusEntryView: View { Button( action: { if self.viewModel.actionButtonAction == .enterBolus { - self.shouldBolusEntryBecomeFirstResponder = true + self.bolusFieldFocused = true } else { Task { if await self.viewModel.didPressActionButton() { diff --git a/LoopUI/Views/DeviceStatusHUDView.swift b/LoopUI/Views/DeviceStatusHUDView.swift index 3951aca3ec..904f9d44cb 100644 --- a/LoopUI/Views/DeviceStatusHUDView.swift +++ b/LoopUI/Views/DeviceStatusHUDView.swift @@ -32,8 +32,8 @@ import LoopKitUI // round the edges of the progress view progressView.layer.cornerRadius = 2 progressView.clipsToBounds = true - progressView.layer.sublayers![1].cornerRadius = 2 - progressView.subviews[1].clipsToBounds = true + progressView.layer.sublayers!.last!.cornerRadius = 2 + progressView.subviews.last!.clipsToBounds = true } } From 9716cdf0ff4bd0e980f06d6d783e29b00d7890dc Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Sun, 31 Aug 2025 10:37:45 -0500 Subject: [PATCH 05/41] Cleanup --- Loop/Views/BolusEntryView.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Loop/Views/BolusEntryView.swift b/Loop/Views/BolusEntryView.swift index 23012f50cb..10e6fa4ccd 100644 --- a/Loop/Views/BolusEntryView.swift +++ b/Loop/Views/BolusEntryView.swift @@ -23,9 +23,7 @@ struct BolusEntryView: View { @ObservedObject var viewModel: BolusEntryViewModel @State private var enteredBolusString = "" - @State private var isInteractingWithChart = false - @State private var pickerShouldExpand = false @State private var editedBolusAmount = false @FocusState private var bolusFieldFocused: Bool @@ -251,14 +249,12 @@ struct BolusEntryView: View { .foregroundColor(.loopAccent) .focused($bolusFieldFocused) .onTapGesture { didBeginEditing() } - // Optional: keep to 5 chars like before .onChange(of: enteredBolusString) { newValue in if newValue.count > 5 { enteredBolusString = String(newValue.prefix(5)) viewModel.updateEnteredBolus(enteredBolusString) } } - // Keyboard toolbar "Done" .toolbar { ToolbarItemGroup(placement: .keyboard) { Spacer() From 01412d931cbea546e63f28f21b74ecc36c4e16f0 Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Mon, 1 Sep 2025 14:03:12 -0500 Subject: [PATCH 06/41] Update manual dose entry UI for iOS 26 --- Loop/Views/ManualEntryDoseView.swift | 75 +++++++++++++--------------- 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/Loop/Views/ManualEntryDoseView.swift b/Loop/Views/ManualEntryDoseView.swift index e81dccdabb..0c6700e6eb 100644 --- a/Loop/Views/ManualEntryDoseView.swift +++ b/Loop/Views/ManualEntryDoseView.swift @@ -15,16 +15,21 @@ import LoopUI struct ManualEntryDoseView: View { + @Environment(\.dynamicTypeSize) private var dynamicTypeSize + @ObservedObject var viewModel: ManualEntryDoseViewModel @State private var enteredBolusString = "" - @State private var shouldBolusEntryBecomeFirstResponder = false - @State private var isInteractingWithChart = false - @State private var isKeyboardVisible = false + + @FocusState private var bolusFieldFocused: Bool @Environment(\.dismissAction) var dismiss + private var accessoryClearance: CGFloat { + dynamicTypeSize.isAccessibilitySize ? 72 : 52 + } + var body: some View { GeometryReader { geometry in VStack(spacing: 0) { @@ -32,29 +37,18 @@ struct ManualEntryDoseView: View { self.chartSection self.summarySection } - // As of iOS 13, we can't programmatically scroll to the Bolus entry text field. This ugly hack scoots the - // list up instead, so the summarySection is visible and the keyboard shows when you tap "Enter Bolus". - // Unfortunately, after entry, the field scoots back down and remains hidden. So this is not a great solution. - // TODO: Fix this in Xcode 12 when we're building for iOS 14. - .padding(.top, self.shouldAutoScroll(basedOn: geometry) ? -200 : -28) .insetGroupedListStyle() - - self.actionArea - .frame(height: self.isKeyboardVisible ? 0 : nil) - .opacity(self.isKeyboardVisible ? 0 : 1) - } - .onKeyboardStateChange { state in - self.isKeyboardVisible = state.height > 0 - - if state.height == 0 { - // Ensure tapping 'Enter Bolus' can make the text field the first responder again - self.shouldBolusEntryBecomeFirstResponder = false - } } - .keyboardAware() - .edgesIgnoringSafeArea(self.isKeyboardVisible ? [] : .bottom) .navigationBarTitle(self.title) .supportedInterfaceOrientations(.portrait) + .safeAreaInset(edge: .bottom, spacing: 0) { + if bolusFieldFocused { + // Reserve space so the toolbar doesn’t overlap the field + Color.clear.frame(height: accessoryClearance) + } else { + actionArea + } + } } } @@ -62,12 +56,6 @@ struct ManualEntryDoseView: View { return Text("Log Dose", comment: "Title for dose logging screen") } - private func shouldAutoScroll(basedOn geometry: GeometryProxy) -> Bool { - // Taking a guess of 640 to cover iPhone SE, iPod Touch, and other smaller devices. - // Devices such as the iPhone 11 Pro Max do not need to auto-scroll. - shouldBolusEntryBecomeFirstResponder && geometry.size.height < 640 - } - private var chartSection: some View { Section { VStack(spacing: 8) { @@ -189,16 +177,25 @@ struct ManualEntryDoseView: View { Text("Bolus", comment: "Label for bolus entry row on bolus screen") Spacer() HStack(alignment: .firstTextBaseline) { - DismissibleKeyboardTextField( - text: typedBolusEntry, - placeholder: Self.doseAmountFormatter.string(from: 0.0)!, - font: .preferredFont(forTextStyle: .title1), - textColor: .loopAccent, - textAlignment: .right, - keyboardType: .decimalPad, - shouldBecomeFirstResponder: shouldBolusEntryBecomeFirstResponder, - maxLength: 5 - ) + TextField(Self.doseAmountFormatter.string(from: 0.0)!, text: typedBolusEntry) + .keyboardType(.decimalPad) + .textInputAutocapitalization(.never) + .disableAutocorrection(true) + .font(.title) + .multilineTextAlignment(.trailing) + .foregroundColor(.loopAccent) + .focused($bolusFieldFocused) + .onChange(of: enteredBolusString) { newValue in + if newValue.count > 5 { + enteredBolusString = String(newValue.prefix(5)) + } + } + .toolbar { + ToolbarItemGroup(placement: .keyboard) { + Spacer() + Button("Done") { bolusFieldFocused = false } + } + } bolusUnitsLabel } } @@ -250,7 +247,7 @@ struct ManualEntryDoseView: View { } } -extension InsulinType: Labeled { +extension InsulinType: @retroactive Labeled { public var label: String { return title } From cfff59a5d45204f2d6c8732a60c2c027784998be Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 4 Sep 2025 19:32:31 -0700 Subject: [PATCH 07/41] Convert to using xcstrings --- Loop Intent Extension/InfoPlist.xcstrings | 198 + Loop Intent Extension/Localizable.xcstrings | 125 + .../ar.lproj/Localizable.strings | 3 - .../da.lproj/InfoPlist.strings | 6 - .../da.lproj/Localizable.strings | 3 - .../de.lproj/InfoPlist.strings | 6 - .../de.lproj/Localizable.strings | 3 - .../es.lproj/InfoPlist.strings | 6 - .../es.lproj/Localizable.strings | 3 - .../fi.lproj/InfoPlist.strings | 6 - .../fi.lproj/Localizable.strings | 3 - .../fr.lproj/InfoPlist.strings | 6 - .../fr.lproj/Localizable.strings | 3 - .../he.lproj/InfoPlist.strings | 6 - .../he.lproj/Localizable.strings | 3 - .../it.lproj/InfoPlist.strings | 6 - .../it.lproj/Localizable.strings | 3 - .../ja.lproj/Localizable.strings | 3 - .../nb.lproj/InfoPlist.strings | 6 - .../nb.lproj/Localizable.strings | 3 - .../nl.lproj/InfoPlist.strings | 6 - .../nl.lproj/Localizable.strings | 3 - .../pl.lproj/InfoPlist.strings | 6 - .../pl.lproj/Localizable.strings | 3 - .../pt-BR.lproj/Localizable.strings | 3 - .../ro.lproj/InfoPlist.strings | 6 - .../ro.lproj/Localizable.strings | 3 - .../ru.lproj/InfoPlist.strings | 6 - .../ru.lproj/Localizable.strings | 3 - .../sk.lproj/Localizable.strings | 3 - .../sv.lproj/InfoPlist.strings | 6 - .../sv.lproj/Localizable.strings | 3 - .../tr.lproj/InfoPlist.strings | 6 - .../tr.lproj/Localizable.strings | 3 - .../vi.lproj/Localizable.strings | 3 - .../Base.lproj/Localizable.strings | 5 - Loop Status Extension/InfoPlist.xcstrings | 228 + Loop Status Extension/Localizable.xcstrings | 1722 + .../ar.lproj/InfoPlist.strings | 3 - .../ar.lproj/Localizable.strings | 33 - .../ar.lproj/MainInterface.strings | 6 - .../da.lproj/InfoPlist.strings | 6 - .../da.lproj/Localizable.strings | 45 - .../da.lproj/MainInterface.strings | 12 - .../de.lproj/InfoPlist.strings | 6 - .../de.lproj/Localizable.strings | 45 - .../de.lproj/MainInterface.strings | 12 - .../en.lproj/Localizable.strings | 5 - .../en.lproj/MainInterface.strings | 6 - .../es.lproj/InfoPlist.strings | 6 - .../es.lproj/Localizable.strings | 45 - .../es.lproj/MainInterface.strings | 12 - .../fi.lproj/InfoPlist.strings | 6 - .../fi.lproj/Localizable.strings | 45 - .../fi.lproj/MainInterface.strings | 12 - .../fr.lproj/InfoPlist.strings | 6 - .../fr.lproj/Localizable.strings | 45 - .../fr.lproj/MainInterface.strings | 12 - .../he.lproj/InfoPlist.strings | 6 - .../he.lproj/Localizable.strings | 45 - .../he.lproj/MainInterface.strings | 12 - .../it.lproj/InfoPlist.strings | 6 - .../it.lproj/Localizable.strings | 45 - .../it.lproj/MainInterface.strings | 12 - .../ja.lproj/InfoPlist.strings | 3 - .../ja.lproj/Localizable.strings | 33 - .../ja.lproj/MainInterface.strings | 6 - .../mul.lproj/MainInterface.xcstrings | 472 + .../nb.lproj/InfoPlist.strings | 6 - .../nb.lproj/Localizable.strings | 45 - .../nb.lproj/MainInterface.strings | 12 - .../nl.lproj/InfoPlist.strings | 6 - .../nl.lproj/Localizable.strings | 45 - .../nl.lproj/MainInterface.strings | 12 - .../pl.lproj/InfoPlist.strings | 6 - .../pl.lproj/Localizable.strings | 45 - .../pl.lproj/MainInterface.strings | 12 - .../pt-BR.lproj/InfoPlist.strings | 3 - .../pt-BR.lproj/Localizable.strings | 33 - .../pt-BR.lproj/MainInterface.strings | 6 - .../ro.lproj/InfoPlist.strings | 6 - .../ro.lproj/Localizable.strings | 45 - .../ro.lproj/MainInterface.strings | 12 - .../ru.lproj/InfoPlist.strings | 6 - .../ru.lproj/Localizable.strings | 45 - .../ru.lproj/MainInterface.strings | 12 - .../sk.lproj/InfoPlist.strings | 3 - .../sk.lproj/Localizable.strings | 42 - .../sk.lproj/MainInterface.strings | 12 - .../sv.lproj/InfoPlist.strings | 6 - .../sv.lproj/Localizable.strings | 45 - .../sv.lproj/MainInterface.strings | 12 - .../tr.lproj/InfoPlist.strings | 6 - .../tr.lproj/Localizable.strings | 45 - .../tr.lproj/MainInterface.strings | 12 - .../vi.lproj/InfoPlist.strings | 3 - .../vi.lproj/Localizable.strings | 33 - .../vi.lproj/MainInterface.strings | 6 - .../zh-Hans.lproj/Localizable.strings | 6 - .../zh-Hans.lproj/MainInterface.strings | 6 - .../Bootstrap/InfoPlist.xcstrings | 240 + .../Bootstrap/Localizable.xcstrings | 1478 + .../Bootstrap/ar.lproj/Localizable.strings | 24 - .../Bootstrap/da.lproj/InfoPlist.strings | 9 - .../Bootstrap/da.lproj/Localizable.strings | 45 - .../Bootstrap/de.lproj/InfoPlist.strings | 9 - .../Bootstrap/de.lproj/Localizable.strings | 45 - .../Bootstrap/es.lproj/InfoPlist.strings | 9 - .../Bootstrap/es.lproj/Localizable.strings | 45 - .../Bootstrap/fi.lproj/Localizable.strings | 30 - .../Bootstrap/fr.lproj/InfoPlist.strings | 9 - .../Bootstrap/fr.lproj/Localizable.strings | 45 - .../Bootstrap/he.lproj/Localizable.strings | 24 - .../Bootstrap/it.lproj/InfoPlist.strings | 9 - .../Bootstrap/it.lproj/Localizable.strings | 45 - .../Bootstrap/ja.lproj/Localizable.strings | 24 - .../Bootstrap/nb.lproj/InfoPlist.strings | 9 - .../Bootstrap/nb.lproj/Localizable.strings | 45 - .../Bootstrap/nl.lproj/InfoPlist.strings | 9 - .../Bootstrap/nl.lproj/Localizable.strings | 45 - .../Bootstrap/pl.lproj/InfoPlist.strings | 9 - .../Bootstrap/pl.lproj/Localizable.strings | 45 - .../Bootstrap/pt-BR.lproj/Localizable.strings | 24 - .../Bootstrap/ro.lproj/InfoPlist.strings | 9 - .../Bootstrap/ro.lproj/Localizable.strings | 45 - .../Bootstrap/ru.lproj/InfoPlist.strings | 9 - .../Bootstrap/ru.lproj/Localizable.strings | 45 - .../Bootstrap/sk.lproj/Localizable.strings | 24 - .../Bootstrap/sv.lproj/Localizable.strings | 30 - .../Bootstrap/tr.lproj/InfoPlist.strings | 9 - .../Bootstrap/tr.lproj/Localizable.strings | 45 - .../Bootstrap/vi.lproj/Localizable.strings | 24 - Loop.xcodeproj/project.pbxproj | 940 +- .../xcshareddata/swiftpm/Package.resolved | 33 + Loop/Base.lproj/InfoPlist.strings | 18 - Loop/Base.lproj/Localizable.strings | 401 - Loop/InfoPlist.xcstrings | 1133 + Loop/Localizable.xcstrings | 38446 ++++++++++++++++ Loop/ar.lproj/InfoPlist.strings | 21 - Loop/ar.lproj/Localizable.strings | 438 - Loop/ar.lproj/Main.strings | 84 - Loop/cs.lproj/Localizable.strings | 94 - Loop/cs.lproj/Main.strings | 6 - Loop/da.lproj/InfoPlist.strings | 30 - Loop/da.lproj/Localizable.strings | 1315 - Loop/da.lproj/Main.strings | 84 - Loop/de.lproj/InfoPlist.strings | 27 - Loop/de.lproj/Localizable.strings | 1157 - Loop/de.lproj/Main.strings | 84 - Loop/en.lproj/InfoPlist.strings | 6 - Loop/en.lproj/Localizable.strings | 392 - Loop/en.lproj/Main.strings | 3 - Loop/es.lproj/InfoPlist.strings | 27 - Loop/es.lproj/Localizable.strings | 1081 - Loop/es.lproj/Main.strings | 84 - Loop/fi.lproj/InfoPlist.strings | 21 - Loop/fi.lproj/Localizable.strings | 817 - Loop/fi.lproj/Main.strings | 84 - Loop/fr.lproj/InfoPlist.strings | 27 - Loop/fr.lproj/Localizable.strings | 1208 - Loop/fr.lproj/Main.strings | 84 - Loop/he.lproj/InfoPlist.strings | 27 - Loop/he.lproj/Localizable.strings | 883 - Loop/he.lproj/Main.strings | 84 - Loop/hi.lproj/Localizable.strings | 15 - Loop/hi.lproj/Main.strings | 3 - Loop/it.lproj/InfoPlist.strings | 30 - Loop/it.lproj/Localizable.strings | 1318 - Loop/it.lproj/Main.strings | 84 - Loop/ja.lproj/InfoPlist.strings | 21 - Loop/ja.lproj/Localizable.strings | 481 - Loop/ja.lproj/Main.strings | 84 - Loop/mul.lproj/LaunchScreen.xcstrings | 7 + Loop/mul.lproj/Main.xcstrings | 3659 ++ Loop/nb.lproj/InfoPlist.strings | 30 - Loop/nb.lproj/Localizable.strings | 1318 - Loop/nb.lproj/Main.strings | 84 - Loop/nl.lproj/InfoPlist.strings | 27 - Loop/nl.lproj/Localizable.strings | 1136 - Loop/nl.lproj/Main.strings | 84 - Loop/pl.lproj/InfoPlist.strings | 30 - Loop/pl.lproj/Localizable.strings | 1315 - Loop/pl.lproj/Main.strings | 84 - Loop/pt-BR.lproj/InfoPlist.strings | 21 - Loop/pt-BR.lproj/Localizable.strings | 481 - Loop/pt-BR.lproj/Main.strings | 84 - Loop/ro.lproj/InfoPlist.strings | 27 - Loop/ro.lproj/Localizable.strings | 1111 - Loop/ro.lproj/Main.strings | 84 - Loop/ru.lproj/InfoPlist.strings | 27 - Loop/ru.lproj/Localizable.strings | 1222 - Loop/ru.lproj/Main.strings | 84 - Loop/sk.lproj/InfoPlist.strings | 24 - Loop/sk.lproj/Localizable.strings | 276 - Loop/sk.lproj/Main.strings | 60 - Loop/sv.lproj/InfoPlist.strings | 21 - Loop/sv.lproj/Localizable.strings | 817 - Loop/sv.lproj/Main.strings | 84 - Loop/tr.lproj/InfoPlist.strings | 27 - Loop/tr.lproj/Localizable.strings | 1111 - Loop/tr.lproj/Main.strings | 84 - Loop/vi.lproj/InfoPlist.strings | 21 - Loop/vi.lproj/Localizable.strings | 481 - Loop/vi.lproj/Main.strings | 84 - Loop/zh-Hans.lproj/InfoPlist.strings | 18 - Loop/zh-Hans.lproj/Localizable.strings | 401 - Loop/zh-Hans.lproj/Main.strings | 78 - LoopCore/Localizable.xcstrings | 291 + LoopCore/ar.lproj/Localizable.strings | 3 - LoopCore/da.lproj/Localizable.strings | 9 - LoopCore/de.lproj/Localizable.strings | 9 - LoopCore/en.lproj/Localizable.strings | 9 - LoopCore/es.lproj/Localizable.strings | 9 - LoopCore/fi.lproj/Localizable.strings | 9 - LoopCore/fr.lproj/Localizable.strings | 9 - LoopCore/he.lproj/Localizable.strings | 3 - LoopCore/it.lproj/Localizable.strings | 9 - LoopCore/ja.lproj/Localizable.strings | 3 - LoopCore/nb.lproj/Localizable.strings | 9 - LoopCore/nl.lproj/Localizable.strings | 9 - LoopCore/pl.lproj/Localizable.strings | 9 - LoopCore/pt-BR.lproj/Localizable.strings | 3 - LoopCore/ro.lproj/Localizable.strings | 9 - LoopCore/ru.lproj/Localizable.strings | 9 - LoopCore/sk.lproj/Localizable.strings | 3 - LoopCore/sv.lproj/Localizable.strings | 9 - LoopCore/tr.lproj/Localizable.strings | 9 - LoopCore/vi.lproj/Localizable.strings | 3 - LoopUI/Base.lproj/InfoPlist.strings | 6 - LoopUI/Base.lproj/Localizable.strings | 32 - LoopUI/InfoPlist.xcstrings | 227 + LoopUI/Localizable.xcstrings | 3573 ++ LoopUI/ar.lproj/InfoPlist.strings | 6 - LoopUI/ar.lproj/Localizable.strings | 60 - LoopUI/cs.lproj/Localizable.strings | 3 - LoopUI/da.lproj/InfoPlist.strings | 6 - LoopUI/da.lproj/Localizable.strings | 105 - LoopUI/de.lproj/InfoPlist.strings | 6 - LoopUI/de.lproj/Localizable.strings | 105 - LoopUI/en.lproj/Localizable.strings | 32 - LoopUI/es.lproj/InfoPlist.strings | 6 - LoopUI/es.lproj/Localizable.strings | 105 - LoopUI/fi.lproj/InfoPlist.strings | 6 - LoopUI/fi.lproj/Localizable.strings | 72 - LoopUI/fr.lproj/InfoPlist.strings | 6 - LoopUI/fr.lproj/Localizable.strings | 105 - LoopUI/he.lproj/InfoPlist.strings | 6 - LoopUI/he.lproj/Localizable.strings | 66 - LoopUI/hi.lproj/Localizable.strings | 9 - LoopUI/it.lproj/InfoPlist.strings | 6 - LoopUI/it.lproj/Localizable.strings | 105 - LoopUI/ja.lproj/InfoPlist.strings | 3 - LoopUI/ja.lproj/Localizable.strings | 60 - LoopUI/nb.lproj/InfoPlist.strings | 6 - LoopUI/nb.lproj/Localizable.strings | 105 - LoopUI/nl.lproj/InfoPlist.strings | 6 - LoopUI/nl.lproj/Localizable.strings | 105 - LoopUI/pl.lproj/InfoPlist.strings | 6 - LoopUI/pl.lproj/Localizable.strings | 105 - LoopUI/pt-BR.lproj/InfoPlist.strings | 3 - LoopUI/pt-BR.lproj/Localizable.strings | 60 - LoopUI/ro.lproj/InfoPlist.strings | 6 - LoopUI/ro.lproj/Localizable.strings | 105 - LoopUI/ru.lproj/InfoPlist.strings | 6 - LoopUI/ru.lproj/Localizable.strings | 105 - LoopUI/sk.lproj/Localizable.strings | 39 - LoopUI/sv.lproj/InfoPlist.strings | 6 - LoopUI/sv.lproj/Localizable.strings | 72 - LoopUI/tr.lproj/InfoPlist.strings | 6 - LoopUI/tr.lproj/Localizable.strings | 105 - LoopUI/vi.lproj/InfoPlist.strings | 3 - LoopUI/vi.lproj/Localizable.strings | 60 - LoopUI/zh-Hans.lproj/Localizable.strings | 33 - .../Base.lproj/Localizable.strings | 38 - .../Base.lproj/ckcomplication.strings | 19 - WatchApp Extension/InfoPlist.xcstrings | 408 + WatchApp Extension/Localizable.xcstrings | 4312 ++ WatchApp Extension/ar.lproj/InfoPlist.strings | 3 - .../ar.lproj/Localizable.strings | 79 - .../ar.lproj/ckcomplication.strings | 12 - WatchApp Extension/ckcomplication.xcstrings | 341 + .../cs.lproj/Localizable.strings | 18 - WatchApp Extension/da.lproj/InfoPlist.strings | 12 - .../da.lproj/Localizable.strings | 122 - .../da.lproj/ckcomplication.strings | 12 - WatchApp Extension/de.lproj/InfoPlist.strings | 12 - .../de.lproj/Localizable.strings | 122 - .../de.lproj/ckcomplication.strings | 12 - .../en.lproj/Localizable.strings | 38 - WatchApp Extension/es.lproj/InfoPlist.strings | 12 - .../es.lproj/Localizable.strings | 122 - .../es.lproj/ckcomplication.strings | 12 - WatchApp Extension/fi.lproj/InfoPlist.strings | 12 - .../fi.lproj/Localizable.strings | 122 - WatchApp Extension/fr.lproj/InfoPlist.strings | 12 - .../fr.lproj/Localizable.strings | 122 - .../fr.lproj/ckcomplication.strings | 12 - WatchApp Extension/he.lproj/InfoPlist.strings | 3 - .../he.lproj/Localizable.strings | 88 - .../hi.lproj/Localizable.strings | 6 - WatchApp Extension/it.lproj/InfoPlist.strings | 12 - .../it.lproj/Localizable.strings | 122 - .../it.lproj/ckcomplication.strings | 12 - WatchApp Extension/ja.lproj/InfoPlist.strings | 3 - .../ja.lproj/Localizable.strings | 85 - WatchApp Extension/nb.lproj/InfoPlist.strings | 12 - .../nb.lproj/Localizable.strings | 122 - .../nb.lproj/ckcomplication.strings | 12 - WatchApp Extension/nl.lproj/InfoPlist.strings | 12 - .../nl.lproj/Localizable.strings | 122 - .../nl.lproj/ckcomplication.strings | 12 - WatchApp Extension/pl.lproj/InfoPlist.strings | 12 - .../pl.lproj/Localizable.strings | 122 - .../pl.lproj/ckcomplication.strings | 12 - .../pt-BR.lproj/InfoPlist.strings | 3 - .../pt-BR.lproj/Localizable.strings | 85 - WatchApp Extension/ro.lproj/InfoPlist.strings | 12 - .../ro.lproj/Localizable.strings | 122 - .../ro.lproj/ckcomplication.strings | 12 - WatchApp Extension/ru.lproj/InfoPlist.strings | 12 - .../ru.lproj/Localizable.strings | 122 - .../ru.lproj/ckcomplication.strings | 12 - WatchApp Extension/sk.lproj/InfoPlist.strings | 6 - .../sk.lproj/Localizable.strings | 52 - WatchApp Extension/sv.lproj/InfoPlist.strings | 12 - .../sv.lproj/Localizable.strings | 122 - WatchApp Extension/tr.lproj/InfoPlist.strings | 12 - .../tr.lproj/Localizable.strings | 122 - .../tr.lproj/ckcomplication.strings | 12 - WatchApp Extension/vi.lproj/InfoPlist.strings | 3 - .../vi.lproj/Localizable.strings | 85 - .../zh-Hans.lproj/Localizable.strings | 51 - WatchApp/Base.lproj/InfoPlist.strings | 6 - WatchApp/InfoPlist.xcstrings | 250 + WatchApp/ar.lproj/InfoPlist.strings | 6 - WatchApp/ar.lproj/Interface.strings | 60 - WatchApp/cs.lproj/Interface.strings | 6 - WatchApp/da.lproj/InfoPlist.strings | 6 - WatchApp/da.lproj/Interface.strings | 60 - WatchApp/de.lproj/InfoPlist.strings | 6 - WatchApp/de.lproj/Interface.strings | 60 - WatchApp/en.lproj/Interface.strings | 15 - WatchApp/es.lproj/InfoPlist.strings | 6 - WatchApp/es.lproj/Interface.strings | 60 - WatchApp/fi.lproj/InfoPlist.strings | 6 - WatchApp/fi.lproj/Interface.strings | 60 - WatchApp/fr.lproj/InfoPlist.strings | 6 - WatchApp/fr.lproj/Interface.strings | 60 - WatchApp/he.lproj/InfoPlist.strings | 6 - WatchApp/he.lproj/Interface.strings | 60 - WatchApp/hi.lproj/Interface.strings | 6 - WatchApp/it.lproj/InfoPlist.strings | 6 - WatchApp/it.lproj/Interface.strings | 60 - WatchApp/ja.lproj/InfoPlist.strings | 6 - WatchApp/ja.lproj/Interface.strings | 60 - WatchApp/mul.lproj/Interface.xcstrings | 2575 ++ WatchApp/nb.lproj/InfoPlist.strings | 6 - WatchApp/nb.lproj/Interface.strings | 60 - WatchApp/nl.lproj/InfoPlist.strings | 6 - WatchApp/nl.lproj/Interface.strings | 60 - WatchApp/pl.lproj/InfoPlist.strings | 6 - WatchApp/pl.lproj/Interface.strings | 60 - WatchApp/pt-BR.lproj/InfoPlist.strings | 6 - WatchApp/pt-BR.lproj/Interface.strings | 60 - WatchApp/ro.lproj/InfoPlist.strings | 6 - WatchApp/ro.lproj/Interface.strings | 60 - WatchApp/ru.lproj/InfoPlist.strings | 6 - WatchApp/ru.lproj/Interface.strings | 60 - WatchApp/sk.lproj/InfoPlist.strings | 3 - WatchApp/sk.lproj/Interface.strings | 15 - WatchApp/sv.lproj/InfoPlist.strings | 6 - WatchApp/sv.lproj/Interface.strings | 60 - WatchApp/tr.lproj/InfoPlist.strings | 6 - WatchApp/tr.lproj/Interface.strings | 60 - WatchApp/vi.lproj/InfoPlist.strings | 6 - WatchApp/vi.lproj/Interface.strings | 60 - WatchApp/zh-Hans.lproj/Interface.strings | 60 - 377 files changed, 59793 insertions(+), 30250 deletions(-) create mode 100644 Loop Intent Extension/InfoPlist.xcstrings create mode 100644 Loop Intent Extension/Localizable.xcstrings delete mode 100644 Loop Intent Extension/ar.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/da.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/da.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/de.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/de.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/es.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/es.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/fi.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/fi.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/fr.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/fr.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/he.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/he.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/it.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/it.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/ja.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/nb.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/nb.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/nl.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/nl.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/pl.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/pl.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/pt-BR.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/ro.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/ro.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/ru.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/ru.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/sk.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/sv.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/sv.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/tr.lproj/InfoPlist.strings delete mode 100644 Loop Intent Extension/tr.lproj/Localizable.strings delete mode 100644 Loop Intent Extension/vi.lproj/Localizable.strings delete mode 100644 Loop Status Extension/Base.lproj/Localizable.strings create mode 100644 Loop Status Extension/InfoPlist.xcstrings create mode 100644 Loop Status Extension/Localizable.xcstrings delete mode 100644 Loop Status Extension/ar.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ar.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ar.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/da.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/da.lproj/Localizable.strings delete mode 100644 Loop Status Extension/da.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/de.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/de.lproj/Localizable.strings delete mode 100644 Loop Status Extension/de.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/en.lproj/Localizable.strings delete mode 100644 Loop Status Extension/en.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/es.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/es.lproj/Localizable.strings delete mode 100644 Loop Status Extension/es.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/fi.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/fi.lproj/Localizable.strings delete mode 100644 Loop Status Extension/fi.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/fr.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/fr.lproj/Localizable.strings delete mode 100644 Loop Status Extension/fr.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/he.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/he.lproj/Localizable.strings delete mode 100644 Loop Status Extension/he.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/it.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/it.lproj/Localizable.strings delete mode 100644 Loop Status Extension/it.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/ja.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ja.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ja.lproj/MainInterface.strings create mode 100644 Loop Status Extension/mul.lproj/MainInterface.xcstrings delete mode 100644 Loop Status Extension/nb.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/nb.lproj/Localizable.strings delete mode 100644 Loop Status Extension/nb.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/nl.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/nl.lproj/Localizable.strings delete mode 100644 Loop Status Extension/nl.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/pl.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/pl.lproj/Localizable.strings delete mode 100644 Loop Status Extension/pl.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/pt-BR.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/pt-BR.lproj/Localizable.strings delete mode 100644 Loop Status Extension/pt-BR.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/ro.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ro.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ro.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/ru.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ru.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ru.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/sk.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/sk.lproj/Localizable.strings delete mode 100644 Loop Status Extension/sk.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/sv.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/sv.lproj/Localizable.strings delete mode 100644 Loop Status Extension/sv.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/tr.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/tr.lproj/Localizable.strings delete mode 100644 Loop Status Extension/tr.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/vi.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/vi.lproj/Localizable.strings delete mode 100644 Loop Status Extension/vi.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/zh-Hans.lproj/Localizable.strings delete mode 100644 Loop Status Extension/zh-Hans.lproj/MainInterface.strings create mode 100644 Loop Widget Extension/Bootstrap/InfoPlist.xcstrings create mode 100644 Loop Widget Extension/Bootstrap/Localizable.xcstrings delete mode 100644 Loop Widget Extension/Bootstrap/ar.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/da.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/da.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/de.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/de.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/es.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/es.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/fi.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/fr.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/fr.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/he.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/it.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/ja.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/nb.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/nb.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/nl.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/nl.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/pl.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/pl.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/pt-BR.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/ro.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/ro.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/ru.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/ru.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/sk.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/sv.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/tr.lproj/InfoPlist.strings delete mode 100644 Loop Widget Extension/Bootstrap/tr.lproj/Localizable.strings delete mode 100644 Loop Widget Extension/Bootstrap/vi.lproj/Localizable.strings create mode 100644 Loop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 Loop/Base.lproj/InfoPlist.strings delete mode 100644 Loop/Base.lproj/Localizable.strings create mode 100644 Loop/InfoPlist.xcstrings create mode 100644 Loop/Localizable.xcstrings delete mode 100644 Loop/ar.lproj/InfoPlist.strings delete mode 100644 Loop/ar.lproj/Localizable.strings delete mode 100644 Loop/ar.lproj/Main.strings delete mode 100644 Loop/cs.lproj/Localizable.strings delete mode 100644 Loop/cs.lproj/Main.strings delete mode 100644 Loop/da.lproj/InfoPlist.strings delete mode 100644 Loop/da.lproj/Localizable.strings delete mode 100644 Loop/da.lproj/Main.strings delete mode 100644 Loop/de.lproj/InfoPlist.strings delete mode 100755 Loop/de.lproj/Localizable.strings delete mode 100644 Loop/de.lproj/Main.strings delete mode 100644 Loop/en.lproj/InfoPlist.strings delete mode 100644 Loop/en.lproj/Localizable.strings delete mode 100644 Loop/en.lproj/Main.strings delete mode 100644 Loop/es.lproj/InfoPlist.strings delete mode 100644 Loop/es.lproj/Localizable.strings delete mode 100644 Loop/es.lproj/Main.strings delete mode 100644 Loop/fi.lproj/InfoPlist.strings delete mode 100644 Loop/fi.lproj/Localizable.strings delete mode 100644 Loop/fi.lproj/Main.strings delete mode 100644 Loop/fr.lproj/InfoPlist.strings delete mode 100644 Loop/fr.lproj/Localizable.strings delete mode 100644 Loop/fr.lproj/Main.strings delete mode 100644 Loop/he.lproj/InfoPlist.strings delete mode 100644 Loop/he.lproj/Localizable.strings delete mode 100644 Loop/he.lproj/Main.strings delete mode 100644 Loop/hi.lproj/Localizable.strings delete mode 100644 Loop/hi.lproj/Main.strings delete mode 100644 Loop/it.lproj/InfoPlist.strings delete mode 100644 Loop/it.lproj/Localizable.strings delete mode 100644 Loop/it.lproj/Main.strings delete mode 100644 Loop/ja.lproj/InfoPlist.strings delete mode 100644 Loop/ja.lproj/Localizable.strings delete mode 100644 Loop/ja.lproj/Main.strings create mode 100644 Loop/mul.lproj/LaunchScreen.xcstrings create mode 100644 Loop/mul.lproj/Main.xcstrings delete mode 100644 Loop/nb.lproj/InfoPlist.strings delete mode 100644 Loop/nb.lproj/Localizable.strings delete mode 100644 Loop/nb.lproj/Main.strings delete mode 100644 Loop/nl.lproj/InfoPlist.strings delete mode 100644 Loop/nl.lproj/Localizable.strings delete mode 100644 Loop/nl.lproj/Main.strings delete mode 100644 Loop/pl.lproj/InfoPlist.strings delete mode 100644 Loop/pl.lproj/Localizable.strings delete mode 100644 Loop/pl.lproj/Main.strings delete mode 100644 Loop/pt-BR.lproj/InfoPlist.strings delete mode 100644 Loop/pt-BR.lproj/Localizable.strings delete mode 100644 Loop/pt-BR.lproj/Main.strings delete mode 100644 Loop/ro.lproj/InfoPlist.strings delete mode 100644 Loop/ro.lproj/Localizable.strings delete mode 100644 Loop/ro.lproj/Main.strings delete mode 100644 Loop/ru.lproj/InfoPlist.strings delete mode 100644 Loop/ru.lproj/Localizable.strings delete mode 100644 Loop/ru.lproj/Main.strings delete mode 100644 Loop/sk.lproj/InfoPlist.strings delete mode 100644 Loop/sk.lproj/Localizable.strings delete mode 100644 Loop/sk.lproj/Main.strings delete mode 100644 Loop/sv.lproj/InfoPlist.strings delete mode 100644 Loop/sv.lproj/Localizable.strings delete mode 100644 Loop/sv.lproj/Main.strings delete mode 100644 Loop/tr.lproj/InfoPlist.strings delete mode 100644 Loop/tr.lproj/Localizable.strings delete mode 100644 Loop/tr.lproj/Main.strings delete mode 100644 Loop/vi.lproj/InfoPlist.strings delete mode 100644 Loop/vi.lproj/Localizable.strings delete mode 100644 Loop/vi.lproj/Main.strings delete mode 100644 Loop/zh-Hans.lproj/InfoPlist.strings delete mode 100644 Loop/zh-Hans.lproj/Localizable.strings delete mode 100644 Loop/zh-Hans.lproj/Main.strings create mode 100644 LoopCore/Localizable.xcstrings delete mode 100644 LoopCore/ar.lproj/Localizable.strings delete mode 100644 LoopCore/da.lproj/Localizable.strings delete mode 100644 LoopCore/de.lproj/Localizable.strings delete mode 100644 LoopCore/en.lproj/Localizable.strings delete mode 100644 LoopCore/es.lproj/Localizable.strings delete mode 100644 LoopCore/fi.lproj/Localizable.strings delete mode 100644 LoopCore/fr.lproj/Localizable.strings delete mode 100644 LoopCore/he.lproj/Localizable.strings delete mode 100644 LoopCore/it.lproj/Localizable.strings delete mode 100644 LoopCore/ja.lproj/Localizable.strings delete mode 100644 LoopCore/nb.lproj/Localizable.strings delete mode 100644 LoopCore/nl.lproj/Localizable.strings delete mode 100644 LoopCore/pl.lproj/Localizable.strings delete mode 100644 LoopCore/pt-BR.lproj/Localizable.strings delete mode 100644 LoopCore/ro.lproj/Localizable.strings delete mode 100644 LoopCore/ru.lproj/Localizable.strings delete mode 100644 LoopCore/sk.lproj/Localizable.strings delete mode 100644 LoopCore/sv.lproj/Localizable.strings delete mode 100644 LoopCore/tr.lproj/Localizable.strings delete mode 100644 LoopCore/vi.lproj/Localizable.strings delete mode 100644 LoopUI/Base.lproj/InfoPlist.strings delete mode 100644 LoopUI/Base.lproj/Localizable.strings create mode 100644 LoopUI/InfoPlist.xcstrings create mode 100644 LoopUI/Localizable.xcstrings delete mode 100644 LoopUI/ar.lproj/InfoPlist.strings delete mode 100644 LoopUI/ar.lproj/Localizable.strings delete mode 100644 LoopUI/cs.lproj/Localizable.strings delete mode 100644 LoopUI/da.lproj/InfoPlist.strings delete mode 100644 LoopUI/da.lproj/Localizable.strings delete mode 100644 LoopUI/de.lproj/InfoPlist.strings delete mode 100644 LoopUI/de.lproj/Localizable.strings delete mode 100644 LoopUI/en.lproj/Localizable.strings delete mode 100644 LoopUI/es.lproj/InfoPlist.strings delete mode 100644 LoopUI/es.lproj/Localizable.strings delete mode 100644 LoopUI/fi.lproj/InfoPlist.strings delete mode 100644 LoopUI/fi.lproj/Localizable.strings delete mode 100644 LoopUI/fr.lproj/InfoPlist.strings delete mode 100644 LoopUI/fr.lproj/Localizable.strings delete mode 100644 LoopUI/he.lproj/InfoPlist.strings delete mode 100644 LoopUI/he.lproj/Localizable.strings delete mode 100644 LoopUI/hi.lproj/Localizable.strings delete mode 100644 LoopUI/it.lproj/InfoPlist.strings delete mode 100644 LoopUI/it.lproj/Localizable.strings delete mode 100644 LoopUI/ja.lproj/InfoPlist.strings delete mode 100644 LoopUI/ja.lproj/Localizable.strings delete mode 100644 LoopUI/nb.lproj/InfoPlist.strings delete mode 100644 LoopUI/nb.lproj/Localizable.strings delete mode 100644 LoopUI/nl.lproj/InfoPlist.strings delete mode 100644 LoopUI/nl.lproj/Localizable.strings delete mode 100644 LoopUI/pl.lproj/InfoPlist.strings delete mode 100644 LoopUI/pl.lproj/Localizable.strings delete mode 100644 LoopUI/pt-BR.lproj/InfoPlist.strings delete mode 100644 LoopUI/pt-BR.lproj/Localizable.strings delete mode 100644 LoopUI/ro.lproj/InfoPlist.strings delete mode 100644 LoopUI/ro.lproj/Localizable.strings delete mode 100644 LoopUI/ru.lproj/InfoPlist.strings delete mode 100644 LoopUI/ru.lproj/Localizable.strings delete mode 100644 LoopUI/sk.lproj/Localizable.strings delete mode 100644 LoopUI/sv.lproj/InfoPlist.strings delete mode 100644 LoopUI/sv.lproj/Localizable.strings delete mode 100644 LoopUI/tr.lproj/InfoPlist.strings delete mode 100644 LoopUI/tr.lproj/Localizable.strings delete mode 100644 LoopUI/vi.lproj/InfoPlist.strings delete mode 100644 LoopUI/vi.lproj/Localizable.strings delete mode 100644 LoopUI/zh-Hans.lproj/Localizable.strings delete mode 100644 WatchApp Extension/Base.lproj/Localizable.strings delete mode 100644 WatchApp Extension/Base.lproj/ckcomplication.strings create mode 100644 WatchApp Extension/InfoPlist.xcstrings create mode 100644 WatchApp Extension/Localizable.xcstrings delete mode 100644 WatchApp Extension/ar.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/ar.lproj/Localizable.strings delete mode 100644 WatchApp Extension/ar.lproj/ckcomplication.strings create mode 100644 WatchApp Extension/ckcomplication.xcstrings delete mode 100644 WatchApp Extension/cs.lproj/Localizable.strings delete mode 100644 WatchApp Extension/da.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/da.lproj/Localizable.strings delete mode 100644 WatchApp Extension/da.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/de.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/de.lproj/Localizable.strings delete mode 100644 WatchApp Extension/de.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/en.lproj/Localizable.strings delete mode 100644 WatchApp Extension/es.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/es.lproj/Localizable.strings delete mode 100644 WatchApp Extension/es.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/fi.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/fi.lproj/Localizable.strings delete mode 100644 WatchApp Extension/fr.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/fr.lproj/Localizable.strings delete mode 100644 WatchApp Extension/fr.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/he.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/he.lproj/Localizable.strings delete mode 100644 WatchApp Extension/hi.lproj/Localizable.strings delete mode 100644 WatchApp Extension/it.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/it.lproj/Localizable.strings delete mode 100644 WatchApp Extension/it.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/ja.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/ja.lproj/Localizable.strings delete mode 100644 WatchApp Extension/nb.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/nb.lproj/Localizable.strings delete mode 100644 WatchApp Extension/nb.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/nl.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/nl.lproj/Localizable.strings delete mode 100644 WatchApp Extension/nl.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/pl.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/pl.lproj/Localizable.strings delete mode 100644 WatchApp Extension/pl.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/pt-BR.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/pt-BR.lproj/Localizable.strings delete mode 100644 WatchApp Extension/ro.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/ro.lproj/Localizable.strings delete mode 100644 WatchApp Extension/ro.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/ru.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/ru.lproj/Localizable.strings delete mode 100644 WatchApp Extension/ru.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/sk.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/sk.lproj/Localizable.strings delete mode 100644 WatchApp Extension/sv.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/sv.lproj/Localizable.strings delete mode 100644 WatchApp Extension/tr.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/tr.lproj/Localizable.strings delete mode 100644 WatchApp Extension/tr.lproj/ckcomplication.strings delete mode 100644 WatchApp Extension/vi.lproj/InfoPlist.strings delete mode 100644 WatchApp Extension/vi.lproj/Localizable.strings delete mode 100644 WatchApp Extension/zh-Hans.lproj/Localizable.strings delete mode 100644 WatchApp/Base.lproj/InfoPlist.strings create mode 100644 WatchApp/InfoPlist.xcstrings delete mode 100644 WatchApp/ar.lproj/InfoPlist.strings delete mode 100644 WatchApp/ar.lproj/Interface.strings delete mode 100644 WatchApp/cs.lproj/Interface.strings delete mode 100644 WatchApp/da.lproj/InfoPlist.strings delete mode 100644 WatchApp/da.lproj/Interface.strings delete mode 100644 WatchApp/de.lproj/InfoPlist.strings delete mode 100644 WatchApp/de.lproj/Interface.strings delete mode 100644 WatchApp/en.lproj/Interface.strings delete mode 100644 WatchApp/es.lproj/InfoPlist.strings delete mode 100644 WatchApp/es.lproj/Interface.strings delete mode 100644 WatchApp/fi.lproj/InfoPlist.strings delete mode 100644 WatchApp/fi.lproj/Interface.strings delete mode 100644 WatchApp/fr.lproj/InfoPlist.strings delete mode 100644 WatchApp/fr.lproj/Interface.strings delete mode 100644 WatchApp/he.lproj/InfoPlist.strings delete mode 100644 WatchApp/he.lproj/Interface.strings delete mode 100644 WatchApp/hi.lproj/Interface.strings delete mode 100644 WatchApp/it.lproj/InfoPlist.strings delete mode 100644 WatchApp/it.lproj/Interface.strings delete mode 100644 WatchApp/ja.lproj/InfoPlist.strings delete mode 100644 WatchApp/ja.lproj/Interface.strings create mode 100644 WatchApp/mul.lproj/Interface.xcstrings delete mode 100644 WatchApp/nb.lproj/InfoPlist.strings delete mode 100644 WatchApp/nb.lproj/Interface.strings delete mode 100644 WatchApp/nl.lproj/InfoPlist.strings delete mode 100644 WatchApp/nl.lproj/Interface.strings delete mode 100644 WatchApp/pl.lproj/InfoPlist.strings delete mode 100644 WatchApp/pl.lproj/Interface.strings delete mode 100644 WatchApp/pt-BR.lproj/InfoPlist.strings delete mode 100644 WatchApp/pt-BR.lproj/Interface.strings delete mode 100644 WatchApp/ro.lproj/InfoPlist.strings delete mode 100644 WatchApp/ro.lproj/Interface.strings delete mode 100644 WatchApp/ru.lproj/InfoPlist.strings delete mode 100644 WatchApp/ru.lproj/Interface.strings delete mode 100644 WatchApp/sk.lproj/InfoPlist.strings delete mode 100644 WatchApp/sk.lproj/Interface.strings delete mode 100644 WatchApp/sv.lproj/InfoPlist.strings delete mode 100644 WatchApp/sv.lproj/Interface.strings delete mode 100644 WatchApp/tr.lproj/InfoPlist.strings delete mode 100644 WatchApp/tr.lproj/Interface.strings delete mode 100644 WatchApp/vi.lproj/InfoPlist.strings delete mode 100644 WatchApp/vi.lproj/Interface.strings delete mode 100644 WatchApp/zh-Hans.lproj/Interface.strings diff --git a/Loop Intent Extension/InfoPlist.xcstrings b/Loop Intent Extension/InfoPlist.xcstrings new file mode 100644 index 0000000000..5e570491f1 --- /dev/null +++ b/Loop Intent Extension/InfoPlist.xcstrings @@ -0,0 +1,198 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "comment" : "Bundle display name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent-udvidelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Absichts Erweiterung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop Intent Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensión de Intención de Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estensione dell'intento di Loop" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utvidelse av Loop intensjon" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extensie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensie Intent Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü Amaç Uzantısı" + } + } + } + }, + "CFBundleName" : { + "comment" : "Bundle name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent-udvidelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Absichts Erweiterung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop Intent Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensión de Intención de Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estensione dell'intento di Loop" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utvidelse av Loop intensjon" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extensie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensie Intent Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Intent Extension" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü Amaç Uzantısı" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Intent Extension/Localizable.xcstrings b/Loop Intent Extension/Localizable.xcstrings new file mode 100644 index 0000000000..1673e78542 --- /dev/null +++ b/Loop Intent Extension/Localizable.xcstrings @@ -0,0 +1,125 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "%1$@ v%2$@" : { + "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ версии %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Intent Extension/ar.lproj/Localizable.strings b/Loop Intent Extension/ar.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/ar.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/da.lproj/InfoPlist.strings b/Loop Intent Extension/da.lproj/InfoPlist.strings deleted file mode 100644 index e1fa874bc4..0000000000 --- a/Loop Intent Extension/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent-udvidelse"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent-udvidelse"; - diff --git a/Loop Intent Extension/da.lproj/Localizable.strings b/Loop Intent Extension/da.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/da.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/de.lproj/InfoPlist.strings b/Loop Intent Extension/de.lproj/InfoPlist.strings deleted file mode 100644 index b26b270e4a..0000000000 --- a/Loop Intent Extension/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Absichts Erweiterung"; - -/* Bundle name */ -"CFBundleName" = "Loop Absichts Erweiterung"; - diff --git a/Loop Intent Extension/de.lproj/Localizable.strings b/Loop Intent Extension/de.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/de.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/es.lproj/InfoPlist.strings b/Loop Intent Extension/es.lproj/InfoPlist.strings deleted file mode 100644 index 0ddf6e188b..0000000000 --- a/Loop Intent Extension/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Extensión de Intención de Loop"; - -/* Bundle name */ -"CFBundleName" = "Extensión de Intención de Loop"; - diff --git a/Loop Intent Extension/es.lproj/Localizable.strings b/Loop Intent Extension/es.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/es.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/fi.lproj/InfoPlist.strings b/Loop Intent Extension/fi.lproj/InfoPlist.strings deleted file mode 100644 index 7dba838e53..0000000000 --- a/Loop Intent Extension/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extension"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extension"; - diff --git a/Loop Intent Extension/fi.lproj/Localizable.strings b/Loop Intent Extension/fi.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/fi.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/fr.lproj/InfoPlist.strings b/Loop Intent Extension/fr.lproj/InfoPlist.strings deleted file mode 100644 index 7dba838e53..0000000000 --- a/Loop Intent Extension/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extension"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extension"; - diff --git a/Loop Intent Extension/fr.lproj/Localizable.strings b/Loop Intent Extension/fr.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/fr.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/he.lproj/InfoPlist.strings b/Loop Intent Extension/he.lproj/InfoPlist.strings deleted file mode 100644 index 7dba838e53..0000000000 --- a/Loop Intent Extension/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extension"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extension"; - diff --git a/Loop Intent Extension/he.lproj/Localizable.strings b/Loop Intent Extension/he.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/he.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/it.lproj/InfoPlist.strings b/Loop Intent Extension/it.lproj/InfoPlist.strings deleted file mode 100644 index d7b1b818ad..0000000000 --- a/Loop Intent Extension/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Estensione dell'intento di Loop"; - -/* Bundle name */ -"CFBundleName" = "Estensione dell'intento di Loop"; - diff --git a/Loop Intent Extension/it.lproj/Localizable.strings b/Loop Intent Extension/it.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/it.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/ja.lproj/Localizable.strings b/Loop Intent Extension/ja.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/ja.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/nb.lproj/InfoPlist.strings b/Loop Intent Extension/nb.lproj/InfoPlist.strings deleted file mode 100644 index 359db83e9d..0000000000 --- a/Loop Intent Extension/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Utvidelse av Loop intensjon"; - -/* Bundle name */ -"CFBundleName" = "Utvidelse av Loop intensjon"; - diff --git a/Loop Intent Extension/nb.lproj/Localizable.strings b/Loop Intent Extension/nb.lproj/Localizable.strings deleted file mode 100644 index 0039fc241d..0000000000 --- a/Loop Intent Extension/nb.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - diff --git a/Loop Intent Extension/nl.lproj/InfoPlist.strings b/Loop Intent Extension/nl.lproj/InfoPlist.strings deleted file mode 100644 index 7e45d4d58b..0000000000 --- a/Loop Intent Extension/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extensie"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extensie"; - diff --git a/Loop Intent Extension/nl.lproj/Localizable.strings b/Loop Intent Extension/nl.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/nl.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/pl.lproj/InfoPlist.strings b/Loop Intent Extension/pl.lproj/InfoPlist.strings deleted file mode 100644 index 7dba838e53..0000000000 --- a/Loop Intent Extension/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extension"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extension"; - diff --git a/Loop Intent Extension/pl.lproj/Localizable.strings b/Loop Intent Extension/pl.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/pl.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/pt-BR.lproj/Localizable.strings b/Loop Intent Extension/pt-BR.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/ro.lproj/InfoPlist.strings b/Loop Intent Extension/ro.lproj/InfoPlist.strings deleted file mode 100644 index a9ddd00908..0000000000 --- a/Loop Intent Extension/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Extensie Intent Loop"; - -/* Bundle name */ -"CFBundleName" = "Extensie Intent Loop"; - diff --git a/Loop Intent Extension/ro.lproj/Localizable.strings b/Loop Intent Extension/ro.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/ro.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/ru.lproj/InfoPlist.strings b/Loop Intent Extension/ru.lproj/InfoPlist.strings deleted file mode 100644 index 7dba838e53..0000000000 --- a/Loop Intent Extension/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extension"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extension"; - diff --git a/Loop Intent Extension/ru.lproj/Localizable.strings b/Loop Intent Extension/ru.lproj/Localizable.strings deleted file mode 100644 index 223c5d88a8..0000000000 --- a/Loop Intent Extension/ru.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ версии %2$@"; - diff --git a/Loop Intent Extension/sk.lproj/Localizable.strings b/Loop Intent Extension/sk.lproj/Localizable.strings deleted file mode 100644 index 0039fc241d..0000000000 --- a/Loop Intent Extension/sk.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - diff --git a/Loop Intent Extension/sv.lproj/InfoPlist.strings b/Loop Intent Extension/sv.lproj/InfoPlist.strings deleted file mode 100644 index 7dba838e53..0000000000 --- a/Loop Intent Extension/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Intent Extension"; - -/* Bundle name */ -"CFBundleName" = "Loop Intent Extension"; - diff --git a/Loop Intent Extension/sv.lproj/Localizable.strings b/Loop Intent Extension/sv.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/sv.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/tr.lproj/InfoPlist.strings b/Loop Intent Extension/tr.lproj/InfoPlist.strings deleted file mode 100644 index 64bff70e71..0000000000 --- a/Loop Intent Extension/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Döngü Amaç Uzantısı"; - -/* Bundle name */ -"CFBundleName" = "Döngü Amaç Uzantısı"; - diff --git a/Loop Intent Extension/tr.lproj/Localizable.strings b/Loop Intent Extension/tr.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/tr.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Intent Extension/vi.lproj/Localizable.strings b/Loop Intent Extension/vi.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/Loop Intent Extension/vi.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/Loop Status Extension/Base.lproj/Localizable.strings b/Loop Status Extension/Base.lproj/Localizable.strings deleted file mode 100644 index d21551845d..0000000000 --- a/Loop Status Extension/Base.lproj/Localizable.strings +++ /dev/null @@ -1,5 +0,0 @@ -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventually %1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; diff --git a/Loop Status Extension/InfoPlist.xcstrings b/Loop Status Extension/InfoPlist.xcstrings new file mode 100644 index 0000000000..4d9d18189d --- /dev/null +++ b/Loop Status Extension/InfoPlist.xcstrings @@ -0,0 +1,228 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "comment" : "Bundle display name", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + } + } + }, + "CFBundleName" : { + "comment" : "Bundle name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop-statusudvidelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status-Erweiterung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop Status Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensión de Estado de Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extension" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extension" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extension" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estensione dello stato di funzionamento di Loop" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utvidelse av Loop status" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extensie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extension" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensie stare Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extension" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Extension" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Durum Uzantısı" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings new file mode 100644 index 0000000000..f718ea939c --- /dev/null +++ b/Loop Status Extension/Localizable.xcstrings @@ -0,0 +1,1722 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "? g" : { + "comment" : "Displayed in the widget when the amount of active carbs cannot be determined.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "? gr" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "? г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "? gr" + } + } + } + }, + "? U" : { + "comment" : "Displayed in the widget when the amount of active insulin cannot be determined.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "? E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "? IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "? E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "? E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "? J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "? ед." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "? j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "? E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "? Ü" + } + } + } + }, + "%1$@" : { + "comment" : "The subtitle format describing the grams of active carbs. (1: localized carb value description)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + } + } + }, + "%1$@ U" : { + "comment" : "The subtitle format describing units of active insulin. (1: localized insulin value description)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ü" + } + } + } + }, + "%1$@ v%2$@" : { + "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ версии %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + } + } + }, + "Active Carbs" : { + "comment" : "Widget label title describing the active carbs", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "كارب النشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive KH" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos Activos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. hiilari" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides actifs" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פחמימות פעילות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati attivi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywne węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos Ativos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați activi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активные углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívne sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiva kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif Karb." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Carbs còn hoạt động" + } + } + } + }, + "Active Insulin" : { + "comment" : "Widget label title describing the active insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنسولين نشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktives Insulin" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina activa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. insuliini" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline active" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אינסולין פעיל" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存インスリン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Insuline" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywna insulina" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Ativa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină activă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активный инсулин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívny inzulín" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif İnsülin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Insulin còn hoạt động" + } + } + } + }, + "dB" : { + "comment" : "The short unit display string for decibles", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "дБ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + } + } + }, + "Eventually %1$@" : { + "comment" : "The subtitle format describing eventual glucose. (1: localized glucose value description)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "متوقع %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Med tiden %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voraussichtlich %1$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventually %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventualmente %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennuste %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalement %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בדרך ל-%1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alla fine %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想 %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Omsider %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uiteindelijk %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Docelowo %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventualmente %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventually %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В конечном итоге %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nihai KŞ %1$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kết quả là %1$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终 %1$@" + } + } + } + }, + "g" : { + "comment" : "The short unit display string for grams", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + } + } + }, + "IOB %1$@ U" : { + "comment" : "The subtitle format describing units of active insulin. (1: localized insulin value description)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنسولين نشط %1$@ وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ IE" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "AİNS %1$@ Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ U" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB %1$@ 单位" + } + } + } + }, + "mg/dL" : { + "comment" : "The short unit display string for milligrams of glucose per decilter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + } + } + }, + "mmol/L" : { + "comment" : "The short unit display string for millimoles of glucose per liter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ммоль/л" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + } + } + }, + "QUANTITY_VALUE_AND_UNIT" : { + "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "U" : { + "comment" : "The short unit display string for international units of insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Status Extension/ar.lproj/InfoPlist.strings b/Loop Status Extension/ar.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/ar.lproj/Localizable.strings b/Loop Status Extension/ar.lproj/Localizable.strings deleted file mode 100644 index 5935bf3282..0000000000 --- a/Loop Status Extension/ar.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "كارب النشط"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "أنسولين نشط"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "متوقع %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "أنسولين نشط %1$@ وحدة"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "وحدة"; - diff --git a/Loop Status Extension/ar.lproj/MainInterface.strings b/Loop Status Extension/ar.lproj/MainInterface.strings deleted file mode 100644 index 23ec628122..0000000000 --- a/Loop Status Extension/ar.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "كارب النشط"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "أنسولين نشط"; - diff --git a/Loop Status Extension/da.lproj/InfoPlist.strings b/Loop Status Extension/da.lproj/InfoPlist.strings deleted file mode 100644 index ffe563a634..0000000000 --- a/Loop Status Extension/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop-statusudvidelse"; - diff --git a/Loop Status Extension/da.lproj/Localizable.strings b/Loop Status Extension/da.lproj/Localizable.strings deleted file mode 100644 index 4388492489..0000000000 --- a/Loop Status Extension/da.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktive kulhydrater"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktivt insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Med tiden %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/da.lproj/MainInterface.strings b/Loop Status Extension/da.lproj/MainInterface.strings deleted file mode 100644 index ca088fa3ce..0000000000 --- a/Loop Status Extension/da.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktive kulhydrater"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktivt insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/de.lproj/InfoPlist.strings b/Loop Status Extension/de.lproj/InfoPlist.strings deleted file mode 100644 index 8a7abf7ee4..0000000000 --- a/Loop Status Extension/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status-Erweiterung"; - diff --git a/Loop Status Extension/de.lproj/Localizable.strings b/Loop Status Extension/de.lproj/Localizable.strings deleted file mode 100644 index 196ef74140..0000000000 --- a/Loop Status Extension/de.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? IE"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ IE"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktive KH"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktives Insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Voraussichtlich %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ IE"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "IE"; - diff --git a/Loop Status Extension/de.lproj/MainInterface.strings b/Loop Status Extension/de.lproj/MainInterface.strings deleted file mode 100644 index fb0ae387e6..0000000000 --- a/Loop Status Extension/de.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktive KH"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktives Insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 IE"; - diff --git a/Loop Status Extension/en.lproj/Localizable.strings b/Loop Status Extension/en.lproj/Localizable.strings deleted file mode 100644 index d21551845d..0000000000 --- a/Loop Status Extension/en.lproj/Localizable.strings +++ /dev/null @@ -1,5 +0,0 @@ -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventually %1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; diff --git a/Loop Status Extension/en.lproj/MainInterface.strings b/Loop Status Extension/en.lproj/MainInterface.strings deleted file mode 100644 index 3a52b2e5e2..0000000000 --- a/Loop Status Extension/en.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Eventually 92 mg/dL"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "IOB 1.0 U"; - diff --git a/Loop Status Extension/es.lproj/InfoPlist.strings b/Loop Status Extension/es.lproj/InfoPlist.strings deleted file mode 100644 index 029eaa2d2a..0000000000 --- a/Loop Status Extension/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Extensión de Estado de Loop"; - diff --git a/Loop Status Extension/es.lproj/Localizable.strings b/Loop Status Extension/es.lproj/Localizable.strings deleted file mode 100644 index a893db7399..0000000000 --- a/Loop Status Extension/es.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? gr"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carbohidratos Activos"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulina activa"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventualmente %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/es.lproj/MainInterface.strings b/Loop Status Extension/es.lproj/MainInterface.strings deleted file mode 100644 index 5354b0e9c3..0000000000 --- a/Loop Status Extension/es.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carbohidratos Activos"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 gr"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulina activa"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/fi.lproj/InfoPlist.strings b/Loop Status Extension/fi.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/fi.lproj/Localizable.strings b/Loop Status Extension/fi.lproj/Localizable.strings deleted file mode 100644 index af5d51baf2..0000000000 --- a/Loop Status Extension/fi.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Akt. hiilari"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Akt. insuliini"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Ennuste %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/fi.lproj/MainInterface.strings b/Loop Status Extension/fi.lproj/MainInterface.strings deleted file mode 100644 index a1e847d468..0000000000 --- a/Loop Status Extension/fi.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Akt. hiilari"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Akt. insuliini"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/fr.lproj/InfoPlist.strings b/Loop Status Extension/fr.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/fr.lproj/Localizable.strings b/Loop Status Extension/fr.lproj/Localizable.strings deleted file mode 100644 index 1c6e8dfb18..0000000000 --- a/Loop Status Extension/fr.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Glucides actifs"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insuline active"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Finalement %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/fr.lproj/MainInterface.strings b/Loop Status Extension/fr.lproj/MainInterface.strings deleted file mode 100644 index 4d13ebda2d..0000000000 --- a/Loop Status Extension/fr.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Glucides actifs"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insuline active"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/he.lproj/InfoPlist.strings b/Loop Status Extension/he.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/he.lproj/Localizable.strings b/Loop Status Extension/he.lproj/Localizable.strings deleted file mode 100644 index 27db2c87a8..0000000000 --- a/Loop Status Extension/he.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "U %1$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "פחמימות פעילות"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "אינסולין פעיל"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "בדרך ל-%1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/he.lproj/MainInterface.strings b/Loop Status Extension/he.lproj/MainInterface.strings deleted file mode 100644 index 7bb2ea5747..0000000000 --- a/Loop Status Extension/he.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "פחמימות פעילות"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "אינסולין פעיל"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "U 0"; - diff --git a/Loop Status Extension/it.lproj/InfoPlist.strings b/Loop Status Extension/it.lproj/InfoPlist.strings deleted file mode 100644 index da11eb5a77..0000000000 --- a/Loop Status Extension/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Estensione dello stato di funzionamento di Loop"; - diff --git a/Loop Status Extension/it.lproj/Localizable.strings b/Loop Status Extension/it.lproj/Localizable.strings deleted file mode 100644 index 70580ce441..0000000000 --- a/Loop Status Extension/it.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carboidrati attivi"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulina attiva"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Alla fine %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/it.lproj/MainInterface.strings b/Loop Status Extension/it.lproj/MainInterface.strings deleted file mode 100644 index 665d9a287d..0000000000 --- a/Loop Status Extension/it.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carboidrati attivi"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulina attiva"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/ja.lproj/InfoPlist.strings b/Loop Status Extension/ja.lproj/InfoPlist.strings deleted file mode 100644 index bb232bb4cc..0000000000 --- a/Loop Status Extension/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "ループ"; - diff --git a/Loop Status Extension/ja.lproj/Localizable.strings b/Loop Status Extension/ja.lproj/Localizable.strings deleted file mode 100644 index d328a81f35..0000000000 --- a/Loop Status Extension/ja.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "残存糖質"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "残存インスリン"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "予想 %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/ja.lproj/MainInterface.strings b/Loop Status Extension/ja.lproj/MainInterface.strings deleted file mode 100644 index 2407f97e64..0000000000 --- a/Loop Status Extension/ja.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "残存糖質"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "残存インスリン"; - diff --git a/Loop Status Extension/mul.lproj/MainInterface.xcstrings b/Loop Status Extension/mul.lproj/MainInterface.xcstrings new file mode 100644 index 0000000000..de6dcf9dcd --- /dev/null +++ b/Loop Status Extension/mul.lproj/MainInterface.xcstrings @@ -0,0 +1,472 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "9iF-xY-Bh4.text" : { + "comment" : "Class = \"UILabel\"; text = \"Active Carbs\"; ObjectID = \"9iF-xY-Bh4\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "كارب النشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive KH" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventually 92 mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos Activos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. hiilari" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides actifs" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פחמימות פעילות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati attivi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywne węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos Ativos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați activi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активные углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívne sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiva kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif Karb." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Carbs còn hoạt động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终血糖为92 毫克/分升" + } + } + } + }, + "dPp-lJ-5sh.text" : { + "comment" : "Class = \"UILabel\"; text = \"0 g\"; ObjectID = \"dPp-lJ-5sh\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "0 g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 gr" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 gr" + } + } + } + }, + "UPi-dG-yYD.text" : { + "comment" : "Class = \"UILabel\"; text = \"Active Insulin\"; ObjectID = \"UPi-dG-yYD\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنسولين نشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktives Insulin" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB 1.0 U" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina activa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. insuliini" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline active" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אינסולין פעיל" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存インスリン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Insuline" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywna insulina" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Ativa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină activă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активный инсулин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívny inzulín" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif İnsülin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Insulin còn hoạt động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOB 1.0 单位" + } + } + } + }, + "Vgf-p1-2QP.text" : { + "comment" : "Class = \"UILabel\"; text = \"0 U\"; ObjectID = \"Vgf-p1-2QP\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 IE" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "0 U" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U 0" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 ед." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 Ü" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Status Extension/nb.lproj/InfoPlist.strings b/Loop Status Extension/nb.lproj/InfoPlist.strings deleted file mode 100644 index 24d50f5390..0000000000 --- a/Loop Status Extension/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Utvidelse av Loop status"; - diff --git a/Loop Status Extension/nb.lproj/Localizable.strings b/Loop Status Extension/nb.lproj/Localizable.strings deleted file mode 100644 index 2e4a88ce5f..0000000000 --- a/Loop Status Extension/nb.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktive karbohydrater"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktivt insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Omsider %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/nb.lproj/MainInterface.strings b/Loop Status Extension/nb.lproj/MainInterface.strings deleted file mode 100644 index 7942de07be..0000000000 --- a/Loop Status Extension/nb.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktive karbohydrater"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktivt insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/nl.lproj/InfoPlist.strings b/Loop Status Extension/nl.lproj/InfoPlist.strings deleted file mode 100644 index 62e5156f17..0000000000 --- a/Loop Status Extension/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extensie"; - diff --git a/Loop Status Extension/nl.lproj/Localizable.strings b/Loop Status Extension/nl.lproj/Localizable.strings deleted file mode 100644 index b5f9439380..0000000000 --- a/Loop Status Extension/nl.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Actieve Koolhydraten"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Actieve Insuline"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Uiteindelijk %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/nl.lproj/MainInterface.strings b/Loop Status Extension/nl.lproj/MainInterface.strings deleted file mode 100644 index 3300ee0aec..0000000000 --- a/Loop Status Extension/nl.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Actieve Koolhydraten"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Actieve Insuline"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/pl.lproj/InfoPlist.strings b/Loop Status Extension/pl.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/pl.lproj/Localizable.strings b/Loop Status Extension/pl.lproj/Localizable.strings deleted file mode 100644 index 9f9cab187f..0000000000 --- a/Loop Status Extension/pl.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? J"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ J"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktywne węglowodany"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktywna insulina"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Docelowo %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ J"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "J"; - diff --git a/Loop Status Extension/pl.lproj/MainInterface.strings b/Loop Status Extension/pl.lproj/MainInterface.strings deleted file mode 100644 index 137aac2c3c..0000000000 --- a/Loop Status Extension/pl.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktywne węglowodany"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktywna insulina"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 J"; - diff --git a/Loop Status Extension/pt-BR.lproj/InfoPlist.strings b/Loop Status Extension/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/pt-BR.lproj/Localizable.strings b/Loop Status Extension/pt-BR.lproj/Localizable.strings deleted file mode 100644 index ed1ddc8056..0000000000 --- a/Loop Status Extension/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carboidratos Ativos"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulina Ativa"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventualmente %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/pt-BR.lproj/MainInterface.strings b/Loop Status Extension/pt-BR.lproj/MainInterface.strings deleted file mode 100644 index 09c2331507..0000000000 --- a/Loop Status Extension/pt-BR.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carboidratos Ativos"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulina Ativa"; - diff --git a/Loop Status Extension/ro.lproj/InfoPlist.strings b/Loop Status Extension/ro.lproj/InfoPlist.strings deleted file mode 100644 index 811f60ffd2..0000000000 --- a/Loop Status Extension/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Extensie stare Loop"; - diff --git a/Loop Status Extension/ro.lproj/Localizable.strings b/Loop Status Extension/ro.lproj/Localizable.strings deleted file mode 100644 index e749a36e8e..0000000000 --- a/Loop Status Extension/ro.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carbohidrați activi"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulină activă"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventually %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@%2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/ro.lproj/MainInterface.strings b/Loop Status Extension/ro.lproj/MainInterface.strings deleted file mode 100644 index 52df0e4c8c..0000000000 --- a/Loop Status Extension/ro.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carbohidrați activi"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulină activă"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/ru.lproj/InfoPlist.strings b/Loop Status Extension/ru.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/ru.lproj/Localizable.strings b/Loop Status Extension/ru.lproj/Localizable.strings deleted file mode 100644 index 590b1893da..0000000000 --- a/Loop Status Extension/ru.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? г"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? ед."; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ Ед"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ версии %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Активные углеводы"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Активный инсулин"; - -/* The short unit display string for decibles */ -"dB" = "дБ"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "В конечном итоге %1$@"; - -/* The short unit display string for grams */ -"g" = "г"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ ед"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "мг/дл"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "ммоль/л"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "ед"; - diff --git a/Loop Status Extension/ru.lproj/MainInterface.strings b/Loop Status Extension/ru.lproj/MainInterface.strings deleted file mode 100644 index 7a44069cbe..0000000000 --- a/Loop Status Extension/ru.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Активные углеводы"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 г"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Активный инсулин"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 ед."; - diff --git a/Loop Status Extension/sk.lproj/InfoPlist.strings b/Loop Status Extension/sk.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/sk.lproj/Localizable.strings b/Loop Status Extension/sk.lproj/Localizable.strings deleted file mode 100644 index f7fe0850f1..0000000000 --- a/Loop Status Extension/sk.lproj/Localizable.strings +++ /dev/null @@ -1,42 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? j"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%@ j"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktívne sacharidy"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktívny inzulín"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ j"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "j"; - diff --git a/Loop Status Extension/sk.lproj/MainInterface.strings b/Loop Status Extension/sk.lproj/MainInterface.strings deleted file mode 100644 index e249f99412..0000000000 --- a/Loop Status Extension/sk.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktívne sacharidy"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktívny inzulín"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 j"; - diff --git a/Loop Status Extension/sv.lproj/InfoPlist.strings b/Loop Status Extension/sv.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/sv.lproj/Localizable.strings b/Loop Status Extension/sv.lproj/Localizable.strings deleted file mode 100644 index fb3f8b00e7..0000000000 --- a/Loop Status Extension/sv.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktiva kolhydrater"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktivt insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Förväntat %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/sv.lproj/MainInterface.strings b/Loop Status Extension/sv.lproj/MainInterface.strings deleted file mode 100644 index afc966ed37..0000000000 --- a/Loop Status Extension/sv.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktiva kolhydrater"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktivt insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/tr.lproj/InfoPlist.strings b/Loop Status Extension/tr.lproj/InfoPlist.strings deleted file mode 100644 index a67e46ff7e..0000000000 --- a/Loop Status Extension/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Durum Uzantısı"; - diff --git a/Loop Status Extension/tr.lproj/Localizable.strings b/Loop Status Extension/tr.lproj/Localizable.strings deleted file mode 100644 index 0f5ebe9125..0000000000 --- a/Loop Status Extension/tr.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? gr"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? Ü"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ Ü"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktif Karb."; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktif İnsülin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Nihai KŞ %1$@"; - -/* The short unit display string for grams */ -"g" = "gr"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "AİNS %1$@ Ü"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "Ü"; - diff --git a/Loop Status Extension/tr.lproj/MainInterface.strings b/Loop Status Extension/tr.lproj/MainInterface.strings deleted file mode 100644 index de7b3fc545..0000000000 --- a/Loop Status Extension/tr.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktif Karb."; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 gr"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktif İnsülin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 Ü"; - diff --git a/Loop Status Extension/vi.lproj/InfoPlist.strings b/Loop Status Extension/vi.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/vi.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/vi.lproj/Localizable.strings b/Loop Status Extension/vi.lproj/Localizable.strings deleted file mode 100644 index a0b94d6a7f..0000000000 --- a/Loop Status Extension/vi.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Lượng Carbs còn hoạt động"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Lượng Insulin còn hoạt động"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Kết quả là %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/vi.lproj/MainInterface.strings b/Loop Status Extension/vi.lproj/MainInterface.strings deleted file mode 100644 index c766b97e1b..0000000000 --- a/Loop Status Extension/vi.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Lượng Carbs còn hoạt động"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Lượng Insulin còn hoạt động"; - diff --git a/Loop Status Extension/zh-Hans.lproj/Localizable.strings b/Loop Status Extension/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index b1d62cfb8c..0000000000 --- a/Loop Status Extension/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "最终 %1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ 单位"; - diff --git a/Loop Status Extension/zh-Hans.lproj/MainInterface.strings b/Loop Status Extension/zh-Hans.lproj/MainInterface.strings deleted file mode 100644 index 2a063e6084..0000000000 --- a/Loop Status Extension/zh-Hans.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "最终血糖为92 毫克/分升"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "IOB 1.0 单位"; - diff --git a/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings b/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings new file mode 100644 index 0000000000..942c95db3d --- /dev/null +++ b/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings @@ -0,0 +1,240 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "comment" : "Bundle display name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop Widgets" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Widgets" + } + } + } + }, + "CFBundleName" : { + "comment" : "Bundle name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop Widget Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopWidgetExtension" + } + } + } + }, + "NSHumanReadableCopyright" : { + "comment" : "Copyright (human-readable)", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 LoopKit Authors. All rights reserved." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 LoopKit-Autoren. Alle Rechte vorbehalten." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Copyright © 2022 LoopKit Authors. All rights reserved." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 Autores del LoopKit. Todos los derechos reservados." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 LoopKit Authors. Tous droits réservés." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 Autori di LoopKit. Tutti i diritti riservati." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 LoopKit Authors. Alle rettigheter forbeholdt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 LoopKit Auteurs. Alle rechten voorbehouden." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2023 Autorzy LoopKit. Wszelkie prawa zastrzeżone." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 Autori LoopKit. Toate drepturile rezervate." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Copyright © 2022 LoopKit Authors. Все права защищены." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Telif Hakkı © 2022 LoopKit Yazarları. Tüm hakları Saklıdır." + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings new file mode 100644 index 0000000000..9b801bad0e --- /dev/null +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -0,0 +1,1478 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "---" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "--" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "-U" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "-E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "-IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "-U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "-U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "-U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "-E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "-E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "-J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "-U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "-Ед" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "-Ü" + } + } + } + }, + "??" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "??" + } + } + } + }, + "%@" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + } + } + }, + "%@ U" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + } + } + }, + "%1$@ v%2$@" : { + "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ против %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + } + } + }, + "dB" : { + "comment" : "The short unit display string for decibles", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "дБ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + } + } + }, + "Eventual" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventuel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventuell" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventual" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Éventuel" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventuale" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventuell" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uiteindelijk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Możliwy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventual" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В конечном итоге" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nihai" + } + } + } + }, + "g" : { + "comment" : "The short unit display string for grams", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + } + } + }, + "Loop Status Widget" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widget til loop-status" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Widget" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widget de Estado de Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widget d'état de Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widget di stato del ciclo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Status Widget" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Widżet Stanu Pętli" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensie stare Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Виджет состояния петли" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü Durumu Widget'ı" + } + } + } + }, + "mg/dL" : { + "comment" : "The short unit display string for milligrams of glucose per decilter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + } + } + }, + "mmol/L" : { + "comment" : "The short unit display string for millimoles of glucose per liter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + } + } + }, + "QUANTITY_VALUE_AND_UNIT" : { + "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "See your current blood glucose and insulin delivery." : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se dit nuværende blodsukker og insulindosering." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sehen Sie sich Ihre aktuelle Blutzucker- und Insulinabgabe an." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mira tu glucosa en sangre actual y la administración de insulina." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voir votre glycémie actuelle et votre administration d'insuline." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vedi la tua attuale glicemia e l'erogazione d'insulina." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se ditt nåværende blodsukker- og insulintilførsel." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zie je huidige bloedglucose en insulinetoediening." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zobacz aktualną dawkę glukozy i insuliny we krwi." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vedeți nivelul actual al glicemiei și al administrării de insulină." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Смотрите текущий уровень глюкозы в крови и ввод инсулина." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mevcut kan şekerinizi ve insülin iletiminizi görün." + } + } + } + }, + "U" : { + "comment" : "The short unit display string for international units of insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop Widget Extension/Bootstrap/ar.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/ar.lproj/Localizable.strings deleted file mode 100644 index 1b5e22003d..0000000000 --- a/Loop Widget Extension/Bootstrap/ar.lproj/Localizable.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "وحدة"; - diff --git a/Loop Widget Extension/Bootstrap/da.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/da.lproj/InfoPlist.strings deleted file mode 100644 index 3f161a98cf..0000000000 --- a/Loop Widget Extension/Bootstrap/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 LoopKit Authors. All rights reserved."; - diff --git a/Loop Widget Extension/Bootstrap/da.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/da.lproj/Localizable.strings deleted file mode 100644 index 9fa3086f1a..0000000000 --- a/Loop Widget Extension/Bootstrap/da.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-E"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Eventuel"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Widget til loop-status"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Se dit nuværende blodsukker og insulindosering."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Widget Extension/Bootstrap/de.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/de.lproj/InfoPlist.strings deleted file mode 100644 index 8269e4ffde..0000000000 --- a/Loop Widget Extension/Bootstrap/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 LoopKit-Autoren. Alle Rechte vorbehalten."; - diff --git a/Loop Widget Extension/Bootstrap/de.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/de.lproj/Localizable.strings deleted file mode 100644 index 825d7e7e30..0000000000 --- a/Loop Widget Extension/Bootstrap/de.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-IE"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ IE"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Eventuell"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Loop Status Widget"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Sehen Sie sich Ihre aktuelle Blutzucker- und Insulinabgabe an."; - -/* The short unit display string for international units of insulin */ -"U" = "IE"; - diff --git a/Loop Widget Extension/Bootstrap/es.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/es.lproj/InfoPlist.strings deleted file mode 100644 index a47299fe25..0000000000 --- a/Loop Widget Extension/Bootstrap/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 Autores del LoopKit. Todos los derechos reservados."; - diff --git a/Loop Widget Extension/Bootstrap/es.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/es.lproj/Localizable.strings deleted file mode 100644 index 10a11e8f2a..0000000000 --- a/Loop Widget Extension/Bootstrap/es.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-U"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Eventual"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Widget de Estado de Loop"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Mira tu glucosa en sangre actual y la administración de insulina."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/fi.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/fi.lproj/Localizable.strings deleted file mode 100644 index 01fd5fd8c8..0000000000 --- a/Loop Widget Extension/Bootstrap/fi.lproj/Localizable.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/fr.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/fr.lproj/InfoPlist.strings deleted file mode 100644 index 1daa5ab654..0000000000 --- a/Loop Widget Extension/Bootstrap/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 LoopKit Authors. Tous droits réservés."; - diff --git a/Loop Widget Extension/Bootstrap/fr.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/fr.lproj/Localizable.strings deleted file mode 100644 index e1adf8e712..0000000000 --- a/Loop Widget Extension/Bootstrap/fr.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-U"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Éventuel"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Widget d'état de Loop"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Voir votre glycémie actuelle et votre administration d'insuline."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/he.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/he.lproj/Localizable.strings deleted file mode 100644 index 45356883ff..0000000000 --- a/Loop Widget Extension/Bootstrap/he.lproj/Localizable.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/it.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/it.lproj/InfoPlist.strings deleted file mode 100644 index b134818978..0000000000 --- a/Loop Widget Extension/Bootstrap/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 Autori di LoopKit. Tutti i diritti riservati."; - diff --git a/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings deleted file mode 100644 index f67f3f6c70..0000000000 --- a/Loop Widget Extension/Bootstrap/it.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-U"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Eventuale"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Widget di stato del ciclo"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Vedi la tua attuale glicemia e l'erogazione d'insulina."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/ja.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/ja.lproj/Localizable.strings deleted file mode 100644 index 45356883ff..0000000000 --- a/Loop Widget Extension/Bootstrap/ja.lproj/Localizable.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/nb.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/nb.lproj/InfoPlist.strings deleted file mode 100644 index ecf320a892..0000000000 --- a/Loop Widget Extension/Bootstrap/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 LoopKit Authors. Alle rettigheter forbeholdt."; - diff --git a/Loop Widget Extension/Bootstrap/nb.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/nb.lproj/Localizable.strings deleted file mode 100644 index 2b15f8378d..0000000000 --- a/Loop Widget Extension/Bootstrap/nb.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-E"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Eventuell"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Loop Status Widget"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Se ditt nåværende blodsukker- og insulintilførsel."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Widget Extension/Bootstrap/nl.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/nl.lproj/InfoPlist.strings deleted file mode 100644 index f15e67c2c4..0000000000 --- a/Loop Widget Extension/Bootstrap/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 LoopKit Auteurs. Alle rechten voorbehouden."; - diff --git a/Loop Widget Extension/Bootstrap/nl.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/nl.lproj/Localizable.strings deleted file mode 100644 index 3d99d1bbd0..0000000000 --- a/Loop Widget Extension/Bootstrap/nl.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "--"; - -/* No comment provided by engineer. */ -"-U" = "-E"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Uiteindelijk"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Loop"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Zie je huidige bloedglucose en insulinetoediening."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Widget Extension/Bootstrap/pl.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/pl.lproj/InfoPlist.strings deleted file mode 100644 index 52871672dc..0000000000 --- a/Loop Widget Extension/Bootstrap/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2023 Autorzy LoopKit. Wszelkie prawa zastrzeżone."; - diff --git a/Loop Widget Extension/Bootstrap/pl.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/pl.lproj/Localizable.strings deleted file mode 100644 index ebb661750e..0000000000 --- a/Loop Widget Extension/Bootstrap/pl.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-J"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ J"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Możliwy"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Widżet Stanu Pętli"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Zobacz aktualną dawkę glukozy i insuliny we krwi."; - -/* The short unit display string for international units of insulin */ -"U" = "J"; - diff --git a/Loop Widget Extension/Bootstrap/pt-BR.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/pt-BR.lproj/Localizable.strings deleted file mode 100644 index 45356883ff..0000000000 --- a/Loop Widget Extension/Bootstrap/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/ro.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/ro.lproj/InfoPlist.strings deleted file mode 100644 index 2738895abe..0000000000 --- a/Loop Widget Extension/Bootstrap/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 Autori LoopKit. Toate drepturile rezervate."; - diff --git a/Loop Widget Extension/Bootstrap/ro.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/ro.lproj/Localizable.strings deleted file mode 100644 index 55292e65db..0000000000 --- a/Loop Widget Extension/Bootstrap/ro.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-U"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Eventual"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Extensie stare Loop"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@%2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Vedeți nivelul actual al glicemiei și al administrării de insulină."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Widget Extension/Bootstrap/ru.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/ru.lproj/InfoPlist.strings deleted file mode 100644 index 211700c4f1..0000000000 --- a/Loop Widget Extension/Bootstrap/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Copyright © 2022 LoopKit Authors. Все права защищены."; - diff --git a/Loop Widget Extension/Bootstrap/ru.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/ru.lproj/Localizable.strings deleted file mode 100644 index f00c8af85e..0000000000 --- a/Loop Widget Extension/Bootstrap/ru.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-Ед"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ ед"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ против %2$@"; - -/* The short unit display string for decibles */ -"dB" = "дБ"; - -/* No comment provided by engineer. */ -"Eventual" = "В конечном итоге"; - -/* The short unit display string for grams */ -"g" = "г"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Виджет состояния петли"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "мг/дл"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Смотрите текущий уровень глюкозы в крови и ввод инсулина."; - -/* The short unit display string for international units of insulin */ -"U" = "ед"; - diff --git a/Loop Widget Extension/Bootstrap/sk.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/sk.lproj/Localizable.strings deleted file mode 100644 index c85e705210..0000000000 --- a/Loop Widget Extension/Bootstrap/sk.lproj/Localizable.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* No comment provided by engineer. */ -"%@ U" = "%@ j"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "j"; - diff --git a/Loop Widget Extension/Bootstrap/sv.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/sv.lproj/Localizable.strings deleted file mode 100644 index e3c1e4c52d..0000000000 --- a/Loop Widget Extension/Bootstrap/sv.lproj/Localizable.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Widget Extension/Bootstrap/tr.lproj/InfoPlist.strings b/Loop Widget Extension/Bootstrap/tr.lproj/InfoPlist.strings deleted file mode 100644 index f094095408..0000000000 --- a/Loop Widget Extension/Bootstrap/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop Widgets"; - -/* Bundle name */ -"CFBundleName" = "LoopWidgetExtension"; - -/* Copyright (human-readable) */ -"NSHumanReadableCopyright" = "Telif Hakkı © 2022 LoopKit Yazarları. Tüm hakları Saklıdır."; - diff --git a/Loop Widget Extension/Bootstrap/tr.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/tr.lproj/Localizable.strings deleted file mode 100644 index 0b07c31cb7..0000000000 --- a/Loop Widget Extension/Bootstrap/tr.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* No comment provided by engineer. */ -"---" = "---"; - -/* No comment provided by engineer. */ -"-U" = "-Ü"; - -/* No comment provided by engineer. */ -"??" = "??"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* No comment provided by engineer. */ -"%@ U" = "%@ Ü"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Eventual" = "Nihai"; - -/* The short unit display string for grams */ -"g" = "gr"; - -/* No comment provided by engineer. */ -"Loop Status Widget" = "Döngü Durumu Widget'ı"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* No comment provided by engineer. */ -"See your current blood glucose and insulin delivery." = "Mevcut kan şekerinizi ve insülin iletiminizi görün."; - -/* The short unit display string for international units of insulin */ -"U" = "Ü"; - diff --git a/Loop Widget Extension/Bootstrap/vi.lproj/Localizable.strings b/Loop Widget Extension/Bootstrap/vi.lproj/Localizable.strings deleted file mode 100644 index 45356883ff..0000000000 --- a/Loop Widget Extension/Bootstrap/vi.lproj/Localizable.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* No comment provided by engineer. */ -"%@ U" = "%@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 1181951609..ea2fe09071 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -191,9 +191,6 @@ 43FCEEA9221A615B0013DD30 /* StatusChartsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FCEEA8221A615B0013DD30 /* StatusChartsManager.swift */; }; 43FCEEAD221A66780013DD30 /* DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FCEEAC221A66780013DD30 /* DateFormatter.swift */; }; 43FCEEB1221A863E0013DD30 /* StatusChartsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FCEEB0221A863E0013DD30 /* StatusChartsManager.swift */; }; - 4B60626C287E286000BF8BBB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B60626A287E286000BF8BBB /* Localizable.strings */; }; - 4B60626D287E286000BF8BBB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B60626A287E286000BF8BBB /* Localizable.strings */; }; - 4B67E2C8289B4EDB002D92AF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B67E2C6289B4EDB002D92AF /* InfoPlist.strings */; }; 4F08DE8F1E7BB871006741EA /* CollectionType+Loop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F08DE8E1E7BB871006741EA /* CollectionType+Loop.swift */; }; 4F11D3C020DCBEEC006E072C /* GlucoseBackfillRequestUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F11D3BF20DCBEEC006E072C /* GlucoseBackfillRequestUserInfo.swift */; }; 4F11D3C220DD80B3006E072C /* WatchHistoricalGlucose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F11D3C120DD80B3006E072C /* WatchHistoricalGlucose.swift */; }; @@ -236,14 +233,7 @@ 4FF4D0F81E1725B000846527 /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 434F54561D287FDB002A9274 /* NibLoadable.swift */; }; 4FF4D1001E18374700846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; - 63F5E17C297DDF3900A62D4B /* ckcomplication.strings in Resources */ = {isa = PBXBuildFile; fileRef = 63F5E17A297DDF3900A62D4B /* ckcomplication.strings */; }; 7D23667D21250C7E0028B67D /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D23667C21250C7E0028B67D /* LocalizedString.swift */; }; - 7D7076351FE06EDE004AC8EA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076371FE06EDE004AC8EA /* Localizable.strings */; }; - 7D7076451FE06EE0004AC8EA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076471FE06EE0004AC8EA /* InfoPlist.strings */; }; - 7D70764A1FE06EE1004AC8EA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D70764C1FE06EE1004AC8EA /* Localizable.strings */; }; - 7D70764F1FE06EE1004AC8EA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076511FE06EE1004AC8EA /* InfoPlist.strings */; }; - 7D70765E1FE06EE3004AC8EA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076601FE06EE3004AC8EA /* Localizable.strings */; }; - 7D7076631FE06EE4004AC8EA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076651FE06EE4004AC8EA /* Localizable.strings */; }; 7E69CFFC2A16A77E00203CBD /* ResetLoopManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E69CFFB2A16A77E00203CBD /* ResetLoopManager.swift */; }; 84AA81D32A4A27A3000B658B /* LoopWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AA81D22A4A27A3000B658B /* LoopWidgets.swift */; }; 84AA81D62A4A28AF000B658B /* WidgetBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AA81D52A4A28AF000B658B /* WidgetBackground.swift */; }; @@ -401,12 +391,23 @@ B4E96D5D248A82A2002DABAD /* StatusBarHUDView.xib in Resources */ = {isa = PBXBuildFile; fileRef = B4E96D5C248A82A2002DABAD /* StatusBarHUDView.xib */; }; B4F3D25124AF890C0095CE44 /* BluetoothStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4F3D25024AF890C0095CE44 /* BluetoothStateManager.swift */; }; B4FEEF7D24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4FEEF7C24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift */; }; - C1004DF22981F5B700B8CF94 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1004DF02981F5B700B8CF94 /* InfoPlist.strings */; }; - C1004DF52981F5B700B8CF94 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1004DF32981F5B700B8CF94 /* Localizable.strings */; }; - C1004DF82981F5B700B8CF94 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1004DF62981F5B700B8CF94 /* InfoPlist.strings */; }; + B66D1F212E6A5D6500471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F202E6A5D6500471149 /* InfoPlist.xcstrings */; }; + B66D1F232E6A5D6500471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F222E6A5D6500471149 /* InfoPlist.xcstrings */; }; + B66D1F252E6A5D6500471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F242E6A5D6500471149 /* InfoPlist.xcstrings */; }; + B66D1F272E6A5D6500471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F262E6A5D6500471149 /* Localizable.xcstrings */; }; + B66D1F2B2E6A5D6500471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F2A2E6A5D6500471149 /* Localizable.xcstrings */; }; + B66D1F2D2E6A5D6600471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F2C2E6A5D6500471149 /* Localizable.xcstrings */; }; + B66D1F2F2E6A5D6600471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F2E2E6A5D6600471149 /* InfoPlist.xcstrings */; }; + B66D1F312E6A5D6600471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F302E6A5D6600471149 /* InfoPlist.xcstrings */; }; + B66D1F332E6A5D6600471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F322E6A5D6600471149 /* Localizable.xcstrings */; }; + B66D1F352E6A5D6600471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F342E6A5D6600471149 /* Localizable.xcstrings */; }; + B66D1F372E6A5D6600471149 /* ckcomplication.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F362E6A5D6600471149 /* ckcomplication.xcstrings */; }; + B66D1F392E6A5D6600471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F382E6A5D6600471149 /* InfoPlist.xcstrings */; }; + B66D1F3B2E6A5D6600471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F3A2E6A5D6600471149 /* Localizable.xcstrings */; }; + B66D1F3C2E6A5D6600471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F3A2E6A5D6600471149 /* Localizable.xcstrings */; }; + B66D1F3E2E6A5D6600471149 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F3D2E6A5D6600471149 /* Localizable.xcstrings */; }; + B66D1F402E6A5D6600471149 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = B66D1F3F2E6A5D6600471149 /* InfoPlist.xcstrings */; }; C110888D2A3913C600BA4898 /* BuildDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = C110888C2A3913C600BA4898 /* BuildDetails.swift */; }; - C11613492983096D00777E7C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C11613472983096D00777E7C /* InfoPlist.strings */; }; - C116134C2983096D00777E7C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C116134A2983096D00777E7C /* Localizable.strings */; }; C11B9D5B286778A800500CF8 /* SwiftCharts in Frameworks */ = {isa = PBXBuildFile; productRef = C11B9D5A286778A800500CF8 /* SwiftCharts */; }; C11B9D5E286778D000500CF8 /* LoopKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C11B9D5D286778D000500CF8 /* LoopKitUI.framework */; }; C11B9D62286779C000500CF8 /* MockKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C11B9D60286779C000500CF8 /* MockKit.framework */; }; @@ -465,7 +466,6 @@ C1AD4200256D61E500164DDD /* Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1AD41FF256D61E500164DDD /* Comparable.swift */; }; C1AF062329426300002C1B19 /* ManualGlucoseEntryRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1AF062229426300002C1B19 /* ManualGlucoseEntryRow.swift */; }; C1C660D1252E4DD5009B5C32 /* LoopConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C660D0252E4DD5009B5C32 /* LoopConstants.swift */; }; - C1C73F0D1DE3D0270022FC89 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1C73F0F1DE3D0270022FC89 /* InfoPlist.strings */; }; C1CCF1122858FA900035389C /* LoopCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43D9FFCF21EAE05D00AF44BF /* LoopCore.framework */; }; C1CCF1172858FBAD0035389C /* SwiftCharts in Frameworks */ = {isa = PBXBuildFile; productRef = C1CCF1162858FBAD0035389C /* SwiftCharts */; }; C1D0B6302986D4D90098D215 /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D0B62F2986D4D90098D215 /* LocalizedString.swift */; }; @@ -938,8 +938,6 @@ 43FCEEA8221A615B0013DD30 /* StatusChartsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusChartsManager.swift; sourceTree = ""; }; 43FCEEAC221A66780013DD30 /* DateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatter.swift; sourceTree = ""; }; 43FCEEB0221A863E0013DD30 /* StatusChartsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusChartsManager.swift; sourceTree = ""; }; - 4B60626B287E286000BF8BBB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 4B67E2C7289B4EDB002D92AF /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; 4D3B40021D4A9DFE00BC6334 /* G4ShareSpy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = G4ShareSpy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4F08DE8E1E7BB871006741EA /* CollectionType+Loop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CollectionType+Loop.swift"; sourceTree = ""; }; 4F11D3BF20DCBEEC006E072C /* GlucoseBackfillRequestUserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseBackfillRequestUserInfo.swift; sourceTree = ""; }; @@ -970,90 +968,7 @@ 4FDDD23620DC51DF00D04B16 /* LoopDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopDataManager.swift; sourceTree = ""; }; 4FF4D0FF1E18374700846527 /* WatchContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchContext.swift; sourceTree = ""; }; 4FFEDFBE20E5CF22000BFC58 /* ChartHUDController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartHUDController.swift; sourceTree = ""; }; - 63F5E17B297DDF3900A62D4B /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/ckcomplication.strings; sourceTree = ""; }; - 7D199D93212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Main.strings; sourceTree = ""; }; - 7D199D94212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/MainInterface.strings; sourceTree = ""; }; - 7D199D95212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Interface.strings; sourceTree = ""; }; - 7D199D96212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 7D199D97212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D199D99212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 7D199D9A212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 7D199D9D212A067700241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - 7D23667521250BE30028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - 7D23667621250BF70028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23667821250C2D0028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - 7D23667921250C440028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - 7D23667A21250C480028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; 7D23667C21250C7E0028B67D /* LocalizedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LocalizedString.swift; path = LoopUI/Common/LocalizedString.swift; sourceTree = SOURCE_ROOT; }; - 7D23667E21250CAC0028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23667F21250CB80028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; - 7D23668521250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = ""; }; - 7D23668621250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainInterface.strings; sourceTree = ""; }; - 7D23668721250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Interface.strings; sourceTree = ""; }; - 7D23668821250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 7D23668921250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23668B21250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 7D23668C21250D190028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 7D23668F21250D190028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - 7D23669521250D220028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = ""; }; - 7D23669621250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainInterface.strings; sourceTree = ""; }; - 7D23669721250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Interface.strings; sourceTree = ""; }; - 7D23669821250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 7D23669921250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23669B21250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 7D23669C21250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 7D23669F21250D240028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366A521250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = ""; }; - 7D2366A621250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainInterface.strings"; sourceTree = ""; }; - 7D2366A721250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Interface.strings"; sourceTree = ""; }; - 7D2366A821250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 7D2366A921250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - 7D2366AB21250D2D0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 7D2366AC21250D2D0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 7D2366AF21250D2D0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - 7D2366B421250D350028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Interface.strings; sourceTree = ""; }; - 7D2366B721250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = ""; }; - 7D2366B821250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainInterface.strings; sourceTree = ""; }; - 7D2366B921250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366BA21250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D2366BC21250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366BD21250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366BF21250D370028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366C521250D3F0028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Main.strings; sourceTree = ""; }; - 7D2366C621250D3F0028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/MainInterface.strings; sourceTree = ""; }; - 7D2366C721250D3F0028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Interface.strings; sourceTree = ""; }; - 7D2366C821250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366C921250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D2366CB21250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366CC21250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366CF21250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366D521250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Main.strings; sourceTree = ""; }; - 7D2366D621250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/MainInterface.strings; sourceTree = ""; }; - 7D2366D721250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Interface.strings; sourceTree = ""; }; - 7D2366D821250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366D921250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D2366DB21250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366DC21250D4B0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - 7D2366DF21250D4B0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - 7D68AAAA1FE2DB0A00522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = ""; }; - 7D68AAAB1FE2DB0A00522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainInterface.strings; sourceTree = ""; }; - 7D68AAAC1FE2DB0A00522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Interface.strings; sourceTree = ""; }; - 7D68AAAD1FE2E8D400522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 7D68AAB31FE2E8D500522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 7D68AAB41FE2E8D600522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D68AAB71FE2E8D600522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 7D68AAB81FE2E8D700522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 7D7076361FE06EDE004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 7D70764B1FE06EE1004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 7D70765F1FE06EE3004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 7D7076641FE06EE4004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEED52335A3CB005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEED72335A489005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; }; - 7D9BEED82335A4F7005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEEDA2335A522005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BEEDB2335A587005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEEDD2335A5CC005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Interface.strings; sourceTree = ""; }; - 7D9BEEDE2335A5F7005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEEE62335A6B3005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEEE82335A6B9005DCFD6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEEE92335A6BB005DCFD6 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; @@ -1085,94 +1000,33 @@ 7D9BEF102335D693005DCFD6 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = ""; }; 7D9BEF122335D694005DCFD6 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Main.strings; sourceTree = ""; }; 7D9BEF132335EC4B005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Intents.strings; sourceTree = ""; }; - 7D9BEF152335EC4B005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF162335EC4B005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BEF172335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF182335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; 7D9BEF1A2335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF1B2335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF1C2335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF1E2335EC4D005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF1F2335EC4D005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF222335EC4D005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF282335EC4E005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF292335EC58005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Intents.strings"; sourceTree = ""; }; - 7D9BEF2B2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Main.strings"; sourceTree = ""; }; - 7D9BEF2C2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/MainInterface.strings"; sourceTree = ""; }; - 7D9BEF2D2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Interface.strings"; sourceTree = ""; }; 7D9BEF2E2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Main.strings"; sourceTree = ""; }; 7D9BEF302335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 7D9BEF312335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 7D9BEF322335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - 7D9BEF342335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 7D9BEF352335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 7D9BEF382335EC5A005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF3E2335EC5A005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF3F2335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Intents.strings; sourceTree = ""; }; - 7D9BEF412335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF422335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BEF432335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF442335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; 7D9BEF462335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF472335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF4A2335EC63005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF4B2335EC63005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF4E2335EC63005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF542335EC64005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF552335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Intents.strings; sourceTree = ""; }; - 7D9BEF572335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF582335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BEF592335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF5A2335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Main.strings; sourceTree = ""; }; 7D9BEF5C2335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF5D2335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF5E2335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF602335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF612335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF642335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF6A2335EC70005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF6B2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Intents.strings; sourceTree = ""; }; - 7D9BEF6D2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF6E2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BEF6F2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF702335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Main.strings; sourceTree = ""; }; 7D9BEF722335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF732335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF762335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF772335EC7E005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF7A2335EC7E005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF802335EC7E005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF812335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Intents.strings; sourceTree = ""; }; - 7D9BEF832335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF842335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BEF852335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF862335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Main.strings; sourceTree = ""; }; 7D9BEF882335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF892335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF8A2335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF8C2335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF8D2335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF902335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF962335EC8D005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF972335F667005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF98233600D6005DCFD6 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF99233600D8005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF9A233600D9005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; 7D9BF13A23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Intents.strings; sourceTree = ""; }; - 7D9BF13B23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Main.strings; sourceTree = ""; }; - 7D9BF13C23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/MainInterface.strings; sourceTree = ""; }; - 7D9BF13D23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Interface.strings; sourceTree = ""; }; 7D9BF13E23370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Main.strings; sourceTree = ""; }; 7D9BF13F23370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BF14023370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BF14123370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BF14223370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BF14323370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BF14423370E8D005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7D9BF14623370E8D005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - 7DD382771F8DBFC60071272B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Main.strings; sourceTree = ""; }; - 7DD382781F8DBFC60071272B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainInterface.strings; sourceTree = ""; }; - 7DD382791F8DBFC60071272B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Interface.strings; sourceTree = ""; }; 7E69CFFB2A16A77E00203CBD /* ResetLoopManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetLoopManager.swift; sourceTree = ""; }; 80F864E52433BF5D0026EC26 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; 84AA81D22A4A27A3000B658B /* LoopWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopWidgets.swift; sourceTree = ""; }; @@ -1325,99 +1179,42 @@ B4E96D5C248A82A2002DABAD /* StatusBarHUDView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StatusBarHUDView.xib; sourceTree = ""; }; B4F3D25024AF890C0095CE44 /* BluetoothStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetoothStateManager.swift; sourceTree = ""; }; B4FEEF7C24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DeviceDataManager+DeviceStatus.swift"; sourceTree = ""; }; + B66D1F202E6A5D6500471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F222E6A5D6500471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F242E6A5D6500471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F262E6A5D6500471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F282E6A5D6500471149 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/MainInterface.xcstrings; sourceTree = ""; }; + B66D1F292E6A5D6500471149 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/LaunchScreen.xcstrings; sourceTree = ""; }; + B66D1F2A2E6A5D6500471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F2C2E6A5D6500471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F2E2E6A5D6600471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F302E6A5D6600471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F322E6A5D6600471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F342E6A5D6600471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F362E6A5D6600471149 /* ckcomplication.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = ckcomplication.xcstrings; sourceTree = ""; }; + B66D1F382E6A5D6600471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F3A2E6A5D6600471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F3D2E6A5D6600471149 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = ""; }; + B66D1F3F2E6A5D6600471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; + B66D1F412E6A5D6600471149 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/Interface.xcstrings; sourceTree = ""; }; + B66D1F422E6A5D6600471149 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/Main.xcstrings; sourceTree = ""; }; C1004DEF2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DF12981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DF42981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - C1004DF72981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DF92981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - C1004DFA2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DFB2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DFC2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DFD2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DFE2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004DFF2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - C1004E002981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E012981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - C1004E022981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E032981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E042981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E052981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E062981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E072981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - C1004E082981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E092981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - C1004E0A2981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E0B2981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E0C2981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E0D2981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E0E2981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E0F2981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - C1004E102981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E112981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - C1004E122981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E132981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E142981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E152981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E162981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E172981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - C1004E182981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E192981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - C1004E1A2981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E1B2981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E1C2981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E1D2981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E1E2981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E1F2981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - C1004E202981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E212981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - C1004E222981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E232981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E242981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E252981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E262981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - C1004E272981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E282981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - C1004E292981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E2A2981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E2B2981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E2C2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E2D2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E2E2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E2F2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E302981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E312981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E322981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - C1004E332981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E342981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E352981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C101947127DD473C004E7EB8 /* MockKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C1092BFD29F8116700AE3D1C /* apply-info-customizations.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "apply-info-customizations.sh"; sourceTree = ""; }; C110888C2A3913C600BA4898 /* BuildDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildDetails.swift; sourceTree = ""; }; - C11613482983096D00777E7C /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - C116134B2983096D00777E7C /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - C116134D2983096D00777E7C /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/ckcomplication.strings; sourceTree = ""; }; - C11A2BCE29830A3100AC5135 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - C11A2BCF29830A3100AC5135 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/ckcomplication.strings; sourceTree = ""; }; C11AA5C7258736CF00BDE12F /* DerivedAssetsBase.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = DerivedAssetsBase.xcassets; sourceTree = ""; }; C11B9D5D286778D000500CF8 /* LoopKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C11B9D60286779C000500CF8 /* MockKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C11B9D61286779C000500CF8 /* MockKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C11BD0542523CFED00236B08 /* SimpleBolusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleBolusViewModel.swift; sourceTree = ""; }; C1201E2B23ECDBD0002DA84A /* WatchContextRequestUserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchContextRequestUserInfo.swift; sourceTree = ""; }; - C121D8CF29C7866D00DA0520 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Main.strings; sourceTree = ""; }; - C121D8D029C7866D00DA0520 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - C121D8D129C7866D00DA0520 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; - C121D8D229C7866D00DA0520 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Interface.strings; sourceTree = ""; }; - C122DEF829BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C122DEF929BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - C122DEFA29BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - C122DEFB29BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C122DEFC29BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C122DEFD29BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - C122DEFE29BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/ckcomplication.strings; sourceTree = ""; }; - C122DEFF29BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C122DF0029BBFAAE00321F8D /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C12BCCF929BBFA480066A158 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; C12CB9AC23106A3C00F84978 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Intents.strings; sourceTree = ""; }; C12CB9AE23106A5C00F84978 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Intents.strings; sourceTree = ""; }; C12CB9B023106A5F00F84978 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Intents.strings; sourceTree = ""; }; @@ -1429,18 +1226,9 @@ C13DA2AF24F6C7690098BB29 /* UIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = ""; }; C148CEE624FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeliveryUncertaintyAlertManager.swift; sourceTree = ""; }; C14952142995822A0095AA84 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C14952152995822A0095AA84 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C155A8F32986396E009BD257 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - C155A8F42986396E009BD257 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - C155A8F52986396E009BD257 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/ckcomplication.strings; sourceTree = ""; }; C159C8192867857000A86EC0 /* LoopKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C159C8212867859800A86EC0 /* MockKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C159C82E286787EF00A86EC0 /* LoopKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C15A581F29C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C15A582029C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; - C15A582129C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C15A582229C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C15A582329C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; C165756E2534C468004AE16E /* SimpleBolusViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleBolusViewModelTests.swift; sourceTree = ""; }; C16575702538A36B004AE16E /* CGMStalenessMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStalenessMonitor.swift; sourceTree = ""; }; C16575722538AFF6004AE16E /* CGMStalenessMonitorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStalenessMonitorTests.swift; sourceTree = ""; }; @@ -1451,161 +1239,56 @@ C16FC0AF2A99392F0025E239 /* live_capture_input.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = live_capture_input.json; sourceTree = ""; }; C1742331259BEADC00399C9D /* ManualEntryDoseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualEntryDoseView.swift; sourceTree = ""; }; C174233B259BEB0F00399C9D /* ManualEntryDoseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualEntryDoseViewModel.swift; sourceTree = ""; }; - C174571329830930009EFCF2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C174571429830930009EFCF2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; - C174571529830930009EFCF2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C1750AEB255B013300B8011C /* Minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C1777A6525A125F100595963 /* ManualEntryDoseViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualEntryDoseViewModelTests.swift; sourceTree = ""; }; C17824991E1999FA00D9D25C /* CaseCountable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CaseCountable.swift; sourceTree = ""; }; C178249F1E19CF9800D9D25C /* GlucoseThresholdTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlucoseThresholdTableViewController.swift; sourceTree = ""; }; C17824A41E1AD4D100D9D25C /* ManualBolusRecommendation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManualBolusRecommendation.swift; sourceTree = ""; }; C1814B85225E507C008D2D8E /* Sequence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sequence.swift; sourceTree = ""; }; - C186B73F298309A700F83024 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - C18886E629830A5E004C982D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - C18886E729830A5E004C982D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - C18886E829830A5E004C982D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/ckcomplication.strings; sourceTree = ""; }; C18913B42524F24C007B0683 /* DeviceDataManager+SimpleBolusViewModelDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DeviceDataManager+SimpleBolusViewModelDelegate.swift"; sourceTree = ""; }; C18A491222FCC22800FDA733 /* build-derived-assets.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "build-derived-assets.sh"; sourceTree = ""; }; C18A491322FCC22900FDA733 /* make_scenario.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = make_scenario.py; sourceTree = ""; }; C18A491522FCC22900FDA733 /* copy-plugins.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "copy-plugins.sh"; sourceTree = ""; }; - C18B725E299581C600F138D3 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - C18B725F299581C600F138D3 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - C18B7260299581C600F138D3 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/ckcomplication.strings; sourceTree = ""; }; C19008FD25225D3900721625 /* SimpleBolusCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleBolusCalculator.swift; sourceTree = ""; }; C19008FF252271BB00721625 /* SimpleBolusCalculatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleBolusCalculatorTests.swift; sourceTree = ""; }; C191D2A025B3ACAA00C26C0B /* DosingStrategySelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DosingStrategySelectionView.swift; sourceTree = ""; }; - C192C5FE29C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - C192C5FF29C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; - C192C60029C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - C192C60129C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; - C192C60229C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - C192C60329C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; - C192C60429C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; - C19A2247298951AC000E4E71 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; C19C8BB928651DFB0056D5E4 /* TrueTime.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TrueTime.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C19C8BC228651EAE0056D5E4 /* LoopTestingKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopTestingKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C19C8BC728651F0A0056D5E4 /* MockKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C19C8C20286776C20056D5E4 /* LoopKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C19E387B298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - C19E387C298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - C19E387D298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - C19E387E298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; C19E96DD23D2733F003F79B0 /* LoopCompletionFreshness.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopCompletionFreshness.swift; sourceTree = ""; }; C19F496225630504003632D7 /* Minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C1AD41FF256D61E500164DDD /* Comparable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comparable.swift; sourceTree = ""; }; - C1AD48CE298639890013B994 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1AD62FE29BBFAA80002685D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - C1AD62FF29BBFAA80002685D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - C1AD630029BBFAA80002685D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/ckcomplication.strings; sourceTree = ""; }; C1AF062229426300002C1B19 /* ManualGlucoseEntryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualGlucoseEntryRow.swift; sourceTree = ""; }; - C1B0CFD429C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - C1B0CFD529C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - C1B0CFD629C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - C1B0CFD729C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - C1B0CFD829C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - C1B0CFD929C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - C1B0CFDA29C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - C1B267992995824000BCB7C1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - C1B2679A2995824000BCB7C1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - C1B2679B2995824000BCB7C1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - C1B2679C2995824000BCB7C1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/ckcomplication.strings; sourceTree = ""; }; - C1B2679D2995824000BCB7C1 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; C1BCB5AF298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - C1BCB5B0298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - C1BCB5B1298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - C1BCB5B2298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - C1BCB5B3298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - C1BCB5B4298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - C1BCB5B5298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - C1BCB5B6298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - C1BCB5B7298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/ckcomplication.strings; sourceTree = ""; }; - C1BCB5B8298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - C1BCB5B9298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; C1C247882995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Intents.strings; sourceTree = ""; }; C1C247892995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; C1C2478B2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; - C1C2478C2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1C2478D2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1C2478E2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/MainInterface.strings; sourceTree = ""; }; - C1C2478F2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; - C1C247902995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; - C1C247912995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1C31277297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; - C1C31278297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/MainInterface.strings; sourceTree = ""; }; - C1C31279297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Interface.strings; sourceTree = ""; }; C1C3127A297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; C1C3127C297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C1C3127D297E4C0100296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; - C1C3127E297E4C0100296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/ckcomplication.strings; sourceTree = ""; }; C1C3127F297E4C0400296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Intents.strings; sourceTree = ""; }; - C1C31280297E4C0400296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C1C31281297E4C0400296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; - C1C31282297E4F6E00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C1C5357529C6346A00E32DF9 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Intents.strings; sourceTree = ""; }; C1C660D0252E4DD5009B5C32 /* LoopConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopConstants.swift; sourceTree = ""; }; C1D0B62F2986D4D90098D215 /* LocalizedString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizedString.swift; sourceTree = ""; }; C1D197FE232CF92D0096D646 /* capture-build-details.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "capture-build-details.sh"; sourceTree = ""; }; C1D289B422F90A52003FFBD9 /* BasalDeliveryState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasalDeliveryState.swift; sourceTree = ""; }; C1D476B32A8ED179002C1C87 /* LoopAlgorithmTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopAlgorithmTests.swift; sourceTree = ""; }; - C1D70F7A2A914F71009FE129 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; C1DA986B2843B6F9001D04CC /* PersistedProperty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistedProperty.swift; sourceTree = ""; }; C1DE5D22251BFC4D00439E49 /* SimpleBolusView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleBolusView.swift; sourceTree = ""; }; C1E2773D224177C000354103 /* ClockKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ClockKit.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/System/Library/Frameworks/ClockKit.framework; sourceTree = DEVELOPER_DIR; }; C1E2774722433D7A00354103 /* MKRingProgressView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MKRingProgressView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C1E3862428247B7100F561A4 /* StoredLoopNotRunningNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoredLoopNotRunningNotification.swift; sourceTree = ""; }; - C1E5A6DE29C7870100703C90 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - C1E693CA29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - C1E693CB29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - C1E693CC29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - C1E693CD29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - C1E693CE29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - C1E693CF29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - C1E693D029C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; C1E9CB5A295101570022387B /* install-scenarios.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "install-scenarios.sh"; sourceTree = ""; }; - C1EB0D1D299581D900628475 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1EB0D1E299581D900628475 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - C1EB0D1F299581D900628475 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1EB0D20299581D900628475 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1EB0D21299581D900628475 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - C1EB0D22299581D900628475 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/ckcomplication.strings; sourceTree = ""; }; C1EE9E802A38D0FB0064784A /* BuildDetails.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = BuildDetails.plist; sourceTree = ""; }; C1EF747128D6A44A00C8C083 /* CrashRecoveryManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashRecoveryManager.swift; sourceTree = ""; }; C1F2075B26D6F9B0007AB7EB /* AppExpirationAlerter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppExpirationAlerter.swift; sourceTree = ""; }; C1F48FF62995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F48FF72995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F48FF82995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - C1F48FF92995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F48FFA2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - C1F48FFB2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F48FFC2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F48FFD2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - C1F48FFE2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/ckcomplication.strings; sourceTree = ""; }; - C1F48FFF2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F490002995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - C1F4FD5929C7869800D7ACBC /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; C1F7822527CC056900C0919A /* SettingsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsManager.swift; sourceTree = ""; }; C1F8B1D122375E4200DD66CF /* BolusProgressTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BolusProgressTableViewCell.swift; sourceTree = ""; }; C1F8B1DB223862D500DD66CF /* BolusProgressTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BolusProgressTableViewCell.xib; sourceTree = ""; }; - C1FAB5BE29C786B000D25073 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = ""; }; - C1FAB5BF29C786B000D25073 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Main.strings; sourceTree = ""; }; - C1FAB5C029C786B000D25073 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = ""; }; - C1FAB5C129C786B000D25073 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = ""; }; - C1FAB5C229C786B000D25073 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Interface.strings; sourceTree = ""; }; C1FB428B217806A300FAB378 /* StateColorPalette.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StateColorPalette.swift; sourceTree = ""; }; C1FB428E217921D600FAB378 /* PumpManagerUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PumpManagerUI.swift; sourceTree = ""; }; - C1FDCBFC29C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Main.strings; sourceTree = ""; }; - C1FDCBFD29C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1FDCBFE29C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1FDCBFF29C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1FDCC0029C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1FDCC0129C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; - C1FDCC0229C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; - C1FDCC0329C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Interface.strings; sourceTree = ""; }; - C1FF3D4929C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - C1FF3D4A29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; - C1FF3D4B29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - C1FF3D4C29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - C1FF3D4D29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; DD3DBD282A33AFE9000F8B5B /* IntegralRetrospectiveCorrectionSelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntegralRetrospectiveCorrectionSelectionView.swift; sourceTree = ""; }; DDC389F52A2B61750066E2E8 /* ApplicationFactorStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationFactorStrategy.swift; sourceTree = ""; }; DDC389F72A2B620B0066E2E8 /* GlucoseBasedApplicationFactorStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseBasedApplicationFactorStrategy.swift; sourceTree = ""; }; @@ -1688,32 +1371,12 @@ E9C58A7A24DB529A00487A17 /* counteraction_effect_falling_glucose.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = counteraction_effect_falling_glucose.json; sourceTree = ""; }; E9C58A7B24DB529A00487A17 /* insulin_effect.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = insulin_effect.json; sourceTree = ""; }; F5D9C01727DABBE0002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Intents.strings; sourceTree = ""; }; - F5D9C01927DABBE0002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = ""; }; - F5D9C01A27DABBE1002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/MainInterface.strings; sourceTree = ""; }; - F5D9C01B27DABBE1002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Interface.strings; sourceTree = ""; }; F5D9C01C27DABBE1002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = ""; }; F5D9C01E27DABBE2002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - F5D9C01F27DABBE2002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - F5D9C02027DABBE2002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - F5D9C02127DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - F5D9C02227DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - F5D9C02327DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - F5D9C02427DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - F5D9C02527DABBE4002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5D9C02727DABBE4002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDD327E1D71C0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Intents.strings; sourceTree = ""; }; - F5E0BDD527E1D71D0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; - F5E0BDD627E1D71D0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/MainInterface.strings; sourceTree = ""; }; - F5E0BDD727E1D71E0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Interface.strings; sourceTree = ""; }; F5E0BDD827E1D71E0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; F5E0BDDA27E1D71F0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - F5E0BDDB27E1D7200033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - F5E0BDDC27E1D7200033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; - F5E0BDDD27E1D7210033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - F5E0BDDE27E1D7210033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - F5E0BDDF27E1D7210033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; - F5E0BDE027E1D7220033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; - F5E0BDE127E1D7230033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDE327E1D7230033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; /* End PBXFileReference section */ @@ -2008,8 +1671,8 @@ isa = PBXGroup; children = ( C16DA84022E8E104008624C2 /* Plugins */, - 7D7076651FE06EE4004AC8EA /* Localizable.strings */, - 7D7076511FE06EE1004AC8EA /* InfoPlist.strings */, + B66D1F322E6A5D6600471149 /* Localizable.xcstrings */, + B66D1F382E6A5D6600471149 /* InfoPlist.xcstrings */, 43EDEE6B1CF2E12A00393BE3 /* Loop.entitlements */, 43F5C2D41B92A4A6003EB13D /* Info.plist */, C1EE9E802A38D0FB0064784A /* BuildDetails.plist */, @@ -2033,7 +1696,7 @@ 43A943731B926B7B0051FA24 /* WatchApp */ = { isa = PBXGroup; children = ( - C1C73F0F1DE3D0270022FC89 /* InfoPlist.strings */, + B66D1F222E6A5D6500471149 /* InfoPlist.xcstrings */, 43F5C2D61B92A4DC003EB13D /* Info.plist */, 43A943741B926B7B0051FA24 /* Interface.storyboard */, A966152823EA5A37005D8B29 /* DefaultAssets.xcassets */, @@ -2045,11 +1708,11 @@ 43A943821B926B7B0051FA24 /* WatchApp Extension */ = { isa = PBXGroup; children = ( - 63F5E17A297DDF3900A62D4B /* ckcomplication.strings */, - 7D7076601FE06EE3004AC8EA /* Localizable.strings */, + B66D1F362E6A5D6600471149 /* ckcomplication.xcstrings */, + B66D1F342E6A5D6600471149 /* Localizable.xcstrings */, 43D533BB1CFD1DD7009E3085 /* WatchApp Extension.entitlements */, 43A943911B926B7B0051FA24 /* Info.plist */, - 4B67E2C6289B4EDB002D92AF /* InfoPlist.strings */, + B66D1F242E6A5D6500471149 /* InfoPlist.xcstrings */, 43A9438D1B926B7B0051FA24 /* ComplicationController.swift */, 43A943871B926B7B0051FA24 /* ExtensionDelegate.swift */, 43A9438F1B926B7B0051FA24 /* Assets.xcassets */, @@ -2169,7 +1832,7 @@ 43D848AF1E7DCBE100DADCBC /* Result.swift */, 43D9FFD121EAE05D00AF44BF /* LoopCore.h */, 43D9FFD221EAE05D00AF44BF /* Info.plist */, - 4B60626A287E286000BF8BBB /* Localizable.strings */, + B66D1F3A2E6A5D6600471149 /* Localizable.xcstrings */, E9C00EEF24C620EF00628F35 /* LoopSettings.swift */, C16575742539FD60004AE16E /* LoopCoreConstants.swift */, E9B3551B292844010076AB04 /* MissedMealNotification.swift */, @@ -2344,10 +2007,10 @@ 4F70C1DF1DE8DCA7006380B7 /* Loop Status Extension */ = { isa = PBXGroup; children = ( - 7D7076371FE06EDE004AC8EA /* Localizable.strings */, + B66D1F2A2E6A5D6500471149 /* Localizable.xcstrings */, 4F70C1FD1DE8E662006380B7 /* Loop Status Extension.entitlements */, 4F70C1E51DE8DCA7006380B7 /* Info.plist */, - C1004DF62981F5B700B8CF94 /* InfoPlist.strings */, + B66D1F3F2E6A5D6600471149 /* InfoPlist.xcstrings */, 43BFF0CC1E466C8400FF19A9 /* StateColorPalette.swift */, 43FCEEB0221A863E0013DD30 /* StatusChartsManager.swift */, 4F70C1E01DE8DCA7006380B7 /* StatusViewController.swift */, @@ -2360,8 +2023,8 @@ isa = PBXGroup; children = ( 7D23667B21250C5A0028B67D /* Common */, - 7D70764C1FE06EE1004AC8EA /* Localizable.strings */, - 7D7076471FE06EE0004AC8EA /* InfoPlist.strings */, + B66D1F3D2E6A5D6600471149 /* Localizable.xcstrings */, + B66D1F202E6A5D6500471149 /* InfoPlist.xcstrings */, 4FB76FC41E8C576800B39636 /* Extensions */, 4F7528A61DFE20AE00C322D6 /* Models */, B42C950F24A3C44F00857C73 /* ViewModel */, @@ -2521,8 +2184,8 @@ 84AA81D42A4A2813000B658B /* Bootstrap */ = { isa = PBXGroup; children = ( - C116134A2983096D00777E7C /* Localizable.strings */, - C11613472983096D00777E7C /* InfoPlist.strings */, + B66D1F262E6A5D6500471149 /* Localizable.xcstrings */, + B66D1F2E2E6A5D6600471149 /* InfoPlist.xcstrings */, 14B1736D28AEDA63006CCD7C /* LoopWidgetExtension.entitlements */, 14B1736628AED9EE006CCD7C /* Info.plist */, ); @@ -2893,8 +2556,8 @@ E942DE6D253BE5E100AC532D /* Loop Intent Extension.entitlements */, E9B07F7E253BBA6500BAD8F8 /* IntentHandler.swift */, E9B07F80253BBA6500BAD8F8 /* Info.plist */, - C1004DF32981F5B700B8CF94 /* Localizable.strings */, - C1004DF02981F5B700B8CF94 /* InfoPlist.strings */, + B66D1F2C2E6A5D6500471149 /* Localizable.xcstrings */, + B66D1F302E6A5D6600471149 /* InfoPlist.xcstrings */, E9B07FED253BBC7100BAD8F8 /* OverrideIntentHandler.swift */, ); path = "Loop Intent Extension"; @@ -3349,9 +3012,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C116134C2983096D00777E7C /* Localizable.strings in Resources */, + B66D1F2F2E6A5D6600471149 /* InfoPlist.xcstrings in Resources */, 147EFE8E2A8BCC5500272438 /* DefaultAssets.xcassets in Resources */, - C11613492983096D00777E7C /* InfoPlist.strings in Resources */, + B66D1F272E6A5D6500471149 /* Localizable.xcstrings in Resources */, 147EFE902A8BCD8000272438 /* DerivedAssets.xcassets in Resources */, 147EFE922A8BCD8A00272438 /* DerivedAssetsBase.xcassets in Resources */, ); @@ -3361,14 +3024,14 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B66D1F392E6A5D6600471149 /* InfoPlist.xcstrings in Resources */, C13255D6223E7BE2008AF50C /* BolusProgressTableViewCell.xib in Resources */, C1EE9E812A38D0FB0064784A /* BuildDetails.plist in Resources */, 43FCBBC21E51710B00343C1B /* LaunchScreen.storyboard in Resources */, B405E35A24D2B1A400DD058D /* HUDAssets.xcassets in Resources */, A966152623EA5A26005D8B29 /* DefaultAssets.xcassets in Resources */, A966152723EA5A26005D8B29 /* DerivedAssets.xcassets in Resources */, - 7D70764F1FE06EE1004AC8EA /* InfoPlist.strings in Resources */, - 7D7076631FE06EE4004AC8EA /* Localizable.strings in Resources */, + B66D1F332E6A5D6600471149 /* Localizable.xcstrings in Resources */, 43776F971B8022E90074EA36 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3378,7 +3041,7 @@ buildActionMask = 2147483647; files = ( A966152B23EA5A37005D8B29 /* DerivedAssets.xcassets in Resources */, - C1C73F0D1DE3D0270022FC89 /* InfoPlist.strings in Resources */, + B66D1F232E6A5D6500471149 /* InfoPlist.xcstrings in Resources */, 43A943761B926B7B0051FA24 /* Interface.storyboard in Resources */, A966152A23EA5A37005D8B29 /* DefaultAssets.xcassets in Resources */, ); @@ -3388,10 +3051,10 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7D70765E1FE06EE3004AC8EA /* Localizable.strings in Resources */, - 4B67E2C8289B4EDB002D92AF /* InfoPlist.strings in Resources */, + B66D1F252E6A5D6500471149 /* InfoPlist.xcstrings in Resources */, + B66D1F372E6A5D6600471149 /* ckcomplication.xcstrings in Resources */, 43A943901B926B7B0051FA24 /* Assets.xcassets in Resources */, - 63F5E17C297DDF3900A62D4B /* ckcomplication.strings in Resources */, + B66D1F352E6A5D6600471149 /* Localizable.xcstrings in Resources */, B405E35924D2A75B00DD058D /* DerivedAssets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3400,7 +3063,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B60626C287E286000BF8BBB /* Localizable.strings in Resources */, + B66D1F3C2E6A5D6600471149 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3408,7 +3071,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B60626D287E286000BF8BBB /* Localizable.strings in Resources */, + B66D1F3B2E6A5D6600471149 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3470,10 +3133,10 @@ buildActionMask = 2147483647; files = ( B491B09E24D0B600004CBE8F /* DerivedAssets.xcassets in Resources */, + B66D1F402E6A5D6600471149 /* InfoPlist.xcstrings in Resources */, 4F70C1E41DE8DCA7006380B7 /* MainInterface.storyboard in Resources */, + B66D1F2B2E6A5D6500471149 /* Localizable.xcstrings in Resources */, B405E35B24D2E05600DD058D /* HUDAssets.xcassets in Resources */, - 7D7076351FE06EDE004AC8EA /* Localizable.strings in Resources */, - C1004DF82981F5B700B8CF94 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3482,8 +3145,8 @@ buildActionMask = 2147483647; files = ( 4F2C15971E09E94E00E160D4 /* HUDAssets.xcassets in Resources */, - 7D70764A1FE06EE1004AC8EA /* Localizable.strings in Resources */, - 7D7076451FE06EE0004AC8EA /* InfoPlist.strings in Resources */, + B66D1F212E6A5D6500471149 /* InfoPlist.xcstrings in Resources */, + B66D1F3E2E6A5D6600471149 /* Localizable.xcstrings in Resources */, 4F2C15951E09BF3C00E160D4 /* HUDView.xib in Resources */, B4E96D5D248A82A2002DABAD /* StatusBarHUDView.xib in Resources */, B4E96D59248A7F9A002DABAD /* StatusHighlightHUDView.xib in Resources */, @@ -3494,8 +3157,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C1004DF22981F5B700B8CF94 /* InfoPlist.strings in Resources */, - C1004DF52981F5B700B8CF94 /* Localizable.strings in Resources */, + B66D1F312E6A5D6600471149 /* InfoPlist.xcstrings in Resources */, + B66D1F2D2E6A5D6600471149 /* Localizable.xcstrings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4179,29 +3842,7 @@ isa = PBXVariantGroup; children = ( 43776F961B8022E90074EA36 /* Base */, - 7DD382771F8DBFC60071272B /* es */, - 7D68AAAA1FE2DB0A00522C49 /* ru */, - 7D23668521250D180028B67D /* fr */, - 7D23669521250D220028B67D /* de */, - 7D2366A521250D2C0028B67D /* zh-Hans */, - 7D2366B721250D360028B67D /* it */, - 7D2366C521250D3F0028B67D /* nl */, - 7D2366D521250D4A0028B67D /* nb */, - 7D199D93212A067600241026 /* pl */, - 7D9BEED72335A489005DCFD6 /* en */, - 7D9BEF152335EC4B005DCFD6 /* ja */, - 7D9BEF2B2335EC59005DCFD6 /* pt-BR */, - 7D9BEF412335EC62005DCFD6 /* vi */, - 7D9BEF572335EC6E005DCFD6 /* da */, - 7D9BEF6D2335EC7D005DCFD6 /* sv */, - 7D9BEF832335EC8B005DCFD6 /* fi */, - 7D9BF13B23370E8B005DCFD6 /* ro */, - F5D9C01927DABBE0002E48F6 /* tr */, - F5E0BDD527E1D71D0033557E /* he */, - C1C31277297E4BFE00296DA4 /* ar */, - C121D8CF29C7866D00DA0520 /* cs */, - C1FAB5BF29C786B000D25073 /* hi */, - C1FDCBFC29C786F90056E652 /* sk */, + B66D1F422E6A5D6600471149 /* mul */, ); name = Main.storyboard; sourceTree = ""; @@ -4210,6 +3851,7 @@ isa = PBXVariantGroup; children = ( 43776F9B1B8022E90074EA36 /* Base */, + B66D1F292E6A5D6500471149 /* mul */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -4249,29 +3891,7 @@ isa = PBXVariantGroup; children = ( 43A943751B926B7B0051FA24 /* Base */, - 7DD382791F8DBFC60071272B /* es */, - 7D68AAAC1FE2DB0A00522C49 /* ru */, - 7D23668721250D180028B67D /* fr */, - 7D23669721250D230028B67D /* de */, - 7D2366A721250D2C0028B67D /* zh-Hans */, - 7D2366B421250D350028B67D /* it */, - 7D2366C721250D3F0028B67D /* nl */, - 7D2366D721250D4A0028B67D /* nb */, - 7D199D95212A067600241026 /* pl */, - 7D9BEEDD2335A5CC005DCFD6 /* en */, - 7D9BEF172335EC4C005DCFD6 /* ja */, - 7D9BEF2D2335EC59005DCFD6 /* pt-BR */, - 7D9BEF432335EC62005DCFD6 /* vi */, - 7D9BEF592335EC6E005DCFD6 /* da */, - 7D9BEF6F2335EC7D005DCFD6 /* sv */, - 7D9BEF852335EC8B005DCFD6 /* fi */, - 7D9BF13D23370E8B005DCFD6 /* ro */, - F5D9C01B27DABBE1002E48F6 /* tr */, - F5E0BDD727E1D71E0033557E /* he */, - C1C31279297E4BFE00296DA4 /* ar */, - C121D8D229C7866D00DA0520 /* cs */, - C1FAB5C229C786B000D25073 /* hi */, - C1FDCC0329C786F90056E652 /* sk */, + B66D1F412E6A5D6600471149 /* mul */, ); name = Interface.storyboard; sourceTree = ""; @@ -4304,285 +3924,15 @@ name = Main.storyboard; sourceTree = ""; }; - 4B60626A287E286000BF8BBB /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 4B60626B287E286000BF8BBB /* de */, - C1004DF92981F5B700B8CF94 /* da */, - C1004E012981F67A00B8CF94 /* sv */, - C1004E092981F6A100B8CF94 /* ro */, - C1004E112981F6E200B8CF94 /* nl */, - C1004E192981F6F500B8CF94 /* nb */, - C1004E212981F72D00B8CF94 /* fr */, - C1004E282981F74300B8CF94 /* fi */, - C1BCB5B3298309C4001C50FF /* it */, - C19A2247298951AC000E4E71 /* en */, - C1EB0D1E299581D900628475 /* es */, - C1F48FFA2995821600C8BD69 /* pl */, - C1B267992995824000BCB7C1 /* tr */, - C122DEFA29BBFAAE00321F8D /* ru */, - C15A582129C7866600D3A5A1 /* ar */, - C1FF3D4B29C786A900BDC1EC /* he */, - C1B0CFD629C786BF0045B04D /* ja */, - C1E693CC29C786E200410918 /* pt-BR */, - C1FDCBFD29C786F90056E652 /* sk */, - C192C60029C78711001EFEA6 /* vi */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - 4B67E2C6289B4EDB002D92AF /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 4B67E2C7289B4EDB002D92AF /* de */, - C1004DFB2981F5B700B8CF94 /* da */, - C1004E032981F67A00B8CF94 /* sv */, - C1004E0B2981F6A100B8CF94 /* ro */, - C1004E132981F6E200B8CF94 /* nl */, - C1004E1B2981F6F500B8CF94 /* nb */, - C1004E232981F72D00B8CF94 /* fr */, - C1004E2A2981F74300B8CF94 /* fi */, - C1004E2E2981F75B00B8CF94 /* es */, - C1BCB5B8298309C4001C50FF /* it */, - C1F48FFF2995821600C8BD69 /* pl */, - C1B2679D2995824000BCB7C1 /* tr */, - C122DEFF29BBFAAE00321F8D /* ru */, - C15A582329C7866600D3A5A1 /* ar */, - C1FF3D4D29C786A900BDC1EC /* he */, - C1B0CFD929C786BF0045B04D /* ja */, - C1E693CF29C786E200410918 /* pt-BR */, - C1FDCC0129C786F90056E652 /* sk */, - C192C60329C78711001EFEA6 /* vi */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; 4F70C1E21DE8DCA7006380B7 /* MainInterface.storyboard */ = { isa = PBXVariantGroup; children = ( 4F70C1E31DE8DCA7006380B7 /* Base */, - 7DD382781F8DBFC60071272B /* es */, - 7D68AAAB1FE2DB0A00522C49 /* ru */, - 7D23668621250D180028B67D /* fr */, - 7D23669621250D230028B67D /* de */, - 7D2366A621250D2C0028B67D /* zh-Hans */, - 7D2366B821250D360028B67D /* it */, - 7D2366C621250D3F0028B67D /* nl */, - 7D2366D621250D4A0028B67D /* nb */, - 7D199D94212A067600241026 /* pl */, - 7D9BEEDA2335A522005DCFD6 /* en */, - 7D9BEF162335EC4B005DCFD6 /* ja */, - 7D9BEF2C2335EC59005DCFD6 /* pt-BR */, - 7D9BEF422335EC62005DCFD6 /* vi */, - 7D9BEF582335EC6E005DCFD6 /* da */, - 7D9BEF6E2335EC7D005DCFD6 /* sv */, - 7D9BEF842335EC8B005DCFD6 /* fi */, - 7D9BF13C23370E8B005DCFD6 /* ro */, - F5D9C01A27DABBE1002E48F6 /* tr */, - F5E0BDD627E1D71D0033557E /* he */, - C1C31278297E4BFE00296DA4 /* ar */, - C1C2478E2995823200371B88 /* sk */, + B66D1F282E6A5D6500471149 /* mul */, ); name = MainInterface.storyboard; sourceTree = ""; }; - 63F5E17A297DDF3900A62D4B /* ckcomplication.strings */ = { - isa = PBXVariantGroup; - children = ( - 63F5E17B297DDF3900A62D4B /* Base */, - C1C3127E297E4C0100296DA4 /* ar */, - C116134D2983096D00777E7C /* nb */, - C1BCB5B7298309C4001C50FF /* it */, - C11A2BCF29830A3100AC5135 /* fr */, - C18886E829830A5E004C982D /* nl */, - C155A8F52986396E009BD257 /* de */, - C18B7260299581C600F138D3 /* da */, - C1EB0D22299581D900628475 /* es */, - C1F48FFE2995821600C8BD69 /* pl */, - C1B2679C2995824000BCB7C1 /* tr */, - C1AD630029BBFAA80002685D /* ro */, - C122DEFE29BBFAAE00321F8D /* ru */, - ); - name = ckcomplication.strings; - sourceTree = ""; - }; - 7D7076371FE06EDE004AC8EA /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D7076361FE06EDE004AC8EA /* es */, - 7D68AAAD1FE2E8D400522C49 /* ru */, - 7D23667821250C2D0028B67D /* Base */, - 7D23668B21250D180028B67D /* fr */, - 7D23669B21250D230028B67D /* de */, - 7D2366AB21250D2D0028B67D /* zh-Hans */, - 7D2366BC21250D360028B67D /* it */, - 7D2366CB21250D400028B67D /* nl */, - 7D2366DB21250D4A0028B67D /* nb */, - 7D199D99212A067600241026 /* pl */, - 7D9BEED82335A4F7005DCFD6 /* en */, - 7D9BEF1E2335EC4D005DCFD6 /* ja */, - 7D9BEF342335EC59005DCFD6 /* pt-BR */, - 7D9BEF4A2335EC63005DCFD6 /* vi */, - 7D9BEF602335EC6F005DCFD6 /* da */, - 7D9BEF762335EC7D005DCFD6 /* sv */, - 7D9BEF8C2335EC8C005DCFD6 /* fi */, - 7D9BF14223370E8C005DCFD6 /* ro */, - F5D9C02127DABBE3002E48F6 /* tr */, - F5E0BDDD27E1D7210033557E /* he */, - C174571329830930009EFCF2 /* ar */, - C1C2478D2995823200371B88 /* sk */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - 7D7076471FE06EE0004AC8EA /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D23667A21250C480028B67D /* Base */, - F5D9C02327DABBE3002E48F6 /* tr */, - F5E0BDDF27E1D7210033557E /* he */, - C1C31281297E4C0400296DA4 /* ar */, - C1004DFA2981F5B700B8CF94 /* da */, - C1004E022981F67A00B8CF94 /* sv */, - C1004E0A2981F6A100B8CF94 /* ro */, - C1004E122981F6E200B8CF94 /* nl */, - C1004E1A2981F6F500B8CF94 /* nb */, - C1004E222981F72D00B8CF94 /* fr */, - C1004E292981F74300B8CF94 /* fi */, - C1004E342981F77B00B8CF94 /* de */, - C1BCB5B4298309C4001C50FF /* it */, - C1EB0D1F299581D900628475 /* es */, - C1F48FFB2995821600C8BD69 /* pl */, - C122DEFB29BBFAAE00321F8D /* ru */, - C1B0CFD729C786BF0045B04D /* ja */, - C1E693CD29C786E200410918 /* pt-BR */, - C192C60129C78711001EFEA6 /* vi */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 7D70764C1FE06EE1004AC8EA /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D70764B1FE06EE1004AC8EA /* es */, - 7D68AAB31FE2E8D500522C49 /* ru */, - 7D23667921250C440028B67D /* Base */, - 7D23668C21250D190028B67D /* fr */, - 7D23669C21250D230028B67D /* de */, - 7D2366AC21250D2D0028B67D /* zh-Hans */, - 7D2366BD21250D360028B67D /* it */, - 7D2366CC21250D400028B67D /* nl */, - 7D2366DC21250D4B0028B67D /* nb */, - 7D199D9A212A067600241026 /* pl */, - 7D9BEEDB2335A587005DCFD6 /* en */, - 7D9BEF1F2335EC4D005DCFD6 /* ja */, - 7D9BEF352335EC59005DCFD6 /* pt-BR */, - 7D9BEF4B2335EC63005DCFD6 /* vi */, - 7D9BEF612335EC6F005DCFD6 /* da */, - 7D9BEF772335EC7E005DCFD6 /* sv */, - 7D9BEF8D2335EC8C005DCFD6 /* fi */, - 7D9BF14323370E8C005DCFD6 /* ro */, - F5D9C02227DABBE3002E48F6 /* tr */, - F5E0BDDE27E1D7210033557E /* he */, - C1C31280297E4C0400296DA4 /* ar */, - C121D8D029C7866D00DA0520 /* cs */, - C1FAB5C029C786B000D25073 /* hi */, - C1FDCBFE29C786F90056E652 /* sk */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - 7D7076511FE06EE1004AC8EA /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D68AAB41FE2E8D600522C49 /* ru */, - 7D23667621250BF70028B67D /* Base */, - 7D23668921250D180028B67D /* fr */, - 7D23669921250D230028B67D /* de */, - 7D2366A921250D2C0028B67D /* zh-Hans */, - 7D2366BA21250D360028B67D /* it */, - 7D2366C921250D400028B67D /* nl */, - 7D2366D921250D4A0028B67D /* nb */, - 7D199D97212A067600241026 /* pl */, - 7D9BEED52335A3CB005DCFD6 /* en */, - 7D9BEF1C2335EC4C005DCFD6 /* ja */, - 7D9BEF322335EC59005DCFD6 /* pt-BR */, - 7D9BEF5E2335EC6F005DCFD6 /* da */, - 7D9BEF8A2335EC8C005DCFD6 /* fi */, - 7D9BEF98233600D6005DCFD6 /* es */, - 7D9BEF99233600D8005DCFD6 /* sv */, - 7D9BEF9A233600D9005DCFD6 /* vi */, - 7D9BF14123370E8C005DCFD6 /* ro */, - F5D9C02027DABBE2002E48F6 /* tr */, - F5E0BDDC27E1D7200033557E /* he */, - C174571429830930009EFCF2 /* ar */, - C1C247902995823200371B88 /* sk */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 7D7076601FE06EE3004AC8EA /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D70765F1FE06EE3004AC8EA /* es */, - 7D68AAB71FE2E8D600522C49 /* ru */, - 7D23667F21250CB80028B67D /* Base */, - 7D23668F21250D190028B67D /* fr */, - 7D23669F21250D240028B67D /* de */, - 7D2366AF21250D2D0028B67D /* zh-Hans */, - 7D2366BF21250D370028B67D /* it */, - 7D2366CF21250D400028B67D /* nl */, - 7D2366DF21250D4B0028B67D /* nb */, - 7D199D9D212A067700241026 /* pl */, - 7D9BEEDE2335A5F7005DCFD6 /* en */, - 7D9BEF222335EC4D005DCFD6 /* ja */, - 7D9BEF382335EC5A005DCFD6 /* pt-BR */, - 7D9BEF4E2335EC63005DCFD6 /* vi */, - 7D9BEF642335EC6F005DCFD6 /* da */, - 7D9BEF7A2335EC7E005DCFD6 /* sv */, - 7D9BEF902335EC8C005DCFD6 /* fi */, - 7D9BF14423370E8D005DCFD6 /* ro */, - F5D9C02527DABBE4002E48F6 /* tr */, - F5E0BDE127E1D7230033557E /* he */, - C174571529830930009EFCF2 /* ar */, - C121D8D129C7866D00DA0520 /* cs */, - C1FAB5C129C786B000D25073 /* hi */, - C1FDCC0029C786F90056E652 /* sk */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - 7D7076651FE06EE4004AC8EA /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D7076641FE06EE4004AC8EA /* es */, - 7D68AAB81FE2E8D700522C49 /* ru */, - 7D23667521250BE30028B67D /* Base */, - 7D23668821250D180028B67D /* fr */, - 7D23669821250D230028B67D /* de */, - 7D2366A821250D2C0028B67D /* zh-Hans */, - 7D2366B921250D360028B67D /* it */, - 7D2366C821250D400028B67D /* nl */, - 7D2366D821250D4A0028B67D /* nb */, - 7D199D96212A067600241026 /* pl */, - 7D9BEF1B2335EC4C005DCFD6 /* ja */, - 7D9BEF312335EC59005DCFD6 /* pt-BR */, - 7D9BEF472335EC62005DCFD6 /* vi */, - 7D9BEF5D2335EC6F005DCFD6 /* da */, - 7D9BEF732335EC7D005DCFD6 /* sv */, - 7D9BEF892335EC8C005DCFD6 /* fi */, - 7D9BEF972335F667005DCFD6 /* en */, - 7D9BF14023370E8C005DCFD6 /* ro */, - F5D9C01F27DABBE2002E48F6 /* tr */, - F5E0BDDB27E1D7200033557E /* he */, - C1C31282297E4F6E00296DA4 /* ar */, - C1C247912995823200371B88 /* sk */, - C12BCCF929BBFA480066A158 /* cs */, - C1FAB5BE29C786B000D25073 /* hi */, - ); - name = Localizable.strings; - sourceTree = ""; - }; 7D9BEEE72335A6B3005DCFD6 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -4658,150 +4008,6 @@ name = InfoPlist.strings; sourceTree = ""; }; - C1004DF02981F5B700B8CF94 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C1004DF12981F5B700B8CF94 /* da */, - C1004DFE2981F67A00B8CF94 /* sv */, - C1004E062981F6A100B8CF94 /* ro */, - C1004E0E2981F6E200B8CF94 /* nl */, - C1004E162981F6F500B8CF94 /* nb */, - C1004E1E2981F72D00B8CF94 /* fr */, - C1004E252981F74300B8CF94 /* fi */, - C1004E312981F77B00B8CF94 /* de */, - C1BCB5B0298309C4001C50FF /* it */, - C19E387C298638CE00851444 /* tr */, - C1EB0D1D299581D900628475 /* es */, - C1F48FF72995821600C8BD69 /* pl */, - C122DEF829BBFAAE00321F8D /* ru */, - C1D70F7A2A914F71009FE129 /* he */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - C1004DF32981F5B700B8CF94 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - C1004DF42981F5B700B8CF94 /* da */, - C1004DFF2981F67A00B8CF94 /* sv */, - C1004E072981F6A100B8CF94 /* ro */, - C1004E0F2981F6E200B8CF94 /* nl */, - C1004E172981F6F500B8CF94 /* nb */, - C1004E1F2981F72D00B8CF94 /* fr */, - C1004E262981F74300B8CF94 /* fi */, - C1004E322981F77B00B8CF94 /* de */, - C186B73F298309A700F83024 /* es */, - C1BCB5B1298309C4001C50FF /* it */, - C19E387D298638CE00851444 /* tr */, - C1F48FF82995821600C8BD69 /* pl */, - C1C2478C2995823200371B88 /* sk */, - C122DEF929BBFAAE00321F8D /* ru */, - C15A581F29C7866600D3A5A1 /* ar */, - C1FF3D4929C786A900BDC1EC /* he */, - C1B0CFD429C786BF0045B04D /* ja */, - C1E693CA29C786E200410918 /* pt-BR */, - C192C5FE29C78711001EFEA6 /* vi */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - C1004DF62981F5B700B8CF94 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C1004DF72981F5B700B8CF94 /* da */, - C1004E002981F67A00B8CF94 /* sv */, - C1004E082981F6A100B8CF94 /* ro */, - C1004E102981F6E200B8CF94 /* nl */, - C1004E182981F6F500B8CF94 /* nb */, - C1004E202981F72D00B8CF94 /* fr */, - C1004E272981F74300B8CF94 /* fi */, - C1004E2D2981F75B00B8CF94 /* es */, - C1004E332981F77B00B8CF94 /* de */, - C1BCB5B2298309C4001C50FF /* it */, - C19E387E298638CE00851444 /* tr */, - C1F48FF92995821600C8BD69 /* pl */, - C14952152995822A0095AA84 /* ru */, - C1C2478F2995823200371B88 /* sk */, - C15A582029C7866600D3A5A1 /* ar */, - C1FF3D4A29C786A900BDC1EC /* he */, - C1B0CFD529C786BF0045B04D /* ja */, - C1E693CB29C786E200410918 /* pt-BR */, - C192C5FF29C78711001EFEA6 /* vi */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - C11613472983096D00777E7C /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C11613482983096D00777E7C /* nb */, - C1BCB5B5298309C4001C50FF /* it */, - C18886E629830A5E004C982D /* nl */, - C155A8F32986396E009BD257 /* de */, - C1AD48CE298639890013B994 /* fr */, - C18B725E299581C600F138D3 /* da */, - C1EB0D20299581D900628475 /* es */, - C1F48FFC2995821600C8BD69 /* pl */, - C1B2679A2995824000BCB7C1 /* tr */, - C1AD62FE29BBFAA80002685D /* ro */, - C122DEFC29BBFAAE00321F8D /* ru */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - C116134A2983096D00777E7C /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - C116134B2983096D00777E7C /* nb */, - C1BCB5B6298309C4001C50FF /* it */, - C11A2BCE29830A3100AC5135 /* fr */, - C18886E729830A5E004C982D /* nl */, - C155A8F42986396E009BD257 /* de */, - C18B725F299581C600F138D3 /* da */, - C1EB0D21299581D900628475 /* es */, - C1F48FFD2995821600C8BD69 /* pl */, - C1B2679B2995824000BCB7C1 /* tr */, - C1AD62FF29BBFAA80002685D /* ro */, - C122DEFD29BBFAAE00321F8D /* ru */, - C15A582229C7866600D3A5A1 /* ar */, - C1F4FD5929C7869800D7ACBC /* fi */, - C1FF3D4C29C786A900BDC1EC /* he */, - C1B0CFD829C786BF0045B04D /* ja */, - C1E693CE29C786E200410918 /* pt-BR */, - C1FDCBFF29C786F90056E652 /* sk */, - C1E5A6DE29C7870100703C90 /* sv */, - C192C60229C78711001EFEA6 /* vi */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - C1C73F0F1DE3D0270022FC89 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D23667E21250CAC0028B67D /* Base */, - F5D9C02427DABBE3002E48F6 /* tr */, - F5E0BDE027E1D7220033557E /* he */, - C1C3127D297E4C0100296DA4 /* ar */, - C1004DFC2981F5B700B8CF94 /* da */, - C1004E042981F67A00B8CF94 /* sv */, - C1004E0C2981F6A100B8CF94 /* ro */, - C1004E142981F6E200B8CF94 /* nl */, - C1004E1C2981F6F500B8CF94 /* nb */, - C1004E242981F72D00B8CF94 /* fr */, - C1004E2B2981F74300B8CF94 /* fi */, - C1004E2F2981F75B00B8CF94 /* es */, - C1004E352981F77B00B8CF94 /* de */, - C1BCB5B9298309C4001C50FF /* it */, - C1F490002995821600C8BD69 /* pl */, - C122DF0029BBFAAE00321F8D /* ru */, - C1B0CFDA29C786BF0045B04D /* ja */, - C1E693D029C786E200410918 /* pt-BR */, - C1FDCC0229C786F90056E652 /* sk */, - C192C60429C78711001EFEA6 /* vi */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -4994,6 +4200,7 @@ GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; LOCALIZED_STRING_MACRO_NAMES = ( NSLocalizedString, CFLocalizedString, @@ -5007,6 +4214,7 @@ PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -5104,6 +4312,7 @@ GCC_WARN_UNUSED_PARAMETER = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; LOCALIZED_STRING_MACRO_NAMES = ( NSLocalizedString, CFLocalizedString, @@ -5116,6 +4325,7 @@ PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/Loop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Loop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000000..3ae53addaa --- /dev/null +++ b/Loop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,33 @@ +{ + "originHash" : "c4cada90348e9cd61ccdc1fdd95d021f037913f127c30ed5678702f19c1b75db", + "pins" : [ + { + "identity" : "mkringprogressview", + "kind" : "remoteSourceControl", + "location" : "https://github.com/maxkonovalov/MKRingProgressView.git", + "state" : { + "branch" : "master", + "revision" : "660888aab1d2ab0ed7eb9eb53caec12af4955fa7" + } + }, + { + "identity" : "swiftcharts", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ivanschuetz/SwiftCharts", + "state" : { + "branch" : "master", + "revision" : "c354c1945bb35a1f01b665b22474f6db28cba4a2" + } + }, + { + "identity" : "zipfoundation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/LoopKit/ZIPFoundation.git", + "state" : { + "branch" : "stream-entry", + "revision" : "ad465ee2545392153a64c0976d6e59227d0c1c70" + } + } + ], + "version" : 3 +} diff --git a/Loop/Base.lproj/InfoPlist.strings b/Loop/Base.lproj/InfoPlist.strings deleted file mode 100644 index b422a039c4..0000000000 --- a/Loop/Base.lproj/InfoPlist.strings +++ /dev/null @@ -1,18 +0,0 @@ -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID is used to authenticate insulin bolus and to save changes to therapy settings."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Meal data from the Health database is used to determine glucose effects. Glucose data from the Health database is used for graphing and momentum calculation. Sleep data from the Health database is used to improve the Apple Watch complication."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Carbohydrate meal data entered in the app and on the watch is stored in the Health database. Glucose data retrieved from the CGM is stored securely in HealthKit."; - diff --git a/Loop/Base.lproj/Localizable.strings b/Loop/Base.lproj/Localizable.strings deleted file mode 100644 index fd9d1fe652..0000000000 --- a/Loop/Base.lproj/Localizable.strings +++ /dev/null @@ -1,401 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (pending: %@)"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U left"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U left: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/hour @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbed"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min glucose regression coefficient (b₁), continued with decay over 30 min"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min comparison of glucose prediction vs actual, continued with decay over 60 min"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "A model based on the published absorption of Fiasp insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Active Carbohydrates"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Active Carbohydrates: %@"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Active Insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Active Insulin: %@"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Add CGM"; - -/* The label of the meal button */ -"Add Meal" = "Add Meal"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Add Pump"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Title text for button to set up a service */ -"Add Service" = "Add Service"; - -/* Button title to delete a service */ -"Delete Service" = "Delete Service"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Are you sure you want to delete this service?"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algorithm Settings"; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?"; - -/* Format fragment for a specific time */ -"at %@" = "at %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Authenticate to Bolus %@ Units"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basal Rate Schedule"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basal Rates"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolused %1$@ of %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolusing %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Cancel"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Canceling Bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Carb effects"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Carb Ratios"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carbohydrates"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Change the pump battery immediately"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Change the pump reservoir now"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Check settings"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Check that your pump is in range"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Check your CGM data source"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Closed Loop"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Configuration Error: %1$@"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Continuous Glucose Monitor"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Correction Range"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Current glucose of %1$@ is below correction range."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Custom Override"; - -/* Button title to delete CGM */ -"Delete CGM" = "Delete CGM"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Delete Account"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Delivery Limits"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Disables"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Enables"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Enter suspend threshold"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Error Canceling Bolus"; - -/* The alert title for a resume error */ -"Error Resuming" = "Error Resuming"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Eventually %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Exceeds Maximum Bolus"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "For %1$@"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glucose"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Glucose data is %1$@ old"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Glucose data not available"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glucose Momentum"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indefinitely"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulin Delivery"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulin effects"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulin Model"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulin Sensitivities"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Invalid data: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Issue Report"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Launches CGM app"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Loading..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop Failure"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop has not completed successfully in %@"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Missing data: %1$@"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentum effects"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Needs Attention"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "No connected devices, or failure during device connection"; - -/* The title text for the override presets */ -"Override Presets" = "Override Presets"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Pre-Meal Targets"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Predicted glucose at %1$@ is %2$@."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Predicted glucose of %1$@ is below your suspend threshold setting."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Predicted: %1$@\nActual: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "Pump"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pump Battery Low"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pump data is %1$@ old"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pump Manager"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pump Reservoir Empty"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pump Reservoir Low"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pump Suspended"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Rapid-Acting – Adults"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Rapid-Acting – Children"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Recommendation expired: %1$@ old"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Recommended Basal"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Recommended Bolus: %@ Units"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Retrospective Correction"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Retry"; - -/* The title of the services section in settings */ -"Services" = "Services"; - -/* The label of the settings button */ -"Settings" = "Settings"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Shows last loop error"; - -/* Format fragment for a start time */ -"since %@" = "since %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Site URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "starting at %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Starting Bolus"; - -/* The title text in settings */ -"Suspend Threshold" = "Suspend Threshold"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Tap to Resume"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "The legacy model used by Loop, allowing customization of action duration."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "The maximum bolus amount is %@ Units"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The format for the description of a temporary override end date */ -"until %@" = "until %@"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Use Workout Glucose Targets"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Workout Targets"; - diff --git a/Loop/InfoPlist.xcstrings b/Loop/InfoPlist.xcstrings new file mode 100644 index 0000000000..286eb13f56 --- /dev/null +++ b/Loop/InfoPlist.xcstrings @@ -0,0 +1,1133 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "comment" : "Bundle display name", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + } + } + }, + "CFBundleName" : { + "comment" : "Bundle name", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + } + } + }, + "NFCReaderUsageDescription" : { + "comment" : "Privacy - NFC Scan Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appen bruger NFC til at parre sig med diabetesapparater." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "The app uses NFC to pair with diabetes devices." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'app utilizza NFC per l'abbinamento con i dispositivi per il diabete." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appen bruker NFC til å koble seg sammen med diabetesenheter." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplikacja wykorzystuje NFC do parowania z urządzeniami dla diabetyków." + } + } + } + }, + "NSBluetoothAlwaysUsageDescription" : { + "comment" : "Privacy - Bluetooth Always Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يستخدم البلوتوث للتواصل مع مضخة الأنسولين وأجهزة متابعة سكر الدم المستمرة." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth wird verwendet, um mit Insulinpumpen und kontinuierlichen Blutzuckermessgeräten zu kommunizieren." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "The app needs to use Bluetooth to send and receive data from your diabetes devices." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El bluetooth se utiliza para las comunicaciones con la bomba de insulina y los dispositivos de monitoreo continuo de glucosa." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetoothin avulla kommunikoidaan insuliinipumpun ja glukoosinseurantalaitteen kanssa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth est utilisé pour communiquer avec la pompe à insuline et les dispositifs de surveillance continue du glucose." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth משמש לתקשורת עם משאבת אינסולין, חיישנים ומכשירים נוספים." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il Bluetooth viene utilizzato per comunicare con le pompe d'insulina e con i dispositivi di monitoraggio continuo della glicemia." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ブルートゥースは、インスリンポンプおよび連続グルコースモニタデバイスと通信するために使用されます" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth brukes til å kommunisere med insulinpumpe og kontinuerlige glukosemonitorer." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth wordt gebruikt om te communiceren met de insulinepomp en de continue glucosemeters." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth jest używany do komunikacji z pompą i urządzeniami ciągłego monitoringu glukozy." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth é utilizado para comunicação com a bomba de insulina e os dispositivos de monitoramento de glicose." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth este folosit pentru a comunica cu pompa de insulină, precum și cu dispozitivele de monitorizare glicemică continuă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth используется для связи с инсулиновой помпой и устройствами непрерывного мониторинга глюкозы." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth sa používa na komunikáciu s inzulínovou pumpou a zariadeniami pre kontinuálne snímanie glykémie." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth används för att kommunicera med insulinpump och CGM." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth, insülin pompası ve sürekli glikoz izleme cihazlarıyla iletişim kurmak için kullanılır." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth được sử dụng để liên lạc với máy bơm insulin và các thiết bị theo dõi đường huyết liên tục/CGM." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "蓝牙用于与胰岛素泵和连续血糖监测设备进行通信" + } + } + } + }, + "NSBluetoothPeripheralUsageDescription" : { + "comment" : "Privacy - Bluetooth Peripheral Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يستخدم البلوتوث للتواصل مع مضخة الأنسولين وأجهزة متابعة سكر الدم المستمرة." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth wird verwendet, um mit Insulinpumpen und kontinuierlichen Blutzuckermessgeräten zu kommunizieren." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "The app needs to use Bluetooth to send and receive data from your diabetes devices." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El bluetooth se utiliza para las comunicaciones con la bomba de insulina y los dispositivos de monitoreo continuo de glucosa." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetoothin avulla kommunikoidaan insuliinipumpun ja glukoosinseurantalaitteen kanssa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth est utilisé pour communiquer avec la pompe à insuline et les dispositifs de surveillance continue du glucose." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth משמש לתקשורת עם משאבת אינסולין, חיישנים ומכשירים נוספים." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il Bluetooth viene utilizzato per comunicare con le pompe d'insulina e con i dispositivi di monitoraggio continuo della glicemia." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ブルートゥースは、インスリンポンプおよび連続グルコースモニタデバイスと通信するために使用されます" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth brukes til å kommunisere med insulinpumpe og kontinuerlige glukosemonitorer." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth wordt gebruikt om te communiceren met de insulinepomp en de continue glucosemeters." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth jest używany do komunikacji z pompą i urządzeniami ciągłego monitoringu glukozy." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth é utilizado para comunicação com a bomba de insulina e os dispositivos de monitoramento de glicose." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth este folosit pentru a comunica cu pompa de insulină, precum și cu dispozitivele de monitorizare glicemică continuă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth используется для связи с инсулиновой помпой и устройствами непрерывного мониторинга глюкозы." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth sa používa na komunikáciu s inzulínovou pumpou a zariadeniami pre kontinuálne snímanie glykémie." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth används för att kommunicera med insulinpump och CGM." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth, insülin pompası ve sürekli glikoz izleme cihazlarıyla iletişim kurmak için kullanılır." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth được sử dụng để liên lạc với máy bơm insulin và các thiết bị theo dõi đường huyết liên tục/CGM." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "蓝牙用于与胰岛素泵和连续血糖监测设备进行通信" + } + } + } + }, + "NSCameraUsageDescription" : { + "comment" : "Privacy - Camera Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kamera bruges til at scanne stregkoder på enheder." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Kamera wird verwendet, um Barcodes von Geräten zu scannen." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Camera is used to scan barcodes of devices." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La cámara se utiliza para escanear los códigos de barras de los dispositivos." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La caméra est utilisée pour scanner les codes-barres des appareils." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "המצלמה משמשת לסריקת ברקודים של מכשירים." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La fotocamera è utilizzata per scansionare i codici a barre dei tuoi dispositivi." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kamera brukes til å skanne strekkoder på enheter." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Camera wordt gebruikt om barcodes van apparaten te scannen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aparat służy do skanowania kodów kreskowych urządzeń." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Camera este folosită pentru a scana codurile de bare ale dispozitivelor." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Камера используется для сканирования штрих-кодов устройств." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fotoaparát sa používa na skenovanie čiarových kódov zariadení." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kamera, cihazların barkodlarını taramak için kullanılır." + } + } + } + }, + "NSFaceIDUsageDescription" : { + "comment" : "Privacy - Face ID Usage Description", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تستخدم هوية التعرف على الوجه للتحقق من أجل جرعة الأنسولين." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID bliver brugt til at godkende en insulinbolus." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID wird benutzt, um einen Bolus zu authentifizieren." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID is used to authenticate insulin bolus." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se utiliza reconocimiento facial para autenticar el bolo de insulina." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID:tä käytetään annettavan boluksen vahvistamiseen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID est utilisé pour authentifier le bolus d'insuline et sauvegarder les changements dans les réglages de thérapie." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID ישמש לאימות הזרקת בולוס ואישור שינויים בתוכנית הטיפול." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID viene utilizzato per autenticare il bolo d'insulina e per salvare le modifiche alle impostazioni della terapia." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "フェイスIDはインスリンボーラスの認証に使用されます" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID brukes til å autentisere insulin bolus." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID wordt gebruikt om de insulinebolus te authenticeren en om wijzigingen in de therapieinstellingen op te slaan." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID jest używane do autoryzacji podaży bolusa." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID é utilizado para autenticar o bolus de insulina." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID este folosit la autentificarea pentru bolus." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Идентификатор Face ID применяется для авторизации ввода инсулина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID sa používa na overenie podania bolusu inzulínu a na uloženie zmien v nastaveniach terapie." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kräv Face ID för att kunna godkänna bolus." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID, bolus insülini doğrulamak ve tedavi ayarlarındaki değişiklikleri kaydetmek için kullanılır." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Face ID được sử dụng để xác thực liều insulin cho các bữa ăn." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用人脸解锁来确认输注胰岛素剂量" + } + } + } + }, + "NSHealthShareUsageDescription" : { + "comment" : "Privacy - Health Share Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يتم استخدام بيانات الوجبات من قواعد بيانات تطبيق صحتي لتحديد تأثيرات سكر الدم. يتم استخدام بيانات سكر الدم منقواعد بيانات تطبيق صحتي للرسم البياني والتحليل. تُستخدم بيانات النوم من قواعد بيانات تطبيق صحتي لتحسين توصيل تحديثات تعقيدات ساعة أبل أثناء فترة استيقاظك." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Måltidsdata fra Apple Health bliver brugt til at glukosens effekt på dit blodsukker. Glukose data fra Apple Health bliver brugt til at danne grafer og udregninger." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mahlzeit-Daten aus der HealthKit-Datenbank werden verwendet, um Blutzuckereffekte zu bestimmen. Blutzuckerdaten aus der HealthKit-Datenbank werden für die Grafik- und Momentumberechnung verwendet." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Meal data from the Health database is used to determine glucose effects. Glucose data from the Health database is used for graphing and momentum calculation. Sleep data from the Health database is used to optimize delivery of Apple Watch complication updates during the time you are awake." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datos de alimentos de la base de datos de Salud se utiliza para determinar los efectos en el nivel de glucosa. Datos de glucosa de la bsase de datos de Salud se utilizan para graficar y determinar cálculos de momento." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terveys-sovelluksen ateriatietoja käytetään glukoosivaikutusten määrittämiseen. Terveys-sovelluksen glukoositietoja käytetään graafeissa ja laskelmissa. Unitietoja käytetään Apple Watch -komplikaation toiminnan optimointiin hereillä olon aikana." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données sur les repas provenant de la base de données Health sont utilisées pour déterminer les effets du glucose. Les données sur la glycémie de la base de données Health sont utilisées pour le calcul graphique et le calcul du momentum. Les données de sommeil provenant de la base de données Health sont utilisées pour améliorer les cadrans Apple Watch." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נתוני ארוחות ממאגר Health משמשים לקביעת השפעות הגלוקוז. נתוני הגלוקוז ממסד Health הבריאות משמשים לגרפים ולחישוב מגמה. נתוני שינה ממסד Health משפרים את הנראות ב-Apple Watch." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati sui pasti dal database Salute vengono utilizzati per determinare gli effetti del glucosio. I dati del glucosio del database Salute vengono utilizzati per il calcolo del grafico della glicemia." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アプリに入力された炭水化物の食事データは、健康データベースに保存されます。 グルコースデータはHealthKitに安全に保存されます" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Matdata fra Health-databasen brukes til å bestemme blodsukkereffekt. Blodsukkerdata hentes fra HealthKit for opptegning og analyse." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maaltijdgegevens uit de database Gezondheid worden gebruikt om glucoseëffecten te bepalen. Glucosegegevens uit de database Gezondheid worden gebruikt voor grafieken en het berekenen van trendlijnen. Slaapgegevens uit de database Gezondheid worden gebruikt om de Apple Watch complicatie bij te werken." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane o posiłkach z bazy aplikacji Zdrowie będą używane do określenia ich wpływu na poziom cukru. Informacje o poziomie cukru z bazy danych aplikacji Zdrowie są używane do narysowania wykresu oraz obliczenia przewidywanego poziomu cukru." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Os dados de refeições do banco de dados de saúde são utilizados para definir os efeitos da glicose para a representação gráfica e cálculo da aceleração." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informațiile despre nutriție din baza de date Sănătate sunt folosite pentru a determina efectele glucozei. Informațiile despre glucoză din baza de date Sănătate sunt folosite pentru construirea de grafice și calcule de trend/momentum." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные о пище из базы данных Здоровье используются для определения влияния на гликемию. Данные гликемии из базы данных Здоровье используются для графического отображения и вычисления скорости изменений" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Údaje o jedle z databázy Health sa používajú na určenie účinkov glukózy. Údaje o glukóze z databázy Health sa používajú na vytváranie grafov a výpočet hybnosti. Údaje o spánku z databázy Health slúžia na vylepšenie komplikácie Apple Watch." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydratdata från Apple Health-databasen används för att bestämma effekten på glukosvärde. Glukosvärden från Apple Health-databasen används i diagram och för beräkning av förändring." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağlık veri tabanından alınan yemek verileri, glikoz etkilerini belirlemek için kullanılır. Sağlık veri tabanından alınan glikoz verileri, grafik ve momentum hesaplaması için kullanılır. Sağlık veritabanındaki uyku verileri, Apple Watch komplikasyonunu iyileştirmek için kullanılır." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thông số bữa ăn từ app Health được sử dụng để xác định tác động của glucose. Thông số glucose từ app Health được sử dụng cho các tính toán vẽ đồ thị và chuyển động của đường huyết." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "数据库中的膳食数据用于确定葡萄糖影响。健康数据库中的葡萄糖数据用于绘图和动量计算。" + } + } + } + }, + "NSHealthUpdateUsageDescription" : { + "comment" : "Privacy - Health Update Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بيانات كربوهيدرات الوجبة المدخلة للتطبيق و الساعة محفوظة في قواعد بيانات تطبيق صحتي. يتم تخزين بيانات سكر الدم المستردة من نظام متابعة سكر الدم المستمرة بشكل آمن في تطبيق صحتي." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data om kulhydratmåltider, der indtastes i appen og på uret, gemmes i Apples Health-database. Glukosedata, der hentes fra CGM'en, gemmes sikkert i HealthKit." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In der App und auf der Uhr eingegebene Daten zu Kohlenhydratmahlzeiten werden in der HealthKit-Datenbank gespeichert. Vom CGM abgerufene Glukosedaten werden sicher in HealthKit-Datenbank gespeichert." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Carbohydrate meal data entered in the app and on the watch is stored in the Health database. Glucose data retrieved from the CGM is stored securely in HealthKit." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datos de alimentos ingresados en la aplicación y en el reloj son almacenados en la base de datos de Salud. Los datos de glucosa extraídos del monitor continuo de glucosa se almacenan de manera segura en HealthKit." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sovelluksen ja kellon kautta tallennetut hiilihydraattitiedot tallennetaan Terveys-sovellukseen. Glukoosiseurannan kautta saadut glukoositiedot tallennetaan turvallisesti HealthKitiin." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données de glucides des repas entrées dans l'application ou la montre sont enregistrées dans la base de donnée Santé. Les données de taux de glucose provenant du CGM sont enregistrées de manière sécurisée dans HealthKit." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נתוני ארוחות הפחמימות המוזנים באפליקציה ובשעון נשמרים במסד Health. נתוני הגלוקוז שאוחזרו מה-CGM מאוחסנים בצורה מאובטחת ב-HealthKit." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康データベースからの食事データは、グルコース効果を決定するために使用される。 グルコースデータはグラフ作成と解析のためにHealthKitから検索されます" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydratmåltidsdata som legges inn i appen og på klokken lagres i Helsedatabasen. Glukosedata hentet fra CGM lagres sikkert i HealthKit." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maaltijdkoolhydraten die worden ingevoerd in de app en met de watch worden opgeslagen in de database Gezondheid. Ontvangen glucosegegevens van de CGM worden veilig opgeslagen in HealthKit." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posiłek węglowodanowy wprowadzony w aplikacji i na zegarku oraz dane o poziomie cukru pobrane z ciągłego monitoringu glukozy są bezpiecznie przechowywane w aplikacji Zdrowie." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dados de carboidratos inseridos no aplicativo e no Apple Watch são armazenados no banco de dados de saúde. Dados de glicemia recebidos do CGM são armazenados de modo seguro no HealthKit." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrații introduși în aplicație și pe ceas sunt stocați în baza de date Sănătate. Glicemiile din GCM sunt stocate în siguranță în HealthKit." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные об углеводах в приложении и на смарт-часах хранятся в базе данных Здоровье. Данные о гликемии полученные от систем непрерывного мониторинга хранятся в безопасности в Комплексе Здоровья HealthKit " + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Údaje o uhlohydrátoch zadané v aplikácii a na hodinkách sú uložené v databáze Health. Údaje o glukóze získané z CGM sú bezpečne uložené v HealthKit." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydratvärden inmatade i appen i klockan lagras i Apple Health-databasen. Glukosvärden mottagna från CGM lagras krypterat i HealthKit." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulamaya ve saate girilen öğün karbonhidrat verileri Sağlık veritabanında saklanır. CGM'den alınan KŞ verileri, HealthKit'te güvenli bir şekilde saklanır." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu Carbohydrate của bữa ăn được nhập trên phần mềm và trên đồng hồ thông minh sẽ được lưu trữ tại app Health. Các thông số glucose được lấy từ thiết bị theo dõi đường huyết liên tục/CGM sẽ được lưu trữ an toàn trong HealthKit." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在应用程序和手表中输入的碳水化合物膳食数据存储在健康数据库中。从CGM检索的葡萄糖数据安全地存储在HealthKit中。" + } + } + } + }, + "NSSiriUsageDescription" : { + "comment" : "Privacy - Siri Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop bruger Siri til at give dig mulighed for at udføre forudindstillinger med din stemme." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop verwendet Siri, damit Du Voreinstellungen mit Deiner Sprache ausführen kannst." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop uses Siri to allow you to enact presets with your voice." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop utiliza Siri para permitirte activar ajustes preestablecidos con tu voz." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop utilise Siri pour vous permettre d’activer des préréglages avec votre voix." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop משתמש ב-Siri כדי לאפשר לך להפעיל פקודות קוליות." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop utilizza Siri per permettere l'attivazione dei Preset con la tua voce." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop bruker Siri slik at du kan bruke forhåndsinnstillinger med stemmen din." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop gebruikt Siri om programma's met je stem te laten uitvoeren." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop używa Siri, aby umożliwić wprowadzanie ustawień za pomocą głosu." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop folosește Siri pentru a vă permite să activați presetări cu ajutorul vocii." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop использует Siri, чтобы вы могли активировать пресеты своим голосом." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop používa Siri, aby vám umožnila aktivovať predvoľby pomocou vášho hlasu." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop, ön ayarları sesinizle gerçekleştirmenize izin vermek için Siri'yi kullanır." + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings new file mode 100644 index 0000000000..3a1fa4b5a7 --- /dev/null +++ b/Loop/Localizable.xcstrings @@ -0,0 +1,38446 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "" : { + + }, + " (pending: %@)" : { + "comment" : "The string format appended to active insulin that describes pending insulin. (1: pending insulin)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : " (قيد الانتظار: %@)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : " (afventer: %@)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : " (stehen aus: %@)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : " (pending: %@)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : " (pendiente: %@)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "(odot.: %@)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : " (en attente : %@)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : " (pending: %@)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : " (in attesa: %@)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : " (保留中: %@)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "(venter: %@ )" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : " (Wachten: %@)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : " (oczekujące: %@)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : " (pendente: %@)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : " (urmează a fi administrate: %@)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : " (В ожидании: %@)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : " (återstår: %@)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : " (bekliyor: %@)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : " (đang chờ xử lý: %@)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : " (待执行: %@)" + } + } + } + }, + " Pre-meal Preset" : { + "comment" : "Status row title for premeal override enabled (leading space is to separate from symbol)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Før-måltid forudindstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : " Voreinstellung zum Essen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : " Pre-Comida Preestablecida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : " Ennen ateriaa -esiasetus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : " Préréglage Pré-repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קדם-ארוחה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : " Preset pre-pasto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forhåndsinnstilling før måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : " Pre-Meal Programma" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : " Przed Posiłkiem" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : " Presetare înainte de masă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Режим до еды" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : " Preprandiellt förval" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yemek-Öncesi Ön Ayarı" + } + } + } + }, + " remaining" : { + "comment" : "remaining time in setting's profile expiration section", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "zbývající" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : " tilbage" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : " verbleiben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "restantes" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "restant(s)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נותר" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : " rimanenti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "gjenstående" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : " resterend" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : " pozostały" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : " rămas" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : " осталось" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "kalan" + } + } + } + }, + " Safety Notifications are OFF" : { + "comment" : "Warning text for when Notifications or Critical Alerts Permissions is disabled", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : " Sikkerhedsmeddelelser er SLÅET FRA" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sicherheitsbenachrichtigungen sind ausgeschaltet" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : " Notificaciones de seguridad desactivadas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications de sécurité sont DÉSACTIVÉES" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : " Le notifiche di sicurezza sono disattivate" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sikkerhetsvarsler er AV" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : " Veiligheidsmeldingen staan UIT" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia dotyczące bezpieczeństwa są WYŁĄCZONE" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : " Notificările de siguranță sunt dezactivate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : " Оповещения о безопасности выключены" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güvenlik Bildirimleri KAPALI" + } + } + } + }, + " Workout Preset" : { + "comment" : "Status row title for workout override enabled (leading space is to separate from symbol)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Motion forudindstilling" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : " Zielbereichsänderung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : " Ejercicio Preestablecido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : " Liikuntatila" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : " Préréglage exercice" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פעילות גופנית" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : " Preset allenamento" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forhåndsinnstilling for trening" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : " Trainingsprogramma" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : " Wstępne ustawienia treningu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : " Presetare antrenament" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пресет физнагрузки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : " Träningsförval" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egzersiz Ön Ayarı" + } + } + } + }, + "–" : { + "comment" : "String denoting lack of a recommended bolus amount in the simple bolus calculator", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + } + } + }, + "– –" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "--" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + } + } + }, + "– – –" : { + "comment" : "No glucose value representation (3 dashes for mg/dL)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "." : { + "comment" : "Full stop character", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + } + } + }, + "%@ %@" : { + "comment" : "The format for an active custom preset. (1: preset symbol)(2: preset name)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "%@ absorbed" : { + "comment" : "Formats absorbed carb value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ استغرق" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ optaget" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ resorbiert" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorbido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ imeytynyt" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorbé(s)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorbed" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ assorbiti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 吸収済" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorbert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ geabsorbeerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ zaabsorbowane" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorvida" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorbiți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ усвоено" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorbované" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ absorberat" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emilen %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ được hấp thụ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 已吸收" + } + } + } + }, + "%@ remaining" : { + "comment" : "Estimated remaining duration with more than a minute", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ tilbage" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ verbleiben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ restante" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ jäljellä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ restant" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ rimanenti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ gjenstår" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ resterend" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pozostało %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ rămase" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Осталось %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ återstår" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ kaldı" + } + } + } + }, + "%@ U Total" : { + "comment" : "The subtitle format describing total insulin. (1: localized insulin total)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ وحدة بشكل كامل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E Total" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ IE gesamt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U Totales" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U yhteensä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U total" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U Total" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U Totali" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "計 %@ 単位" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E Totalt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E Totaal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ J łącznie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U Total" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U total" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ всего ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ j Celkom" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E totalt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toplam %@ Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U Tổng cộng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 单位 总量" + } + } + } + }, + "%@." : { + "comment" : "Appends a full-stop to a statement", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@." + } + } + } + }, + "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." : { + "comment" : "Alert text for failing to cancel temp basal (1: reason description, 2: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@ kunne ikke annullere din nuværende midlertidige basalrate, som er højere end den nye Max basalgrænse, du har indstillet. Dette kan resultere i en højere insulintilførsel end ønsket.\n\nOvervej at suspendere insulintilførslen manuelt og derefter straks genoptage den for at iværksætte basaltilførslen med den nye grænse på plads." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@ konnte Deine aktuelle temporäre Basalrate nicht abbrechen, da diese höher ist als die neue maximale Basalrate, die Du festgelegt hast. Dies kann zu einer höheren Insulinabgabe, als erwünscht führen.\n\nErwäge, die Insulinabgabe manuell zu unterbrechen und dann sofort wieder aufzunehmen, um die Basalabgabe mit dem neuen Grenzwert zu initiieren." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ no pudo cancelar su basal temporal actual, que es más alta que el nuevo límite basal máximo que ha establecido. Esto puede resultar en una administración de insulina superior a la deseada. \n\n Considere suspender la administración de insulina manualmente y luego reanudarla de inmediato para activar la administración basal con el nuevo límite establecido." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ n'a pas pu annuler votre débit basal temporaire actuel, qui est supérieur à la nouvelle limite basale max que vous avez définie. Cela peut entraîner une administration d'insuline plus élevée que souhaitée. \n\nEnvisagez de suspendre l'administration d'insuline manuellement, puis de reprendre immédiatement l'administration basale avec la nouvelle limite en place." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@ non sono stati in grado di cancellare la tua attuale basale temporanea, che è più elevata di quella impostata come nuovo limite massimo di basale. Questo potrebbe comportare una maggiore infusione d'insulina di quanto desiderato. \n\nConsidera di sospendere manualmente l'erogazione d'insulina e quindi di riattivarla immediatamente per attivare l'erogazione d'insulina basale con il corretto limite impostato." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ kunne ikke avbryte den nåværende midlertidige basaldosen, som er høyere enn den nye maksimale basalgrensen du har angitt. Dette kan føre til høyere insulintilførsel enn ønsket. \n\n Vurder å avbryte insulintilførselen manuelt og deretter umiddelbart gjenoppta for å innføre basaltilførsel med den nye grensen på plass." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ kon je huidige tijdelijke basaalsnelheid niet annuleren, die hoger is dan de nieuwe Maximale Basaallimiet die je hebt ingesteld. Dit kan leiden tot een hogere insulinetoediening dan gewenst. \n\nOverweeg om de insulinetoediening handmatig te onderbreken en dan direct het hervatten van de basaaltoediening uit te laten voeren met de nieuwe geldende limiet." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ nie mógł anulować bieżącej tymczasowej dawki podstawowej, która jest wyższa niż nowy ustawiony limit maksymalnej dawki podstawowej. Może to skutkować wyższym niż pożądane podawaniem insuliny. \n\n Rozważ ręczne wstrzymanie podawania insuliny, a następnie natychmiastowe wznowienie podawania dawki podstawowej z obowiązującym nowym limitem." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ nu a putut anula rata bazală temporară actuală, care este mai mare decât noua limită bazală maximă pe care ați setat-o. Acest lucru poate duce la o administrare de insulină mai mare decât se dorește. \n\nLuați în considerare suspendarea manuală a administrării insulinei și apoi reluarea imediată pentru a pune în aplicare administrarea bazală cu noua limită în vigoare." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@ не смог отменить вашу текущую ВБС, которая превышает установленный вами новый предел максимальной ВБС. Это может привести к большему количеству подаваемого инсулина, чем хотелось бы.\n\nРассмотрите возможность приостановить введение инсулина вручную, а затем немедленно возобновить введение базального инсулина с новым установленным лимитом." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@ nedokázal zrušiť vašu aktuálnu dočasnú bazálnu dávku, ktorá je vyššia ako nový maximálny bazálny limit, ktorý ste nastavili. To môže viesť k vyššiemu dodávaniu inzulínu, ako je požadované.\n\nZvážte ručné pozastavenie podávania inzulínu a následné okamžité obnovenie, aby ste uplatnili novým bazálny limit." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ , ayarladığınız yeni Maks Bazal limitinden daha yüksek olan mevcut geçici bazal oranınızı iptal edemedi. Bu, istenenden daha yüksek insülin iletimi ile sonuçlanabilir. \n\n İnsülin iletimini manuel olarak askıya almayı ve ardından yeni limit geçerliyken bazal iletimi etkinleştirmek için hemen devam etmeyi düşünün." + } + } + } + }, + "%1@%2@" : { + "comment" : "Adds a full-stop to a statement (1: statement, 2: full stop character)", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$1@%2$2@" + } + } + } + }, + "%1$@ – %2$@ %3$@" : { + "comment" : "Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ - %2$@ %3$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + } + } + }, + "%1$@ %2$@" : { + "comment" : "Format string combining carb entry quantity and absorption time emoji", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "%1$@ %2$@/U" : { + "comment" : "Format string for carb ratio average. (1: value)(2: carb unit)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/IE" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ /E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ /E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ /j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/U" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@/单位" + } + } + } + }, + "%1$@ + %2$@" : { + "comment" : "Format string combining carb entry time and absorption time\nFormats (1: carb start time) and (2: carb absorption duration)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ + %2$@" + } + } + } + }, + "%1$@ APP SOUNDS" : { + "comment" : "App sounds title text (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ APP LYDE" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ SUONI DELL'APP" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ APP-LYDER" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ DŹWIĘKI APLIKACJI" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ЗВУКИ ПРИЛОЖЕНИЯ" + } + } + } + }, + "%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." : { + "comment" : "Alert message for closed loop off informational modal. (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kører med Lukket Loop i positionen OFF. Din pumpe og CGM fortsætter med at fungere, men appen justerer ikke doseringen automatisk." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ arbeitet mit geschlossenem Regelkreis in der AUS-Position. Deine Pumpe und CGM funktionieren weiter, aber die App passt die Dosierung nicht automatisch an." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ está funcionando con Circuito Cerrado en la posición APAGADO. Su bomba y CGM seguirán funcionando, pero la aplicación no ajustará la dosis automáticamente." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ fonctionne avec la boucle fermée en position ARRÊT. Votre pompe et votre CGM continueront de fonctionner, mais l'application n'ajustera pas automatiquement le dosage." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ è in funzione con Loop chiuso disattivato. La pompa e il CGM continueranno a funzionare, ma l'applicazione non regolerà automaticamente il dosaggio." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ opererer med Lukket Loop i AV-posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ werkt met Gesloten Loop in de UIT stand. Je pomp en CGM blijven werken, maar de app past de dosering niet automatisch aan." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ działa z zamkniętą pętlą w pozycji OFF. Twoja pompa i CGM będą nadal działać, ale aplikacja nie będzie automatycznie dostosowywać insuliny." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ operează cu bucla închisă în poziția OFF. Pompa și CGM-ul vor continua să funcționeze, dar aplicația nu va ajusta automat dozarea." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ работает с замкнутым циклом в положении ВЫКЛ. Ваша помпа и CGM будут продолжать работать, но приложение не будет регулировать дозировку автоматически." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ , KAPALI konumda Kapalı Döngü ile çalışıyor. Pompanız ve CGM çalışmaya devam edecek, ancak uygulama dozajı otomatik olarak ayarlamayacaktır." + } + } + } + }, + "%1$@ is unable to clear the alert from your device" : { + "comment" : "Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan ikke slette advarslen fra din enhed" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kann die Benachrichtigung nicht von Deinem Gerät löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ no puede borrar la alerta de su dispositivo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ne parvient pas à supprimer l'alerte de votre dispositif." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ non è in grado di cancellare l'avviso dal tuo dispositivo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan ikke fjerne varselet fra enheten din" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan de melding niet wissen van je apparaat" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ nie może usunąć alertu z Twojego urządzenia" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ nu poate șterge alerta de pe dispozitiv" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ не удается удалить предупреждение с вашего устройства" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ , uyarıyı cihazınızdan silemiyor" + } + } + } + }, + "%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." : { + "comment" : "Message for alert shown when delivery status is uncertain. (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan ikke kommunikere med insulinpumpen. Loop vil fortsætte med at forsøge at kommunikere med din pumpe, men insulinafgivelsesoplysninger kan ikke opdateres og ingen automatisering kan fortsætte.\nDu kan vente et par minutter for at se, om problemet bliver løst, eller tryk på knappen nedenfor for at få mere at vide om andre muligheder." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kann nicht mit Deiner Insulinpumpe kommunizieren. Die App versucht weiterhin, Deine Pumpe zu erreichen, aber die Informationen zur Insulinabgabe können nicht aktualisiert werden und die Automatisierung kann nicht fortgesetzt werden.\nDu kannst einige Minuten warten, um zu sehen, ob das Problem behoben ist, oder auf die Schaltfläche unten tippen, um mehr über andere Optionen zu erfahren." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ no puede comunicarse con tu bomba de insulina. La aplicación continuará intentando llegar a tu bomba, pero la información de entrega de insulina no se puede actualizar y ninguna automatización puede continuar.\nPuedes esperar varios minutos para ver si el problema resuelve o pulsa el botón de abajo para saber más sobre otras opciones." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ei pysty kommunikoimaan insuliinipumpun kanssa. Sovellus yrittää edelleen yhdistää pumppuun, mutta insuliininannostelun tiedot eivät päivity, eikä automatiikka ole päällä.\nVoit odottaa muutaman minuutin nähdäksesi ratkeaako ongelma, tai voit napauttaa alla olevaa painiketta saadaksesi lisätietoja muista vaihtoehdoista." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ne parvient pas à communiquer avec votre pompe à insuline. L’application continuera d’essayer d’atteindre votre pompe, mais les informations sur l’administration d’insuline ne peuvent pas être mises à jour et aucune automatisation ne peut continuer.\nVous pouvez attendre quelques minutes pour voir si le problème est résolu ou appuyer sur le bouton ci-dessous pour en savoir plus sur les autres options." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ non riesce a comunicare con la pompa. L'app continuerà a provare a contattare la pompa, ma le informazioni sull'erogazione dell'insulina non possono essere aggiornate e l'automazione non può proseguire. \nPuoi attendere alcuni minuti per vedere se il problema si risolve oppure toccare il pulsante qui sotto per saperne di più sulle altre opzioni." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan ikke kommunisere med insulinpumpen. Appen vil fortsette å prøve å nå pumpen din, men insulintilførselsinformasjon kan ikke oppdateres og ingen automatisering kan fortsette.\n Du kan vente flere minutter for å se om problemet løser seg eller trykke på knappen nedenfor for å lære mer om andre alternativer." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan niet communiceren met je insulinepomp. De app blijft proberen je pomp te bereiken, maar de insulinetoedieningsinformatie kan niet worden bijgewerkt en automatisering kan niet plaatsvinden.\nJe kunt enkele minuten wachten om te zien of het probleem is opgelost of tik op de onderstaande knop voor meer informatie over andere opties." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ nie może skomunikować się z Twoją pompą insulinową. Aplikacja będzie nadal próbowała połączyć się z pompą, ale nie można aktualizować informacji o podawaniu insuliny i nie można kontynuować automatyzacji.\n Możesz poczekać kilka minut, aby sprawdzić, czy problem został rozwiązany, lub nacisnąć poniższy przycisk, aby dowiedzieć się więcej o innych opcjach." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ nu poate comunica cu pompa de insulină. Aplicația va continua să încerce să comunice cu pompa, dar informațiile despre administrarea insulinei nu pot fi actualizate și automatizarea nu poate continua.\nPuteți aștepta câteva minute pentru a vedea dacă problema se rezolvă sau apăsați butonul de mai jos pentru a afla mai multe despre alte opțiuni." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ не может связаться с вашей инсулиновой помпой. Приложение будет продолжать попытки связаться с вашей помпой, но информация о доставке инсулина не может быть обновлена, и автоматизация не может продолжаться.\nВы можете подождать несколько минут и посмотреть, разрешится ли проблема, или нажать кнопку ниже, чтобы узнать о других возможностях." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ nedokáže komunikovať s vašou inzulínovou pumpou. Aplikácia sa bude naďalej pokúšať kontaktovať vašu pumpu, ale informácie o podávaní inzulínu nemožno aktualizovať a nemôže pokračovať žiadna automatizácia.\nMôžete počkať niekoľko minút, aby ste zistili, či sa problém vyriešil, alebo klepnutím na tlačidlo nižšie sa dozviete viac o ďalších možnostiach." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kan inte kommunicera med din insulinpump. Appen kommer att fortsätta att försöka nå din pump, men under tiden kan information om insulintillförsel inte uppdateras och automatisering inte fortsätta.\nDu kan vänta flera minuter för att se om problemet löser sig eller klicka på knappen nedan för att läsa mer om andra alternativ." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ insülin pompanızla iletişim kuramıyor. Uygulama pompanıza ulaşmaya çalışmaya devam edecek, ancak insülin iletim bilgileri güncellenemeyecek ve hiçbir otomasyon devam edemeyecektir.\nSorunun çözülüp çözülmediğini görmek için birkaç dakika bekleyebilir veya diğer seçenekler hakkında daha fazla bilgi edinmek için aşağıdaki butona dokunabilirsiniz." + } + } + } + }, + "%1$@ Time Settings Need Attention" : { + "comment" : "Time change alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Tidsindstillinger kræver opmærksomhed" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Zeiteinstellungen erfordern Aufmerksamkeit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ La configuración de la hora necesita atención" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Paramètres d'heure requierent une attention" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Le impostazioni dell'orario richiedono attenzione" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Tidsinnstillinger trenger oppmerksomhet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Tijdinstellingen Hebben Aandacht Nodig" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ustawienia czasu wymagają uwagi" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Setările de timp necesită atenție" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Настройки времени требуют внимания" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Zaman Ayarlarına Dikkat Edilmesi Gerekiyor" + } + } + } + }, + "%1$@ U" : { + "comment" : "Reservoir entry (1: volume value)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ед." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ü" + } + } + } + }, + "%1$@ U left" : { + "comment" : "Low reservoir alert format string. (1: Number of units remaining)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ وحدة متبقية" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E tilbage" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ IE verbleibend" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U left" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U restantes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U jäljellä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U restantes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U left" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U rimaste" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残 %1$@単位" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E igjen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E over" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ J pozostało" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U restante" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U rămase" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ед осталось" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zostáva %1$@ j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E kvar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ü kaldı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U còn lại" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 单位 剩余" + } + } + } + }, + "%1$@ U left: %2$@" : { + "comment" : "Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ وحدة متبقية: %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E tilbage: %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ IE verbleibend: %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U left: %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U restantes: %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U jäljellä: %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U restantes: %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U left: %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U rimaste: %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残 %1$@単位: %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E gjenstår: %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E over: %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ J pozostało: %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U restante: %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U rămase: %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ед осталось: %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zostáva %1$@ j: %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E kvar: %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ü kalan: %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U còn lại: %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 单位 剩余: %2$@" + } + } + } + }, + "%1$@ U/hour @ %2$@" : { + "comment" : "The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ وحدة/ساعة @ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E/time @ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ IE/h @ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/hour @ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/hora @ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/h klo %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/heure @ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/hour @ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/ora @ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/時 @ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E/timen @ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E/uur @ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ J/godzinę @ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/hora @ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/oră @ %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ед/час @ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ j/hod @ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ E/h @ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Ü/saat @ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/giờ @ %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 单位/小时 @ %2$@" + } + } + } + }, + "%1$@ v%2$@" : { + "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ версии %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + } + } + }, + "%1$@ will stop working in %2$@. You will need to rebuild before that." : { + "comment" : "Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ holder op med at fungere i %2$@. Du bliver nødt til at rebuilde før det." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario ricostruirlo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ vil slutte å fungere i %2$@. Du må gjenoppbygge før det." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ przestanie działać w %2$@. Konieczna będzie wcześniejsza odbudowa." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ перестанет работать в %2$@. До этого времени необходимо пересобрать приложение заново." + } + } + } + }, + "%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." : { + "comment" : "Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ holder op med at fungere i %2$@. Du skal opdatere inden da med en ny provisioneringsprofil." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ funktioniert nicht mehr in %2$@. Du musst vor Ablauf mit einem neuen Bereitstellungsprofil aktualisieren." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ dejará de funcionar en %2$@ . Deberá actualizar antes de eso, con un nuevo perfil de aprovisionamiento." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ cessera de fonctionner dans %2$@ . Vous devrez mettre à jour avant cela, avec un nouveau profil de provisioning." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario effettuare l'aggiornamento con un nuovo profilo di provisioning." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ slutter å fungere om %2$@ . Du må oppdatere før det, med en ny klargjøringsprofil." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ stopt met werken in %2$@. Je zult eerder moeten updaten, met een nieuw beschikbaargesteld profiel." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ przestanie działać za %2$@ . Wcześniej konieczna będzie aktualizacja przy użyciu nowego profilu udostępniania." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ nu va mai funcționa în %2$@. Va trebui să actualizați înainte de aceasta, cu un nou profil de asigurare a accesului." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ перестанет работать в %2$@. Вам нужно будет обновить его до этого, используя новую подпись." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@ içinde çalışmayı durduracaktır. Bundan önce yeni bir provizyon profili ile güncelleme yapmanız gerekecektir." + } + } + } + }, + "%1$@: %2$@" : { + "comment" : "Formats (1: carb value) and (2: food type)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ : %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ : %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ : %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@" + } + } + } + }, + "%1$@: %2$@ %3$@" : { + "comment" : "Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit)\nDescription of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ : %2$@ %3$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@: %2$@ %3$@" + } + } + } + }, + "⚠️" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + } + } + }, + "15 min glucose regression coefficient (b₁), continued with decay over 30 min" : { + "comment" : "Description of the prediction input effect for glucose momentum", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 دقيقة معامل انحدار قراءات سكر الدم (b₁), ويستمر بالاضمحلال خلال 30 دقيقة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 min. glukoseregressionskoefficient (b₁), fortsætter med henfald over 30 minutter." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 Minuten Blutzucker-Regressionskoeffizient (b₁), fortgesetzt mit Abfall über 30 min" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coeficiente de regresión de glucosa de 15 minutos (b₁), continuado con decaimiento durante 30 minutos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 min glukoosin regressiokerroin (b₁), hiipuen 30 min kuluessa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coefficient de régression du glucose de 15 minutes (b1), décroissance poursuivie au-delà de 30 min." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 min glucose regression coefficient (b₁), continued with decay over 30 min" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Coefficiente di regressione della glicemia a 15 minuti (b₁), continuato con decadimento per 30 minuti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "15分 グルコース回帰係数 (b₁)、30分退化適用" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 minutters glukose-regresjonskoeffisient (b1), fortsatt med nedbrytning over 30 minutter." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 min glucose regressiecoëficiënt (b₁), gevolgd door afbouw over 30 min" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "15-minutowy współczynnik regresji glukozy (b₁), kontynuowany z rozkładem przez 30 min." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 min coeficiente de regressão de glicose (b₁), continuada com queda em 30 min." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "coeficient de regresie glicemică pe 15 min (b₁), continuat cu o diminuare pe 30 min." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "15-мин коэффициент регрессии гликемии (b1), продолжен с угасанием 30 мин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 minútový regresný koeficient glykémie (b1), pokračujúci s poklesom počas 30 minút" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 minuters glukosregressionskoefficient (b₁), fortsatt med 30 minuters avklingande" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 dakikalık glikoz regresyon katsayısı (b₁), 30 dakika boyunca bozuk devam etti" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "15 phút hồi quy glucose (b₁), tiếp tục phân rã trên 30 phút." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "15分钟葡萄糖回归系数(b1),持续30分钟衰减" + } + } + } + }, + "30 min comparison of glucose prediction vs actual, continued with decay over 60 min" : { + "comment" : "Description of the prediction input effect for retrospective correction", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 دقيقة مقارنة قراءات سكر الدم المتوقعة والفعلية , ويستمر بالاضمحلال خلال 60 دقيقة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min. sammenligning af glukose-forudsigelse kontra faktisk målt glukose, med henfald over 60 minutter." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "30-minütiger Vergleich der Blutzuckerprognose gegenüber dem tatsächlichen Blutzucker, Fortsetzung mit Abfall über 60 min" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comparación de glucosa actual contra la proyectada en 30 minutos, continuada con decaimiento durante 60 minutos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min vertailu ennustetun ja todellisen glukoosin välillä, hiipuen 60 min kuluessa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comparaison sur 30 min de la glycémie prévue par rapport à celle réelle, suivie d'une décroissance (decay) sur 60 min." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min comparison of glucose prediction vs actual, continued with decay over 60 min" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Confronto di 30 minuti tra la previsione della glicemia e quella effettiva, continuato con decadimento per 60 minuti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "30分 グルコース予想値と実際値の比較、60分退化適用" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min sammenligning av glukose-prediksjon vs faktisk, fortsatt med nedbrytning over 60 min." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min vergelijking van glucosevoorspelling versus de werkelijke, gevolgd door afbouw over 60 min" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 minutowe porównanie przewidywania stężenia glukozy w stosunku do rzeczywistego, kontynuowane z rozkładem przez 60 min." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min de comparação da previsão de glicose vs atual, continuada com queda em 60 min." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comparație pe 30 min a glicemiei anticipate față de cea observată, continuată cu o diminuare pe 60 min." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 мин сравнение предсказанной гликемии с действительной, продолжено с угасанием 60 мин" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 min jämförelse av glukosprediktion och faktiskt värde, fortsatt med 60 miuters avklingande." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 dakikalık glikoz tahmini ile gerçek karşılaştırması, 60 dakika boyunca bozuk devam etti" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "30 phút so sánh dự đoán glucose so với thực tế, tiếp tục với sự phân rã hơn 60 phút." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "30分钟葡萄糖预测与实际比较,持续60分钟以上衰减" + } + } + } + }, + "A few seconds remaining" : { + "comment" : "Estimated remaining duration with a few seconds", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Et par sekunder tilbage" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ein paar Sekunden verbleiben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quedan unos segundos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muutama sekunti jäljellä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quelques secondes restantes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pochi secondi rimanenti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Noen sekunder gjenstår" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nog een paar seconden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pozostało kilka sekund" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Câteva secunde rămase" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Осталось несколько секунд" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Några sekunder återstår" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Birkaç saniye kaldı" + } + } + } + }, + "A manual glucose entry must be between %@ and %@" : { + "comment" : "Alert message for a manual glucose entry out of range error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En manuel blodsukkerindtastning skal være mellem %1$@ og %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der manuelle Blutzucker muss zwischen %1$@ und %2$@ liegen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Una entrada de glucosa manual debe estar entre %1$@ y %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötetyn glukoosiarvon on oltava välillä %1$@ – %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une saisie manuelle de la glycémie doit être comprise entre %1$@ et %2$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un inserimento manuale della glicemia deve essere compreso tra %1$@ e %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En manuell BS-registrering må være mellom %1$@ og %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een handmatige glucose-invoer moet tussen %1$@ en %2$@ liggen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ręczny wpis poziomu glukozy musi mieścić się w przedziale od %1$@ do %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "O intrare manuală de glicermie trebuie să fie între %1$@ și %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ручной ввод глюкозы должен находиться между %1$@ и %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det manuellt inmatade blodsockervärdet måste vara mellan %1$@ och %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel KŞ girişi %1$@ ile %2$@ arasında olmalıdır" + } + } + } + }, + "A manual glucose entry must be between %1$@ and %2$@." : { + "comment" : "Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En manuel glukoseindtastning skal være mellem %1$@ og %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der manuelle Blutzucker muss zwischen %1$@ und %2$@ liegen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Una entrada de glucosa manual debe estar entre %1$@ y %2$@ ." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une saisie manuelle de la glycémie doit être comprise entre %1$@ et %2$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un inserimento manuale della glicemia deve essere compreso tra %1$@ e %2$@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En manuell BS-registrering må være mellom %1$@ og %2$@ ." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een handmatige glucose-invoer moet tussen %1$@ en %2$@ liggen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ręczny wpis poziomu glukozy musi mieścić się w przedziale od %1$@ do %2$@ ." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "O intrare manuală de glicemie trebuie să fie între %1$@ și %2$@ ." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ручной ввод глюкозы должен находиться между %1$@ и %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel KŞ girişi %1$@ ile %2$@ arasında olmalıdır." + } + } + } + }, + "A model based on the published absorption of Fiasp insulin." : { + "comment" : "Subtitle of Fiasp preset", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نموذج يستند على امتصاص أنسولين Fiasp." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En model baseret på publiceret data om absorption af Fiasp insulin." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ein Modell basierend auf der veröffentlichten Resorption von Fiasp-Insulin." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "A model based on the published absorption of Fiasp insulin." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modelo basado en la publicación de la absorción de insulina Fiasp." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perustuu Fiasp-insuliinin julkaistuun imeytymismalliin." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modèle basé sur l’absorption de l’insuline FIASP (telle que publiée)." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "A model based on the published absorption of Fiasp insulin." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modello basato sull'assorbimento pubblicato dell'insulina Fiasp." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiaspインスリンの公表吸収率に基づいたモデル。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En modell basert på publisert absorpsjon av Fiasp-insulin." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een model gebaseerd op de gepubliceerde opname van Fiasp insuline." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model oparty na opublikowanej absorpcji insulin Fiasp." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um modelo baseado na absorção publicada da insulina Fiasp." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un model bazat pe absorbția declarată a insulinei Fiasp." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Модель, основанная на опубликованных данных усвоения FIASP инсулина." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model založený na publikovanej absorpcii inzulínu Fiasp." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinmodell baserad på publicerade studier av absorption av Fiasp-insulin." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp insülininin yayınlanmış emilimine dayanan bir model." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mô hình dựa trên sự hấp thụ được công bố đối với insulin Fiasp." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "基于公布的Fiasp胰岛素吸收的模型" + } + } + } + }, + "A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." : { + "comment" : "Subtitle of Rapid-Acting – Adult preset", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نموذج يستند على امتصاص أنسولين Humalog و Novolog و Apidra لدى البالغين." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En model baseret på publiceret data om absorption Humalog, Novolog, og Apidra insulin hos voksne." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ein Modell auf der Grundlage der veröffentlichten Resorption von Humalog, Novolog und Apidra Insulin bei Erwachsenen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modelo basado en la publicación de la absorción de insulina Humalog, Novolog y Apidra en adultos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perustuu Humalog-, Novorapid- ja Apidra-insuliinien julkaistuun imeytymismalliin aikuisilla." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modèle basé sur les absorptions de l’Humalog, Novolog (Novorapid), et Apidra chez l’adulte (telles que publiées)." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modello basato sull'assorbimento pubblicato dell'insulina Humalog, Novolog e Apidra negli adulti." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "大人使用時の Humalog、Novolog、Apidraインスリンの公表吸収率に基づいたモデル。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En modell basert på publisert absorpsjon av Humalog, Novolog og Apidra insulin hos voksne." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een model gebaseerd op de gepubliceerde absorptie van Humalog-, Novolog- en Apidra-insuline bij volwassenen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model oparty na opublikowanej absorpcji insulin Humalog, Novolog/Novorapid i Apidra u dorosłych." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Um modelo baseado na absorção publicada das insulinas Humalog, Novolog e Apidra em adultos." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un model bazat pe absorbția declarată a insulinei Humalog, Novolog și Apidra la adulți." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Модель, основанная на опубликованных данных усвоения Humalog, Novolog и Apidra у взрослых." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model založený na publikovanej absorpcii inzulínu Humalog, Novolog a Apidra u dospelých." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinmodell baserad på publicerade studier av absorption av Humalog-, Novolog- samt Apidra-insulin hos vuxna." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yetişkinlerde yayınlanmış Humalog, Novolog ve Apidra insülin emilimine dayalı bir model." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mô hình dựa trên sự hấp thụ được công bố của các loại insulin Humalog, Novolog và Apidra ở người lớn." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "基于已公布的Humalog,Novolog和Apidra胰岛素在成人中吸收的模型。" + } + } + } + }, + "A new version of %@ is available and is recommended to continue using the app." : { + "comment" : "Software update available section footer (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En ny version af %@ er tilgængelig og anbefales for at fortsætte med at bruge appen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine neue Version von %@ ist verfügbar und es wird empfohlen, die App weiterhin zu verwenden." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hay una nueva versión de %@ disponible y se recomienda continuar usando la aplicación." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une nouvelle version de %@ est disponible et est recommandée pour continuer à utiliser l'application." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "È disponibile una nuova versione di %@ e si consiglia di continuare a utilizzare l'app." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En ny versjon av %@ er tilgjengelig og anbefales for å fortsette å bruke appen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er is een nieuwe versie van %@ beschikbaar die aanbevolen wordt om de app te kunnen blijven gebruiken." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostępna jest nowa wersja %@, która jest zalecana do dalszego korzystania z aplikacji." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "O nouă versiune de %@ este disponibilă și se recomandă să continuați să utilizați aplicația." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Новая версия %@ доступна и рекомендуется для продолжения использования приложения." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 'ın yeni bir sürümü mevcut ve uygulamayı kullanmaya devam etmeniz önerilir." + } + } + } + }, + "A new version of %@ is available." : { + "comment" : "Required software update section footer (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En ny version af %@ er tilgængelig." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine neue Version von %@ ist verfügbar." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hay una nueva versión de %@ disponible." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une nouvelle version de %@ est disponible." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "È disponibile una nuova versione di %@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En ny versjon av %@ er tilgjengelig." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er is een nieuwe versie van %@ beschikbaar." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostępna jest nowa wersja %@ ." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este disponibilă o nouă versiune de %@ ." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доступна новая версия %@ ." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeni bir %@ sürümü mevcuttur." + } + } + } + }, + "A pump must be configured before a bolus can be delivered." : { + "comment" : "Alert message for a missing pump error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En pumpe skal være konfigureret, før en bolus kan leveres." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine Pumpe muss konfiguriert werden, bevor ein Bolus abgegeben werden kann." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Una microinfusadora debe ser configurada antes de que un bolo pueda ser entregado." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumppu on määritettävä, ennen kuin bolus voidaan annostella." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une pompe doit être configurée avant qu'un bolus puisse être administré." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prima di poter erogare un bolo, è necessario configurare una pompa." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En pumpe må konfigureres før en bolus kan tilføres." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een pomp moet worden geconfigureerd voordat een bolus kan worden toegediend." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przed podaniem bolusa należy skonfigurować pompę." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "O pompă trebuie configurată înainte ca un bolus să poată fi livrat." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перед введением болюса необходимо настроить помпу." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "En pump måste ha lagts till och konfigurerats innan en bolus ge ges." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus iletilmeden önce bir pompanın yapılandırılması gerek." + } + } + } + }, + "Absorption Time" : { + + }, + "AcceptRecommendedBolus" : { + "comment" : "Action to copy the recommended Bolus value to the actual Bolus Field", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استخدم قيمة الجرعة الموصى بها" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "AccepterAnbefaletBolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akzeptiere empfohlenen Bolus" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "AceptarBoloRecomendado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "HyväksySuositeltuBolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨ボーラス値を使う" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "AksepterAnbefaltBolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AccepteerVoorgesteldeBolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "AceitarBolusRecomendado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Принятьрекомендуемыйболюс" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akceptovať Odporúčaný Bolus" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ÖnerilenBolusuKabulEt" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "AcceptRecommendedBolus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "按照推荐的大剂量输注" + } + } + } + }, + "Active Carbohydrates" : { + "comment" : "The title of the Carbs On-Board graph", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الكربوهيدرات النشطة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive Kohlenhydrate" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos Activos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiivinen hiilihydraatti" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides actifs" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Carbohydrates" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati attivi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywne węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos Ativos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați activi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Действующие углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívne sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiva kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif Karbonhidrat" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Carbohydrates còn hoạt động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物" + } + } + } + }, + "Active Carbohydrates: %@" : { + "comment" : "The string format describing active carbohydrates. (1: localized glucose value description)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الكربوهيدرات النشطة: %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive kulhydrater: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive Kohlenhydrate: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Carbohydrates: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos Activos: %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiivinen hiilihydraatti: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides actifs: %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Carbohydrates: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati attivi: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質: %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive karbohydrater: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Koolhydraten: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywne węglowodany: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos Ativos: %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați activi: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Действующие углеводы: %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívne sacharidy: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiva kolhydrater: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif Karbonhidrat: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Carbohydrates còn hoạt động: %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物: %@" + } + } + } + }, + "Active Carbs" : { + "comment" : "Title describing quantity of still-absorbing carbohydrates", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "كارب النشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive KH" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos Activos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. hiilari" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides actifs" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Carbs" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati attivi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywne węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos Ativos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați activi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активные углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívne sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiva kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif Karb." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Carbs còn hoạt động" + } + } + } + }, + "Active Insulin" : { + "comment" : "Details for missing data error when active insulin amount is missing\nThe title of the Insulin On-Board graph\nTitle describing quantity of still-absorbing insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنسولين نشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktives Insulin" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina activa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. insuliini" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline active" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Insulin" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存インスリン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Insuline" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywna insulina" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Ativa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină activă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активный инсулин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívny inzulín" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif İnsülin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Insulin còn hoạt động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性胰岛素" + } + } + } + }, + "Active Insulin: %@" : { + "comment" : "The string format describing active insulin. (1: localized insulin value description)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأنسولين النشط: %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiv insulin: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktives Insulin: %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Insulin: %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Activa: %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiivinen insuliini: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline active: %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Insulin: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina attiva: %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存インスリン: %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Insuline: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywna Insulina: %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Ativa: %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină activă: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Действующий инсулин: %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívny inzulín: %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif İnsülin: %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Insulin còn hoạt động: %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性胰岛素: %@" + } + } + } + }, + "Add a new favorite food" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj en ny favoritmad" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi un nuovo cibo preferito" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til en ny favorittmat" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voeg een nieuw favoriet eten toe" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj nowe ulubione jedzenie" + } + } + } + }, + "Add Carb Entry" : { + "comment" : "Title of the user activity for adding carbs", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Carb Entry" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar Entrada de Carb" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää hiilihydraatteja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter des glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Carb Entry" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi inserimento carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "糖質の記入を追加" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kh. Inv. Toevoegen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar Carb" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить запись углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadať sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb Girişi Ekle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khai báo Carb" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加碳水化合物" + } + } + } + }, + "Add CGM" : { + "comment" : "Action sheet title selecting CGM\nThe title of the CGM chooser in settings\nTitle text for button to add CGM device\nTitle text for button to set up a CGM", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إضافة CGM" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj CGM" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar MCG" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää CGM" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter un CGM" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הוסף חיישן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi CGM" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGMを追加" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til CGM" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voeg CGM toe" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj CGM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă CGM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить CGM" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pridať CGM" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till CGM" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM Ekle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khai báo CGM" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加CGM" + } + } + } + }, + "Add Meal" : { + "comment" : "The label of the carb entry button", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إضافة وجبة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj måltid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mahlzeit hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar Alimento" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää ateria" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrer un repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Meal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi pasto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "食事を追加" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voeg Maaltijd toe" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj posiłek" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar Refeição" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă masă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить еду" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadať jedlo" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till måltid" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öğün ekle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khai báo bữa ăn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加用餐信息" + } + } + } + }, + "Add Pump" : { + "comment" : "Action sheet title selecting Pump\nThe title of the pump chooser in settings\nTitle text for button to add pump device\nTitle text for button to set up a Pump", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إضافة مضخة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj pumpe" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar Microinfusora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää pumppu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter une pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Pump" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi pompa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプを追加" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til pumpe" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voeg Pomp toe" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj pompę" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar Bomba" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă pompă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить помпу" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pridať pumpu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till pump" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Ekle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khai báo bơm" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加泵" + } + } + } + }, + "Add Service" : { + "comment" : "Action sheet title selecting service\nThe title of the add service action sheet in settings\nThe title of the add service button in settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj tjeneste" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Service hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Service" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää palvelu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter un service" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Service" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi servizio" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til tjeneste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Service Toevoegen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj usługę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă Serviciu" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить сервис" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till tjänst" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servis Ekle" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Service" + } + } + } + }, + "Adjusted for" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Justeret for" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angepasst für" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustado para" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mukautettu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajusté(e) pour" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Regolato per" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Justert for" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aangepast voor" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostosowane do" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustat pentru" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скорректировано на" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Justerad för" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "için düzeltilmiş" + } + } + } + }, + "Alert Management" : { + "comment" : "Alert Permissions button text\nTitle of alert management screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administration af advarsler" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alarm-Einstellungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestión de Alertas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestion des alertes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestione avvisi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrasjon av varsler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldingbeheer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarządzanie alertami" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestionarea alertelor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управление оповещениями" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyarı Yönetimi" + } + } + } + }, + "Alert Permissions" : { + "comment" : "Alert Permissions button text\nNotification & Critical Alert Permissions screen title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alarmtilladelser" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungsberechtigungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permisos de Alertas" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hälytysten käyttöoikeudet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorisations d'alerte" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permessi di avviso" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varslingsinnstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toestemming Meldingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uprawnienia alertów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permisiuni pentru alarme" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Разрешение оповещений" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behörigheter för Varningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyarı İzinleri" + } + } + } + }, + "Alert Permissions and Mute Alerts" : { + "comment" : "Alert Permissions descriptive text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Advarselstilladelser og dæmpede advarsler" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autorizzazioni avvisi e avvisi disattivati" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varselstillatelser og demp varsler" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uprawnienia do alertów i wyciszanie alertów" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Разрешения на оповещения и отключение звука оповещений" + } + } + } + }, + "Algorithm Experiments" : { + "comment" : "Navigation title for algorithms experiments screen\nThe title of the Algorithm Experiments section in settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritme-eksperimenter" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essais d'algorithmes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esperimenti algoritmo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritmeeksperimenter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritme Experimenten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorytmy Eksperymentalne" + } + } + } + }, + "Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." : { + "comment" : "Algorithm Experiments description.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritmeeksperimenter er valgfrie ændringer af Loop-algoritmen. Disse ændringer er mindre testet end standard Loop-algoritmen, så brug venligst omhyggeligt." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les essais d'algorithme sont des modifications optionnelles de l'algorithme Loop. Ces modifications sont moins testées que l'algorithme Loop standard, alors veuillez les utiliser avec précaution." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gli esperimenti sull'algoritmo sono modifiche opzionali all'algoritmo di Loop. Queste modifiche sono meno testate rispetto all'algoritmo Loop standard, quindi utilizzale con attenzione." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritmeeksperimenter er valgfrie modifikasjoner til Loop-algoritmen. Disse modifikasjonene er mindre testet enn standard Loop-algoritmen, så vær vennlig å bruke dem med forsiktighet." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritme Experimenten zijn optionele aanpassingen aan het Loop Algoritme. Deze aanpassingen zijn minder grondig getest dan het standaard Loop Algoritme, dus gebruik het voorzichtig." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksperymenty algorytmiczne to opcjonalne modyfikacje algorytmu pętli. Te modyfikacje są mniej przetestowane niż standardowy algorytm pętli, więc używaj ich ostrożnie." + } + } + } + }, + "Algorithm Settings" : { + "comment" : "The title of the section containing algorithm settings", + "extractionState" : "manual", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indstillinger for algoritme" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorithmus-Einstellungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustes de Algoritmo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritmin asetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paramètres de l'algorithme" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorithm Settings" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impostazioni algoritmo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritmeinnstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritme-instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienia algorytmu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setări algoritm" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки алгоритма" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritminställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritma Ayarları" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "算法设置" + } + } + } + }, + "All Alerts Muted" : { + "comment" : "Warning text for when alerts are muted", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle alarmer er slået fra" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutti gli avvisi disattivati" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle varsler er dempet" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wszystkie alerty wyciszone" + } + } + } + }, + "All alerts muted until" : { + "comment" : "Label for when mute alert will end", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle advarsler er slået fra indtil" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle Alarme stummgeschaltet bis" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutti gli avvisi disattivati fino a" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle varsler er dempet inntil" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wszystkie alerty wyciszono do" + } + } + } + }, + "All Favorites" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle favoritter" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle Favoriten" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tutti i preferiti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle favoritter" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wszystkie ulubione" + } + } + } + }, + "Amount Consumed" : { + "comment" : "Label for carb quantity entry row on carb entry screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forbrugt mængde kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH-Menge gegessen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantité consommée" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantità consumata" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mengde karbohydrater\n(Mengde inntatt)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilość węglowodanów" + } + } + } + }, + "Amplitude" : { + "comment" : "The title of the Amplitude service", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ampiezza" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplituda" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } + } + } + }, + "An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." : { + "comment" : "Warning to ensure the carb entry is accurate during an override", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En aktiv Override ændrer dit kulhydratforhold og din insulinfølsomhed. Hvis du ikke ønsker, at dette skal påvirke din bolusberegning og dit forventede glukose, kan du overveje at slå Override fra." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine aktive Voreinstellung verändert Dein Kohlenhydratverhältnis und Deine Insulinempfindlichkeit. Wenn Du nicht möchtest, dass sich dies auf Deine Bolusberechnung und Deinen prognostizierten Blutzucker auswirkt, solltest Du die Voreinstellung deaktivieren." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un Ajuste Temporal activo modifica la proporción de carbohidratos y la sensibilidad a la insulina. Si no deseas que esto afecte el cálculo del bolo y la glucosa proyectada, considera desactivar el Ajuste Temporal." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un ajustement actif modifie votre ratio de glucides et votre sensibilité à l'insuline. Si vous ne voulez pas que cela affecte le calcul du bolus et votre glycémie projetée, envisagez de désactiver l'ajustement." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un Override attivo sta modificando il rapporto di carboidrati e la sensibilità insulina. Se non si vuole che questo influisca sul calcolo del bolo e sulla glicemia prevista, si consiglia di disattivare la funzione di Override." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En aktiv overstyring modifiserer ditt karbohydratforhold og insulinfølsomhet. Hvis du ikke vil at dette skal påvirke bolusberegningen og projisert blodsukker, bør du vurdere å slå av overstyringen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een actieve override wijzigt je koolhydraatratio en je insulinegevoeligheid. Als je niet wilt dat dit je bolusberekening en voorspelde glucose beïnvloedt, kun je overwegen de override uit te schakelen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywny Cel Tymczasowy (Override) modyfikuje stosunek węglowodanów i wrażliwość na insulinę. Jeśli nie chcesz, aby wpłynęło to na obliczenie bolusa i przewidywaną glikemię, rozważ wyłączenie Celu Tymczasowego." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un modificator activa a schimbat raportul dintre carbohidrați și insulină cât și sensibilitatea la insulină. Dacă nu doriți ca acest lucru să vă afecteze calculul bolusului și gllicemia prognozată, luați în considerare dezactivarea modificatorului." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активные временные цели изменяют соотношение углеводов и чувствительность к инсулину. Если вы не хотите, чтобы это влияло на расчет болюса и прогнозируемый уровень глюкозы, отключите эту функцию." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif bir geçersiz kılma, karbonhidrat oranınızı ve insülin duyarlılığınızı değiştiriyor. Bunun bolus hesaplamanızı ve öngörülen glikozu etkilemesini istemiyorsanız geçersiz kılmayı kapatmayı düşünün." + } + } + } + }, + "An error occurred while trying to save your carb entry." : { + "comment" : "Alert message for a carb entry persistence error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der opstod en fejl under forsøget på at gemme kulhydratindtastning." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beim Speichern Deiner Eingabe der Kohlenhydrate ist ein Fehler aufgetreten." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se produjo un error al intentar guardar la entrada de carbohidratos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virhe hiilihydraattien tallennuksessa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une erreur est survenue lors de l'enregistrement de votre saisie manuelle de glucides." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si è verificato un errore durante il tentativo di salvare l'inserimento dei carboidrati." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det oppstod en feil under forsøk på å lagre karbohydratregistreringen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er is een fout opgetreden tijdens het opslaan van je koolhydraatinvoer." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wystąpił błąd podczas próby zapisania wpisu dotyczącego węglowodanów." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare la încercarea de salvare a carbohidraților." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Произошла ошибка при попытке сохранить запись об углеводах." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ett fel uppstod när du skulle spara dina kolhydrater." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidrat girişinizi kaydetmeye çalışırken bir hata oluştu." + } + } + } + }, + "An error occurred while trying to save your manual glucose entry." : { + "comment" : "Alert message for a manual glucose entry persistence error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der opstod en fejl under forsøget på at gemme en manuel blodsukkerindtastning." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beim Speichern Deines manuell eingegebenen Blutzuckers ist ein Fehler aufgetreten." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se produjo un error al intentar guardar la entrada manual de glucosa." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virhe glukoosiarvon tallennuksessa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une erreur est survenue lors de l'enregistrement de votre saisie manuelle de glycémie." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si è verificato un errore durante il tentativo di salvare l'inserimento manuale della glicemia." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det oppstod en feil under forsøk på å lagre den manuelle BS-registreringen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er is een fout opgetreden tijdens het opslaan van je handmatige glucose-invoer." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wystąpił błąd podczas próby zapisania ręcznego wpisu o glukozie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare la încercarea de salvare a glicemiei introduse manual." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Произошла ошибка при попытке сохранить данные о глюкозе, введенные вручную." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ett fel uppstod när du skulle spara ditt blodsockervärde." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel KŞ girişinizi kaydetmeye çalışırken bir hata oluştu." + } + } + } + }, + "An unexpected onboarding error state occurred." : { + "comment" : "Invalid onboarding state", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der er opstået en uventet fejltilstand i forbindelse med onboarding." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ein unerwarteter Fehlerstatus beim Onboarding ist aufgetreten." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se ha producido un error inesperado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un état d'erreur innatendu a eu lieu durant le processus d'intégration" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si è verificato un errore di onboarding imprevisto." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En uventet onboarding-feiltilstand oppstod." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er is een onverwachte onboarding-foutstatus opgetreden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niespodziewany błąd wdrażania" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "A apărut o eroare neașteptată de stare la inițiere." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Возникла непредвиденная ошибка подключения." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beklenmeyen bir ekleme hatası durumu oluştu." + } + } + } + }, + "An updated bolus recommendation is available." : { + "comment" : "Alert message when glucose data returns while on bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "En opdateret bolusanbefaling er tilgængelig." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine aktualisierte Bolusempfehlung ist verfügbar." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hay una recomendación actualizada de bolo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päivitetty bolussuositus on saatavilla." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Une recommandation de bolus mise à jour est disponible." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "È disponibile una raccomandazione aggiornata sul bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "En oppdatert bolusanbefaling er tilgjengelig." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Een bijgewerkte aanbevolen bolus is beschikbaar." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostępna jest zaktualizowana rekomendacja bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este disponibilă o recomandare de bolus nouă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доступна обновленная рекомендация болюса." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det finns nu en ny bolusrekommendation." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Güncellenmiş bir bolus önerisi mevcuttur." + } + } + } + }, + "API Key" : { + "comment" : "The title of the amplitude API key credential", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "API nøgle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "API-avain" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clé API" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiave API" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "API キー" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Nøkkel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "API-ключ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kľúč API" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Anahtarı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } + } + } + }, + "API Secret" : { + "comment" : "The title of the nightscout API secret credential", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "API kodeord" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clave secreta API" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "API-salasana" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secret API" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "एपीआई पास्वर्ड" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiave personale API" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "APIシークレット" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Hemmelighet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chave API" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secretul API" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Секрет" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } + } + } + }, + "App Profile" : { + "comment" : "Settings app profile section", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "App-profil" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "App-Profil" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil de la aplicación" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil de l'application" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פרופיל אפליקציה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilo app" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "App-profil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "App-Profiel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil aplikacji" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Профиль приложения" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulama Profili" + } + } + } + }, + "Are you sure you want to delete all history entries?" : { + "comment" : "Action sheet confirmation message for pump history deletion", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette alle gamle indtastninger?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Möchtest Du wirklich alle Verlaufseinträge löschen?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Estás seguro de querer eliminar todos las entradas históricas?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti poistaa kaikki historiatiedot?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voulez-vous vraiment supprimer toutes les entrées de l’historique?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטוח שברצונך למחוק את כל ערכי ההיסטוריה?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare tutte le voci della cronologia?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "入力履歴をすべて削除しますか?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette alle historieoppføringer?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je de gehele pompgeschiedenis wilt verwijderen?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy jesteś pewien, że chcesz usunąć z Loop wszystkie dane historyczne pompy?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tem certeza de que deseja excluir todas as entradas do histórico?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sigur doriți să ștergeți toate înregistrările din istoric?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтвердите удаление всех записей истории?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säkert att du vill radera all händelsehistorik?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tüm geçmiş girişlerini silmek istediğinizden emin misiniz?" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn có chắc muốn xóa hết các dữ liệu cũ?" + } + } + } + }, + "Are you sure you want to delete all logged dose entries?" : { + "comment" : "Action sheet confirmation message for logged dose deletion", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på, at du vil slette alle logget dosis?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Möchtest Du wirklich alle protokollierten Dosis Einträge löschen?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Estás seguro de que quieres borrar todas las entradas de dosis registradas?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti poistaa kaikki kirjatut annostelutiedot?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voulez-vous vraiment supprimer toutes les entrées de dose enregistrées?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטוח שברצונך למחוק את כל ערכי המנות?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare tutte le dosi inserite?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette alle loggførte doseoppføringer?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je de gehele doseringsgeschiedenis wilt verwijderen?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy na pewno chcesz usunąć wszystkie zapisane wpisy dawek?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sigur doriți să ștergeți toate înregistrările despre dozele de insulina?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уверены, что хотите удалить все зарегистрированные записи о дозах?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Är du säker på att du vill ta bort alla dina loggade doser?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Günlüğe kaydedilen tüm doz girişlerini silmek istediğinizden emin misiniz?" + } + } + } + }, + "Are you sure you want to delete all reservoir values?" : { + "comment" : "Action sheet confirmation message for reservoir deletion", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette alle reservoirværdier?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Möchtest Du wirklich alle Reservoirwerte löschen?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Estás seguro de querer eliminar todos los datos del reservorio?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti poistaa kaikki säiliön arvot?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voulez-vous vraiment supprimer toutes les valeurs de réservoir?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטוח שברצונך למחוק את כל ערכי המאגר?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare tutti i valori del serbatoio?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リザーバの値をすべて削除しますか?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette alle reservoarverdier?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je alle waarden van het reservoir wilt verwijderen?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy jesteś pewien, że chcesz usunąć wszystkie wartości zbiornika?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tem certeza de que deseja excluir todos os valores do reservatório?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sigur doriți să ștergeți toate valorile de rezervor?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтвердите удаление всех записей резервуара?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säkert att du vill radera alla reservoarvärden?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tüm rezervuar değerlerini silmek istediğinizden emin misiniz?" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn có chắc muốn xóa hết mọi giá trị của ngăn chứa insulin?" + } + } + } + }, + "Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på, at du vil slette alle dine %@ data?\n(Denne handling kan ikke fortrydes)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Möchtest Du wirklich alle %@-Daten löschen?\n(Diese Aktion kann nicht rückgängig gemacht werden)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Estás seguro de que quieres eliminar todos tus datos de %@ ?\n (Esta acción no es reversible)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti poistaa kaikki %@ tietosi?\n(Tämä toiminto ei ole palautettavissa)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voulez-vous vraiment effacer toutes vos valeurs de %@?\n(Cette action n'est pas réversible)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטוח שברצונך למחוק את כל מידע %@?\n(פעולה זו בלתי הפיכה)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare tutti i tuoi dati %@ ?\n (Questa azione non è reversibile)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette alle dine %@ Data?\n(Denne handlingen kan ikke angres)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je al je %@ Gegevens wilt verwijderen?\n(Deze actie is niet omkeerbaar)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy na pewno chcesz usunąć wszystkie swoje dane %@ ?\n (Ta czynność jest nieodwracalna)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sunteţi sigur că doriţi să ştergeţi toate datele %@.\n(Această acţiune nu este reversibilă)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уверены, что хотите удалить все свои данные %@ ?\n (Это действие необратимо)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vill du ta bort alla dina %@data?\n(Denna åtgärd är inte reversibel)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tüm %@ Verilerinizi silmek istediğinizden emin misiniz?\n (Bu eylem geri alınamaz)" + } + } + } + }, + "Are you sure you want to delete this CGM?" : { + "comment" : "Confirmation message for deleting a CGM", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هل أنت متأكد أنك تريد حذف هذا CGM؟" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på, at du vil slette denne CGM?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bist Du sicher, dass Du dieses CGM löschen möchtest?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Está seguro de que quiere eliminar este MCG?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti poistaa CGM:n?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voulez-vous vraiment supprimer ce CGM?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטוח שברצונך למחוק את חיישן זה?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare questo CGM?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このCGMを削除しますか?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette denne CGM?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je deze CGM wilt verwijderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy na pewno chcesz usunąć ten CGM?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você está certo que quer remover este CGM?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sunteți sigur că doriți să ștergeți acest CGM?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уверены, что хотите удалить этот CGM?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naozaj chcete odstrániť toto CGM?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Är du säker på att du vill radera denna CGM?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu CGM'i silmek istediğinizden emin misiniz?" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn có chắc sẽ xóa CGM này?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "确定要删除该CGM数据源?" + } + } + } + }, + "Are you sure you want to delete this food?" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på, at du vil slette denne mad?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bist Du sicher, dass Du diesen Favoriten löschen möchtest?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare questo cibo?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette denne maten?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy na pewno chcesz usunąć to jedzenie?" + } + } + } + }, + "Are you sure you want to delete this service?" : { + "comment" : "Confirmation message for deleting a service", + "extractionState" : "manual", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opravdu chcete tuto službu smazat?" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på, du vil slette denne service?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bist Du sicher, dass Du diesen Dienst löschen möchtest?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Está seguro de que desea eliminar este servicio?" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haluatko varmasti poistaa tämän palvelun?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voulez-vous vraiment supprimer ce service?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטוח שברצונך למחוק את שירות זה?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sei sicuro di voler eliminare questo servizio?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er du sikker på at du vil slette denne tjenesten?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weet je zeker dat je deze service wil verwijderen?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy na pewno chcesz usunąć tę usługę?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ești sigur că vrei să ștergi acest serviciu?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы уверены, что хотите удалить этот сервис?" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naozaj chcete odstrániť túto službu?" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vill du ta bort den här tjänsten?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu servisi silmek istediğinizden emin misiniz?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Are you sure you want to delete this service?" + } + } + } + }, + "at %@" : { + "comment" : "Format fragment for a specific time", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "في %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "at %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "um %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "en %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "klo %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "à %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ב-%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "a %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 時点" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "kl %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "om %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "o %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "em %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "la %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В %@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "o %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kl. %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "lúc %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@分钟内" + } + } + } + }, + "Authenticate to Bolus %@ Units" : { + "comment" : "The message displayed during a device authentication prompt for bolus specification", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المصادة على ضخ %@ وحدات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Godkend bolus af %@ Enheder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusabgabe von %@ IE bestätigen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticar para Bolo %@ Unidades" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista bolus %@ yksikköä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifiez-vous pour faire un bolus de %@ Unités" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticate to Bolus %@ Units" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esegui l'autenticazione per il bolo di %@ Unità" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス %@単位 認証してください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiserer for å gi %@ Enheter i Bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticeer om %@ E te Bolussen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoryzacja Bolusa %@ jednostek" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentique para Bolus de %@ Unidades" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentificare pentru bolus %@ unități" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подтверждение болюса %@ ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potvrdiť pre Bolus %@ Jednotky" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Godkänn bolus på %@ enheter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus için kimlik doğrula %@ Ünite" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xác thực liều Bolus %@ Units" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "解锁以输注大剂量 %@ 单位" + } + } + } + }, + "Authenticate to log %@ Units" : { + "comment" : "The message displayed during a device authentication prompt to log an insulin dose", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Godkend for at logge %@ enheder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifiziere Dich, um %@ Einheiten zu protokollieren." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autenticarse para registrar %@ Unidades" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista kirjaus %@ yksikköä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authentifier pour enregistrer %@ unités" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esegui l'autenticazione per registrare %@ Unità" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentiser for å logge %@ Enheter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Authenticeer om %@ Eenheden te registreren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autoryzuj, aby podać %@ Jednostki" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Autentifică-te pentru a înregistra %@ unități" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пройдите аутентификацию для подтверждения болюса %@ Единиц" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Godkänn att logga %@ enheter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ Ünite günlüğe kaydetmek için kimlik doğrulaması yapın" + } + } + } + }, + "Basal Rate Schedule" : { + "comment" : "Details for configuration error when basal rate schedule is missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جدول الضخ المستمر" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basalrateskema" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basalraten-Plan" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perfil Basal" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaaliohjelma" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programme débit basal" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Rate Schedule" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tabella di velocità basale" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基礎レートスケジュール" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsplan for basaldoser" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaalsnelheidschema" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Harmonogram dawki standardowej" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programação da Taxa Basal" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orar rate bazale" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скорости базала" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Harmonogram bazálnej dávky" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaldosschema" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bazal Oran Çizelgesi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lịch biểu tiêm liều basal" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "基础率表" + } + } + } + }, + "Basal Rates" : { + "comment" : "The title of the basal rate profile screen\n The title text for the basal rate schedule", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الضخ المستمر" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Úrovně bazálu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basalrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basalrate" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Rates" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tasas basales" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaalitasot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Débits basaux" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Rates" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velocità basali" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "基礎レート" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal-satser" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaalsnelheden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dawka Podstawowa (Baza)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taxas Basais" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rate bazale" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скорости базала" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bazálne dávky" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaldoser" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bazal Oranlar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lịch biểu tiêm liều nền" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "基础率" + } + } + } + }, + "Based on your predicted glucose, no bolus is recommended." : { + "comment" : "Caption for bolus screen notice when no bolus is recommended for the predicted glucose", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baseret på din forventede glukose anbefales ingen bolus." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basierend auf Deinem vorhergesagten Blutzucker wird kein Bolus empfohlen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basándose en su glucosa proyectada, no se recomienda ningún bolo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sur la base de votre glycémie prévue, aucun bolus n’est recommandé." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בהתבסס על הגלוקוז החזוי שלך, לא מומלץ שום בולוס." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In base alla glicemia prevista, non è consigliato alcun bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basert på ditt forventede blodsukker, anbefales ingen bolus." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Op basis van je voorspelde glucose, wordt een bolus niet aanbevolen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Na podstawie przewidywanej glikemii nie zaleca się podawania bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pe baza glicemiei prognozate, nu se recomandă niciun bolus." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Основываясь на вашей прогнозируемой глюкозе, болюс не рекомендуется." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini KŞ'ne bağlı olarak bolus önerilmez." + } + } + } + }, + "Bluetooth\nOff" : { + "comment" : "Message to the user to that the bluetooth is off", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth slået fra" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth aus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nApagado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth ei ole käytössä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth désactivé" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nDisattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blåtann\nAv" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nUit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth jest wyłączony" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth \nOprit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\n Выключен" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth Av" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nKapalı" + } + } + } + }, + "Bluetooth\nUnavailable" : { + "comment" : "Message to the user that bluetooth is unavailable to the app", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth ikke tilgængelig" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth nicht verfügbar" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth \nNo Disponible" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth ei ole käytettävissä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nIndisponible" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nNon disponibile" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blåtann\nUtilgjengelig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nNiet Beschikbaar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth niedostępny" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth \nIndisponibil" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\n Недоступен" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth är inte tillgängligt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nKullanılamıyor" + } + } + } + }, + "Bluetooth Off Alert" : { + "comment" : "Bluetooth off alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Advarsel om Bluetooth slået fra" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth-Aus Warnung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerta de Bluetooth apagado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth ei ole käytössä -hälytys" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth désactivé" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avviso Bluetooth disattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth Avslått-varsel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth Uit Melding" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alert! Bluetooth jest wyłączony!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alertă Bluetooth dezactivat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оповещение об отключении Bluetooth" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varning Bluetooth är Av" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth Kapalı Uyarısı" + } + } + } + }, + "Bluetooth Unavailable Alert" : { + "comment" : "Bluetooth unavailable alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth er ikke tilgængelig" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth nicht Verfügbar-Warnung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerta de Bluetooth no disponible" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth ei ole käytettävissä -hälytys" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth indisponible" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avviso Bluetooth non disponibile" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varsel om at Bluetooth er utilgjengelig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth Niet Beschikbaar Melding" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alarm! Bluetooth niedostępny" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alertă Bluetooth indisponibil" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Оповещение о недоступности Bluetooth" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varning Bluetooth är inte tillgänglig" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth Kullanılamıyor Uyarısı" + } + } + } + }, + "Bolus" : { + "comment" : "Label for bolus entry row on bolus screen\nLabel for bolus entry row on simple bolus screen\nThe label of the bolus entry button\nTitle for bolus entry screen", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量" + } + } + } + }, + "Bolus Issue" : { + "comment" : "The notification title for a bolus issue", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusproblem" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Problem" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problema con el bolo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problème avec le bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problema con il bolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus feil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusprobleem" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem z bolusem" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problemă bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проблема с подачей болюса" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Sorunu" + } + } + } + }, + "Bolus Recommendation Updated" : { + "comment" : "Alert title for an updated bolus recommendation", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusanbefaling opdateret" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisierte Bolusempfehlung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendación de bolo fue actualicada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolussuositus päivitetty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandation de Bolus modifiée" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "המלצת בולוס התעדכנה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raccomandazioni sul bolo aggiornate" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus anbefaling er oppdatert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Bolus Bijgewerkt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaktualizowano rekomendowanego bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizare Recomandare bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендации по болюсу обновлены" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det finns en ny bolusrekommendation" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Önerisi Güncellendi" + } + } + } + }, + "Bolus Summary" : { + "comment" : "Title for card displaying carb entry and bolus recommendation", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus-resumé" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Zusammenfassung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resumen del bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusyhteenveto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Résumé du bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סיכום" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Riepilogo bolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus oppsummering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolussamenvatting" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podsumowanie bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezumat Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Суммарный болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus sammanfattning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Özeti" + } + } + } + }, + "Bolus Too Small" : { + "comment" : "Alert title for a bolus too small validation error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus for lille" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus zu gering" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo demasiado pequeño" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus trop petit" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס קטן מדי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo troppo piccolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus er for liten" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Te Klein" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Za mały bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus prea mic" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс слишком маленький" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Çok Küçük" + } + } + } + }, + "Bolused %1$@ of %2$@" : { + "comment" : "The format string for bolus progress. (1: delivered volume)(2: total volume)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم ضخ %1$@ من %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus %1$@ af %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ von %2$@ verabreicht" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administró bolo %1$@ de %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus %1$@ / %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus délivré %1$@ sur %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolused %1$@ of %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo %1$@ di %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ のうち %1$@ ボーラス済" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus %1$@ av %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ van %2$@ gebolust" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podano %1$@ z %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entregue %1$@ of %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus administrat %1$@ of %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подан болюс%1$@ из %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podaný bolus %1$@ z %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Givit bolus %1$@ av %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İletilen Bolus %1$@ / %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đã thực hiện Bolus %1$@ của %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量已输注%1$@ of %2$@" + } + } + } + }, + "Bolusing %1$@" : { + "comment" : "The format string for bolus in progress showing total volume. (1: total volume)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يضخ %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusabgabe %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrando bolo de %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annetaan bolus %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus en cours %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusing %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo in corso %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ボーラス中" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gir bolus %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolussen %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podawanie %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicando %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus în administrare %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подается болюс" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus sa podáva" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ger bolus %1$@ " + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus %1$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đang thực hiện bolus %1$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@大剂量注射中" + } + } + } + }, + "Cancel" : { + "comment" : "Cancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلغاء" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zrušit" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuller" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abbrechen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumoa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuler" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancel" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "निरस्त" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annulla" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャンセル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annuleer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anuluj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renunță" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отмена" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zrušiť" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İptal" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hủy bỏ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消" + } + } + } + }, + "Canceling Bolus" : { + "comment" : "The title of the cell indicating a bolus is being canceled", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلغاء الجرعة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annullerer bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus abbrechen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelando bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kumotaan bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annulation du Bolus en cours" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Canceling Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annullamento bolo in corso" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラスをキャンセルします" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryter bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Annuleren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anulowanie bolusa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cancelando Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Întrerupere Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отмена болюса" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus sa ruší" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbryter bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus İptal ediliyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hủy bỏ liều Bolus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消大剂量" + } + } + } + }, + "Carb effects" : { + "comment" : "Details for missing data error when carb effects are missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأثيرات الكارب" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydrateffekter" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kohlenhydrat-Wirkungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efectos de carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraattivaikutus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effets des glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carb effects" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effetto carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "糖質効果" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb effekter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraateffecten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wpływ węglowodanów" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efeitos Carb" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efecte carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Влияние углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Účinky sacharidov" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydrateffekter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidrat etkileri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "các tác động của Carb" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水效果" + } + } + } + }, + "Carb Entry" : { + "comment" : "Label for carb entry row on bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH-Eintrag" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrada de Carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraatit" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrée de glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פחמימות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati inseriti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraatinvoer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź węglowodany" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitate CH" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить запись углеводов" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb Girişi" + } + } + } + }, + "Carb Ratio Schedule" : { + "comment" : "Details for configuration error when carb ratio schedule is missing", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsplan for kulhydratforhold" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeitplan für das Kohlenhydratverhältnis" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calendario de ratio de carbohidratos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programme des ratios Insuline-Glucides" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tabella del rapporto carboidrati" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsplan for karbohydratforhold" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraatratioschema" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Harmonogram Współczynnika Węglowodanowego" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programul raportului de carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Расписание соотношения углеводов" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb Oranı Programı" + } + } + } + }, + "Carb Ratios" : { + "comment" : "The title of the carb ratios schedule screen\n The title text for the carb ratio schedule", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "معاملات الكارب" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydratforhold" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH-Verhältnis" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carb Ratios" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ratios de carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraattisuhteet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ratios Insuline-Glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carb Ratios" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rapporti carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carb Ratios" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb forhold" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraatratio's" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Współczynniki węglowodanowe" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taxas de Carbs" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raport carbohidrați/insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Соотношения углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inzulínovo sacharidový pomer" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinkvoter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidrat Oranları" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carb Ratios" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水化合物吸收率" + } + } + } + }, + "carb-entry-title-add" : { + "comment" : "The title of the view controller to create a new carb entry", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Carb Entry" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kohlenhydrate hinzufügen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Add Carb Entry" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar Entrada de Carb" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää hiilihydraatteja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter des glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הוספת רשומת פחמימות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi inserimento carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "糖質の記入を追加" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kh. Inv. Toevoegen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar Carb" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить запись углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadať sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb Girişi Ekle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khai báo Carb" + } + } + } + }, + "Carbohydrate Entry Too Large" : { + "comment" : "Title for bolus screen warning when carbohydrate entry is too large", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydratindtastning for stor" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH-Eintrag zu groß" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrada de carbohidratos demasiado grande" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les glucides saisis sont trop important" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות פחמימות גדולה מדי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati inseriti troppo alti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydratinntaket er for stort" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraatinvoer Te Veel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wpis węglowodanów za duży" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Intrarea de carbohidrați este prea mare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Слишком много углеводов" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidrat Girişi Çok Büyük" + } + } + } + }, + "Carbohydrates" : { + "comment" : "Label for carbohydrates entry row on simple bolus screen\nTitle of the prediction input effect for carbohydrates", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الكربوهيدرات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kohlenhydrate" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraatit" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrates" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidratlar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrates" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水化合物" + } + } + } + }, + "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" : { + "comment" : "Description of the prediction input effect for carbohydrates. (1: The glucose unit string)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الكارب الذي تم امتصاصه (جرام) ÷ معامل الكارب (جرام لكل وحدة) × حاسية الأنسولين (%1$@/وحدة)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydrater absorberet (g) ÷ Kulhydratratio (g/E) × Insulinfølsomhed (%1$@/E)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resorbierte Kohlenhydrate (g) ÷ Kohlenhydratfaktor (g/IE) × Insulinempfindlichkeit (%1$@/IE)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos absorbidos (gr) ÷ Relación de Carbohidratos (gr/U) x Sensibilidad a Insulina (%1$@/U)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imeytyneet hiilihydraatit (g) ÷ Hiilihydraattisuhde (g/U) × Insuliiniherkkyys (%1$@/U)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides Absorbés (g) ÷ Ratio Glucides (g/U) x Sensibilité à l'insuline (%1$@/U)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati assorbiti ÷ Rapporto carboidrati (gr/U) × Sensibilità insulinica (%1$@/U)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "吸収済糖質(g) ÷ 糖質比 (g/U) × インスリン効果値(%1$@/U)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Absorberte karbohydrater (g) ÷ Karbforhold (g/E) × insulinfølsomhet ( %1$@ /E)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opgenomen Koolhydraten (g) ÷ Koolhydraatratio (g/E) × Insulinegevoeligheid (%1$@/E)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ilość węglowodanów (g) ÷ stosunek węglowodanów (g/J) × czułość insuliny (%1$@/J)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs Absorvidos (g) ÷ Relação Carb (g/U) × Sensibilidade a Insulina (%1$@/U)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați absorbiți (g) ÷ Raport carbohidrați (g/U) × Factor de sensibilitate la insulină (%1$@/U)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Усвоенные углеводы (г) ÷ Коэффициент углеводов (г/U) × Чувствительность к инсулину (%1$@/U)" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Absorbované sacharidy (g) ÷ Inzulínovo sacharidový pomer (g/j) × Faktor citlivosti na inzulín (%1$@/j)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Absorberade kolhydrater (g) ÷ Insulinkvot (g/E) × Insulinkänslighet (%1$@/E)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emilen Karb. (gr) ÷ Karb. Oranı (gr/Ü) × İnsulin duyarlılığı (%1$@/Ü)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khối lượng carb tiêu thụ (g) ÷ Tỷ lệ Carb (g/U) × Độ nhạy của Insulin (%1$@/U)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已吸收碳水化合物(克)÷碳水化合物吸收率(克 / 单位)×胰岛素敏感系数 (%1$@/单位)" + } + } + } + }, + "Caution" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forsigtig" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Achtung" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attenzione" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forsiktig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorzichtig" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwaga" + } + } + } + }, + "Change the pump battery immediately" : { + "comment" : "The notification alert describing a low pump battery", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قم بتغيير بطارية المضخة على الفور" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Udskift pumpebatteri omgående" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wechsel sofort die Pumpenbatterie" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change the pump battery immediately" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambie la batería de la bomba de inmediato" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihda pumpun paristo välittömästi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer immédiatement la pile de la pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change the pump battery immediately" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sostituisci immediatamente la batteria della pompa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すぐにポンプの電池を替えてください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skift pumpebatteriet umiddelbart" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vervang direct de batterij van de pomp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Natychmiast wymienić baterię pompy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Troque a bateria da bomba imediatamente" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schimbați imediat bateria pompei" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немедленно замените батарейку в помпе" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ihneď vymeňte batériu pumpy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Byt pumpbatteri nu" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa pilini hemen değiştirin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thay pin máy bơm ngay" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "立即更换胰岛素泵电池" + } + } + } + }, + "Change the pump reservoir now" : { + "comment" : "The notification alert describing an empty pump reservoir", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قم بتغيير خزان المضخة الآن" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skift pumpereservoir nu" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wechsel jetzt das Pumpenreservoir" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change the pump reservoir now" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambie el depósito de la bomba ahora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vaihda pumpun säiliö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Changer maintenant le réservoir de la pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Change the pump reservoir now" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambia ora il serbatoio della pompa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプのレザーバを替えてください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bytt pumpereservoar nå" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vervang het pompreservoir nu" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmień zbiorniczek w pompie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Troque o reservatório da bomba agora" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schimbați rezervorul pompei acum" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замените резервуар помпы сейчас" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ihneď vymeňte zásobník pumpy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Byt pumpreservoar nu" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa rezervuarını şimdi değiştirin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thay ngăn chứa insulin bây giờ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "立即更换储药器" + } + } + } + }, + "Check settings" : { + "comment" : "Details for configuration error when one or more loop settings are missing", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكد من الإعدادات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontroller indstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfe die Einstellungen." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check settings" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificar ajustes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkista asetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier les paramètres" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check settings" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla le impostazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定を確認する" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk innstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleer instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź ustawienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique as configurações" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați setările" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверьте настройки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontrollera inställningarna" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayarları kontrol et" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm tra các cài đặt" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "检查设置" + } + } + } + }, + "Check that your pump is in range" : { + "comment" : "Recovery suggestion when reservoir data is missing", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكد أن المضخة في النطاق" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontroller, at din pumpe er indenfor rækkevidde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stelle sicher, dass sich Deine Pumpe in Reichweite befindet." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check that your pump is in range" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique que su microinfusora esté dentro del rango" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkista, että pumppu on riittävän lähellä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier que votre pompe est à portée" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Check that your pump is in range" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla che la pompa sia nel raggio d'azione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプが近くにあることを確認してください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk at pumpen din er innenfor rekkevidde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleer of je pomp binnen bereik is" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upewnij się, że Twoja pompa jest w zasięgu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique se sua bomba está dentro do alcance" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați că pompa este în apropriere" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Убедитесь, что помпа в зоне коммуникации" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontrollera att pumpen är inom räckhåll" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompanızın menzil içinde olup olmadığını kontrol edin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm tra máy bơm đang trong phạm vi cho phép" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请检查你的泵是否在范围内" + } + } + } + }, + "Check your CGM data source" : { + "comment" : "Recovery suggestion when glucose data is missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكد من مصدر قراءات السكر المستمرة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontroller din CGM-datakilde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfe Deine CGM-Datenquelle." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique su fuente de datos CGM" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarkista CGM-tietolähde" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifier votre source de données CGM" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בדוק את מקור המידע שלך בחיישן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla la sorgente dati del sensore" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM データソースを確認してください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk CGM" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleer je CGM gegevensbron" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź swój CGM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique seu dispositivo CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați sursa de date CGM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверьте источник мониторинга СК" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontrollera din CGM:s datakälla" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM veri kaynağınızı kontrol edin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm tra nguồn dữ liệu CGM của bạn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请检查你的动态血糖数据来源" + } + } + } + }, + "Check your device time and/or remove any invalid data from Apple Health." : { + "comment" : "Caption for bolus screen notice when glucose data is in the future", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjek din enheds tid og/eller fjern ugyldige data fra Apple Health." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überprüfe die Uhrzeit deines Geräts und/oder entferne alle ungültigen Daten aus Apple Health." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Compruebe la hora de su dispositivo y/o elimine cualquier dato no válido de Apple Health." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vérifiez l'heure de votre appareil et/ou supprimez toute donnée invalide d'Apple Health." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controlla l'orario del tuo dispositivo e/o rimuovi eventuali dati non validi da Apple Salute." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk enhetens klokke og/ eller fjern eventuelle ugyldige data fra Apple Helse." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Controleer de tijd op je apparaat en/of verwijder eventuele ongeldige invoer uit Apple Gezondheid." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sprawdź czas urządzenia i/lub usuń wszelkie nieprawidłowe dane z aplikacji Zdrowie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verificați ora dispozitivului și/sau eliminați orice date incorecte din Apple Health." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Проверьте время вашего устройства и/или удалите недействительные данные из Apple Health." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aygıtınızın saatini kontrol edin ve/veya tüm geçersiz verileri Apple Sağlık'tan kaldırın." + } + } + } + }, + "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." : { + "comment" : "Carb entry section footer text explaining absorption time", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vælg en længere absorptionstid ved større måltider, eller dem med fedt og proteiner. Det er blot hjælp til algoritmen og behøver ikke være nøjagtig." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wähle eine längere Resorptionsdauer für größere Mahlzeiten oder welche die viel Fett und Proteine beinhalten. Dies ist eine Unterstützung für den Algorithmus und muss nicht genau sein." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elija un tiempo de absorción más largo para comidas más grandes, o aquellas que contienen grasas y proteínas. Esta es solo una guía para el algoritmo y no necesita ser exacta." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valitse pidempi imeytymisaika isoille tai paljon rasvaa ja proteiineja sisältäville aterioille. Tämä on suuntaa antava ohje, eikä sen tarvitse olla tarkka." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choisissez un temps d’absorption plus long pour les gros repas ou ceux contenant des graisses et des protéines. Ceci est seulement un guide pour l'algorithme et n'a pas besoin d'être exact." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scegli un periodo di assorbimento piu lungo per i pasti piu grandi o quelli contenenti grassi e proteine. Questa e solo una guida all’algoritmo e non e necessario che sia esatta." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "量の多い食事や脂質やたんぱく質を含んだ食事には長い吸収時間を選んでください。これはアルゴリズムのための参考で、厳密である必要はありません。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velg lengre absorpsjonstid for større måltider, eller de som inneholder fett og proteiner. Dette er kun veiledning til algoritmen og trenger ikke være nøyaktig." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kies een langere opnametijd voor grotere maaltijden of voor maaltijden die vetten en eiwitten bevatten. Dit is alleen een leidraad voor het algoritme en hoeft niet exact te zijn." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz dłuższy czas absorpcji dla większych, bogatobiałkowych lub wysokotłuszczowych posiłków. To tylko wskazówka dla algorytmu i nie musi być bardzo dokładna." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Escolha um tempo de absorção mais longo para refeições maiores ou aquelas que contenham gorduras e proteínas. Esta é apenas uma orientação para o algoritmo e não precisa ser exata." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alegeți o durată mai lungă de absorbție pentru mese mai mari sau pentru cele care conțin grăsimi și proteine. Nu e necesară o valoare exactă, scopul e să oferim doar o ghidare pentru algoritm." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выберите более длительное время усвоения для больших порций пищи или тех, которые содержат жиры и белки. Это лишь руководство к алгоритму и не обязательно должно быть точным." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Välj en längre absorptionstid för måltid med mycket fett eller protein. Ofta är det bäst att dela upp måltiden i snabba och långsamma kolhydrater och mata in dessa var för sig." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daha büyük öğünler veya yağ ve protein içeren besinler için daha uzun bir emilim süresi seçin. Bu değer yalnızca algoritmaya rehberlik eder ve kesin olması gerekmez." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lựa chọn khoảng thời gian tiêu hóa dài hơn cho các bữa ăn no, hoặc những bữa ăn nhiều chất béo và protein. Đây chỉ là hướng dẫn cho thuật toán Algorithm và không cần phải chính xác." + } + } + } + }, + "Choose Favorite:" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vælg favorit:" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wähle Favorit:" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scegli il preferito:" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velg favoritt:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybierz ulubione:" + } + } + } + }, + "Close" : { + "comment" : "Button title to close view\nThe button label of the action used to dismiss the unsafe notification permission alert", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Luk" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cerrar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sulje" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chiudi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluiten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknij" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Închide" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Закрыть" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stäng" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapat" + } + } + } + }, + "Closed Loop" : { + "comment" : "The title text for the looping enabled switch cell", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حلقة مغلقة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Circuito Cerrado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suljettu säätö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boucle Fermé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "クローズドループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla Zamknięta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ciclo Fechado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop automat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замкнутый цикл" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluten loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vòng lặp kín" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开启闭环" + } + } + } + }, + "Closed Loop OFF" : { + "comment" : "Alert title for closed loop off informational modal", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket loop FRA" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop AUS" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asa cerrada APAGADA" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suljettu säätö pois päältä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boucle Ouverte" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso disattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop AV" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten Loop UIT" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla zamknięta WYŁĄCZONA" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buclă închisă dezactivata" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замкнутый цикл ВЫКЛ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluten Loop är AV" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü KAPALI" + } + } + } + }, + "Closed Loop requires an active CGM Sensor Session" : { + "comment" : "The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop kræver en aktiv CGM sensor-session" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop erfordert eine aktive CGM-Sensorsitzung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La asa cerrada requiere una sesión de sensor CGM activa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suljettu säätö vaatii aktiivisen glukoosisensorin" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop en boucle fermée requiert une session de capteur CGM active." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso richiede almeno una sessione attiva del sensore CGM" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop krever en aktiv CGM sensorøkt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten Loop vereist een actieve CGM Sensorsessie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknięta pętla wymaga aktywnego sensora CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buclă închisă necesită o sesiune activă de senzor CGM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замкнутый цикл требует активного подключенного датчика CGM" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluten Loop kräver en aktiv CGM-sensor" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü, aktif bir CGM Sensör Oturumu gerektirir" + } + } + } + }, + "Closed Loop requires Setup to be Complete" : { + "comment" : "The description text for the looping enabled switch cell when onboarding is not complete", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop kræver, at opsætningen er fuldført" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop erfordert, dass die Einrichtung abgeschlossen ist" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El Circuito Cerrado requiere que la configuración esté completa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop en boucle fermée nécessite une configuration complète" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso richiede che la configurazione sia completata" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop krever at installasjonen er fullført" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten Loop vereist dat Installatie is Voltooid" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknięta pętla wymaga zakończenia konfiguracji" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bucla închisă necesită ca setarea să fie finalizată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замкнутый цикл требует завершения настройки" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü, Kurulumun Tamamlanmasını gerektirir" + } + } + } + }, + "com.loudnate.InsulinKit.IOBDateLabel" : { + "comment" : "The format string describing the date of an IOB value. The first format argument is the localized date.", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "d %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "um %1$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "at %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "en %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "klo %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "à %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ב-%1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "a %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 時点" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "kl. %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "om %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "o %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "em %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "la %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "в %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "kl %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "lúc %1$@" + } + } + } + }, + "com.loudnate.InsulinKit.totalDateLabel" : { + "comment" : "The format string describing the starting date of a total value. The first format argument is the localized date.", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "siden %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "seit %1$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "since %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "desde %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ jälkeen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "depuis %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאז %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "da %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ より" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "siden %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "sinds %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "od %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "desde %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "de la %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "с %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "sedan %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ den beri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "từ lúc %1$@" + } + } + } + }, + "com.loudnate.LoopKit.errorAlertActionTitle" : { + "comment" : "The title of the action used to dismiss an error alert", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "موافق" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "OK" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אישור" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ok" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamam" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + } + } + }, + "Complete Setup" : { + "comment" : "Title text for button to complete setup", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fuldfør opsætning" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen abschließen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa la Configuración" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminer la configuration" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completa configurazione" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fullfør oppsett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volledige Installatie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakończ konfigurację" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurare finalizată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Завершить настройку" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kurulumu Tamamla" + } + } + } + }, + "Configuration" : { + "comment" : "The title of the Configuration section in settings", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المعطيات" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurace" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfiguration" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfiguration" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuración" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Määritykset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuration" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuration" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "コンフィグレーション" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurasjon" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuratie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfiguracja" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuração" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Конфигурация" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurácia" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfiguration" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigürasyon" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cấu hình" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "配置" + } + } + } + }, + "Configuration Error: %1$@" : { + "comment" : "The error message displayed for configuration errors. (1: configuration error details)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خطأ في المعطيات: %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurationsfejl: %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurationsfehler: %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error de Configuración: %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Määritysvirhe: %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur de Configuration: %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuration Error: %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore di configurazione: %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定エラー: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurasjonsfeil: %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuratiefout: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błąd konfiguracji: %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erro de Configuração: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare configurare: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка конфигурации: %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigurationsfel %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfigürasyon Hatası: %1$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lỗi cấu hình: %1$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "配置错误:%1$@" + } + } + } + }, + "Continue" : { + "comment" : "Default alert dismissal", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokračovat" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsæt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jatka" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continue" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "जारी" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continua" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次へ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ga Verder" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontynuuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продолжить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokračovať" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsätt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Devam et" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiếp tục" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "继续" + } + } + } + }, + "Continuous Glucose Monitor" : { + "comment" : "Descriptive text for Continuous Glucose Monitor", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نظام متابعة السكر المستمرة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontinuerlig Blodsukker Måler (CGM)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontinuierliche Blutzuckermessung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Monitor de glucosa continuo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosinseuranta (CGM)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lecteur de glycémie en continu" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuous Glucose Monitor" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Monitoraggio continuo glicemia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontinuerlig glukosemonitor" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continue Glucose Monitor" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ciągły Monitoring Glukozy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Monitoramento Contínuo de Glicose" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Monitorizare glicemică continuă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Непрерывный мониторинг гликемии" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontinuerlig glukosmätning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sürekli Glikoz İzleme" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiểm soát đường huyết liên tục" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "连续葡萄糖监测" + } + } + } + }, + "Correction Range" : { + "comment" : "The title of the glucose target range schedule screen\n The title text for the glucose target range schedule", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نطاق التصحيح" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Korrektionsområde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Korrekturbereich" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correction Range" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rango de Corrección" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Korjausalue" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plage de correction" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correction Range" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Intervallo di correzione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ターゲット範囲" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Korreksjonsområde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correctiebereik" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakres docelowy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Faixa de Correção" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interval țintă pentru corecție" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Диапазон коррекции" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Målvärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Düzeltme Aralığı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phạm vi liều Bổ sung" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "修正范围" + } + } + } + }, + "Could Not Restart %1$@" : { + "comment" : "Format string for title of reset loop alert. (1: App name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunne ikke genstarte %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile riavviare %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunne ikke starte %1$@ på nytt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można ponownie uruchomić %1$@" + } + } + } + }, + "Critical Alerts" : { + "comment" : "Critical Alerts Status text", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritická upozornění" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiske advarsler" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritische Warnungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alertas críticas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alertes critiques" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avvisi critici" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiske varsler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritieke Meldingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerty krytyczne" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerte critice" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Критические оповещения" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritické výstrahy" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik Uyarılar" + } + } + } + }, + "Critical Event Log Ready" : { + "comment" : "Critical event log ready text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisk begivenhedslog klar" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisches Ereignisprotokoll bereit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registro de eventos críticos listo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tärkeiden tapahtumien loki valmis" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Journal des événements critiques prêt" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registro eventi critici pronto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisk hendelseslogg er klar" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritieke Gebeurtenislogboek Klaar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dziennik zdarzeń krytycznych gotowy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jurnal evenimente critice pregătit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Логи критических событий готовы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisk händelselogg klar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik Olay Günlüğü Hazır" + } + } + } + }, + "Critical Event Logs" : { + "comment" : "Critical event log export title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisk begivenhedslog" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritische Ereignisprotokolle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registros de eventos críticos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tärkeiden tapahtumien loki" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Journaux des événements critiques" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registri eventi critici" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiske hendelseslogger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritieke Gebeurtenislogboek" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dzienniki zdarzeń krytycznych" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jurnal de evenimente critice" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Логи критических событий" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiska händelseloggar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik Olay Günlükleri" + } + } + } + }, + "Critical Event Logs were not able to be exported." : { + "comment" : "Critical event log export error alert message", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisk begivenhedslogs kunne ikke eksporteres." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritische Ereignisprotokolle konnten nicht exportiert werden." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se han podido exportar los registros de eventos críticos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tärkeiden tapahtumien lokia ei voitu viedä." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les journaux d'événements critiques n'ont pas pu être exportés." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non è stato possibile esportare i registri degli eventi critici." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiske hendelseslogger kunne ikke eksporteres." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritieke Gebeurtenislogboek konden niet worden geëxporteerd." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można wyeksportować dzienników zdarzeń krytycznych." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jurnalele de evenimente critice nu au putut fi exportate." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удалось экспортировать журналы критических событий." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiska händelseloggar kunde inte exporteras." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik Olay Günlükleri dışa aktarılamadı." + } + } + } + }, + "Current Glucose" : { + "comment" : "Label for glucose entry row on simple bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuværende blodsukker" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktueller Blutzucker" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa actual" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nykyinen glukoosi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie actuelle" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia attuale" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nåværende blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Huidige Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualna glukoza" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia curentă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Текущая глюкоза" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuvarande blodglukosvärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mevcut KŞ" + } + } + } + }, + "Current glucose of %1$@ is below correction range." : { + "comment" : "Message when offering bolus recommendation even though bg is below range. (1: glucose value)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءة سكر الدم %1$@ أقل من نطاق التصحيح." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den aktuelle glukose for %1$@ er under korrektionsområdet." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der aktuelle Blutzucker von %1$@ liegt unter dem Korrekturbereich." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa actual de %1$@ está por debajo del rango de corrección." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nykyinen glukoosi %1$@ on korjausalueen alapuolella." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie actuelle de %1$@ est en dessous de la plage de correction." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Current glucose of %1$@ is below correction range." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia attuale di %1$@ è al di sotto dell'intervallo glicemico." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在の血糖値は %1$@ で補正範囲を下回っています。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gjeldende blodsukker på %1$@ er under korreksjonsområdet." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Huidige glucose %1$@ is lager dan het correctiebereik." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poziom glukozy %1$@ jest poniżej wartości korekcji." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : " Glicemia atual %1$@ está abaixo da zona de correção." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : " Glicemia curentă de %1$@ se situează sub intervalul țintă de corecție." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Гликемия %1$@ ниже диапазона коррекции" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktuálna glykémie %1$@ je pod cieľovým rozsahom." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nuvarande glukosvärde %1$@ är under målvärde." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Mevcut KŞ düzeltme aralığının altında." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : " Chỉ số glucose hiện tại %1$@ nằm dưới Phạm vi Điều chỉnh." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前葡萄糖%1$@低于修正范围" + } + } + } + }, + "Custom Override" : { + "comment" : "The title of the cell indicating a generic temporary override is enabled", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تجاوز مخصص" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brugerdefineret Override" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzerdefinierter Override" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom Override" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobreescritura personalizada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mukautettu tilapäisasetus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustement personnalisé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom Override" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override personalizzato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カスタムオーバーライド" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilpasset overstyring" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aangepaste Override" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Custom Override" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobreposição Personalizada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modificare personalizată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настраиваемое ручное управление" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anpassad Override" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Özel Geçersiz kılma" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thói quen Chồng liều" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义覆盖" + } + } + } + }, + "Custom Preset" : { + "comment" : "The title of the cell indicating a generic custom preset is enabled", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brugerdefineret forudindstilling" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuste Preestablecido personalizado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mukautettu esiasetus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préréglage personnalisé" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programmazione" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egendefinert forhåndsinnstilling" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aangepast Programma" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cel Tymczasowy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presetare particularizată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пользовательский пресет" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anpassad förinställning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Özel Ön Ayar" + } + } + } + }, + "Date" : { + "comment" : "Date picker label", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dato" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datum" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fecha" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aika" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Date" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תאריך" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "日付" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dato" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datum" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дата" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dátum" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tid" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarih" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ngày" + } + } + } + }, + "dB" : { + "comment" : "The short unit display string for decibles", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "дБ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + } + } + }, + "Delete" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usunąć" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sil" + } + } + } + }, + "Delete “%@”?" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet \"%@\"?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "„ %@ “ löschen?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminare \"%@\" ?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slette \"%@\"?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usunąć „ %@ ”?" + } + } + } + }, + "Delete Account" : { + "comment" : "The title of the button to remove the credentials for a service", + "extractionState" : "manual", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smazat účet" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet konto" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konto löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar Cuenta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista tili" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le compte" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק חשבון" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina account" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アカウントを削除" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett Konto" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder Account" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń konto" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover Conta" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge cont" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить аккаунт" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť účet" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Radera konto" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hesabı sil" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa Tài khoản" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除账户" + } + } + } + }, + "Delete All" : { + "comment" : "Button title to delete all objects", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet alle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar Todos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista kaikki" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer tout" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק הכל" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina tutto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すべて削除" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett alle" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder Alles" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń wszystko" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover Todos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge tot" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить все" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Radera allt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hepsini sil" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa hết" + } + } + } + }, + "Delete CGM" : { + "comment" : "Button title to delete CGM", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف CGM" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet CGM" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar MCG" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista CGM" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le CGM" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק חיישן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina CGM" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGMを削除" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett CGM" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder CGM" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń CGM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remover CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergeți CGM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить мониторинг" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť CGM" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Radera CGM" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM Sil" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa CGM" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除CGM数据源" + } + } + } + }, + "Delete Food" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet mad" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essen löschen" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina cibo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett mat" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń jedzenie" + } + } + } + }, + "Delete Service" : { + "comment" : "Button title to delete a service", + "extractionState" : "manual", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Smazat službu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet service" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dienst löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar servicio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista palvelu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer le service" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק שירות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina servizio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Service" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett tjeneste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Service Verwijderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń usługę" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Service" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge serviciul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить сервис" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť službu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort tjänst" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servisi Sil" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Service" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delete Service" + } + } + } + }, + "Delete Testing CGM Data" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet CGM testdata" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM-Test-Daten löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar prueba de datos CGM" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista testi-CGM:n tiedot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effacer les données de test du CGM" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק נתוני בדיקת חיישן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina dati test CGM" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett testdata for blodsukkermåler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwijder test-CGM-gegevens" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń testowe dane CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge date CGM de testare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить данные тестирования CGM" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort simulerade testvärden från CGM" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Test CGM Verilerini Sil" + } + } + } + }, + "Delete Testing Data" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet testdata" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Test-Daten löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eliminar datos de prueba" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista testitiedot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer les données de Test" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק נתוני בדיקה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina dati test" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett testdata" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Testgegevens Verwijderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń dane testowe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Șterge date de testare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить данные тестирования" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort simulerade testvärden" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Test Verilerini Sil" + } + } + } + }, + "Delete Testing Pump Data" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slet testdata for pumpe" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen-Test-Daten löschen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Borrar los datos de prueba de la bomba" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poista testipumpun tiedot" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supprimer les données de la Pompe de test" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחק נתוני בדיקת משאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Elimina dati test della pompa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slett data for testpumpe" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Testpompgegevens Verwijderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usuń dane pompy testowej" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergere date pompă de testare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удалить данные тестирования помпы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta bort simulerade pumpvärden" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Test Pompası Verilerini Sil" + } + } + } + }, + "Deliver" : { + "comment" : "Button text to deliver a bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afgiv" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abgeben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entregar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annostele" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroga" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gi bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toedienen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podaj Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Livrează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подать" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podať" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ge bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlet" + } + } + } + }, + "Delivery Limits" : { + "comment" : "Title text for delivery limits", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حدود الضخ" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limity podávání" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulingrænser" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abgabelimits" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delivery Limits" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Límites de Administración de Insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annostelurajat" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limites d'Administration" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delivery Limits" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limiti erogazione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "注入限度" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Leveringsgrenser" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toedieningslimieten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limity podawania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limites de Entrega" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limite de livrare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пределы подачи" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limity podávania" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maxdoser" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İletim Limitleri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Giới hạn liều tiêm" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输注限制" + } + } + } + }, + "Diabetes Treatment" : { + "comment" : "Descriptive text for Therapy Settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabetesbehandling" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabetes-Behandlung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tratamiento de la diabetes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabeteshoito" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Traitement du diabète" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terapia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabetesbehandling" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabetesbehandeling" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "w leczeniu cukrzycy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tratament Diabet" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Лечение диабета" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diabetesbehandling" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diyabet Tedavisi" + } + } + } + }, + "Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" : { + "comment" : "Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Havde du til hensigt at angive %1$@ gram som mængden af kulhydrater for dette måltid?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wolltest Du %1$@ Gramm an Kohlenhydraten für diese Mahlzeit eingeben?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Quería introducir %1$@ gramos como cantidad de hidratos de carbono para esta comida?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aviez-vous l'intention d'entrer %1$@ grammes comme quantité de glucides pour ce repas?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Intendevi inserire %1$@ grammi come quantità di carboidrati per questo pasto?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hadde du tenkt å angi %1$@ gram som mengde karbohydrater for dette måltidet?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Was je van plan om %1$@ gram in te voeren als hoeveelheid koolhydraten voor deze maaltijd?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czy zamierzałeś wprowadzić %1$@ gramów jako ilość węglowodanów dla tego posiłku?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ați intenționat să introduceți %1$@ grame ca cantitate de carbohidrați pentru această masă?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы намеревались ввести %1$@ граммов углеводов для этого блюда?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bu yemek için karbonhidrat miktarı olarak %1$@ gram girmeyi düşündünüz mü?" + } + } + } + }, + "Disables" : { + "comment" : "The action hint of the workout mode toggle button when enabled", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعطيل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deaktiverer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deaktivieren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desactivar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poistaa käytöstä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactive" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disables" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無効にする" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deaktiverer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uitschakelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyłącza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desativa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dezactivează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отключает" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stänger av" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Devre Dışı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vô hiệu hóa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "禁用" + } + } + } + }, + "Dismiss" : { + "comment" : "Default alert dismissal\nThe button label of the action used to dismiss an error alert", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تجاهل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afvis" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ohita" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בטל" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "閉じる" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avvis" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluiten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozumiem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispensar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renunță" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отклонить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avfärda" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reddet" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Từ bỏ" + } + } + } + }, + "Done" : { + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hotovo" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Udført" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fertig" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Completado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valmis" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terminé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בוצע" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fine" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ferdig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gereed" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gotowe" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Realizat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Готово" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hotovo" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Färdig" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamamlandı" + } + } + } + }, + "Dose Summary" : { + "comment" : "Title for card to log dose", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resumé af dosis" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosisübersicht" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resumen de dosis" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annoksen yhteenveto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Résumé de la dose" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Riepilogo della dose" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dose sammendrag" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doseersamenvatting" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podsumowanie dawki" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezumat doză" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сводная информация о дозе" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sammanfattning av dos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doz Özeti" + } + } + } + }, + "Dosing Strategy" : { + "comment" : "The title of the Dosing Strategy section in settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosingstrategi" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosierungsstrategie" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estrategia de dosificación" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annostelutapa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stratégie de Dosage" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Strategia di dosaggio" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doseringsstrategi" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doseerstrategie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Strategia dawkowania" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Strategie de dozare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Режим ввода инсулина" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Strategi för insulinbehandling" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dozlama Stratejisi" + } + } + } + }, + "Duration exceeds: %1$.1f hours" : { + "comment" : "Override error description: duration exceed max (1: max duration in hours).", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varigheden overstiger: %1$.1f timer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dauer überschritten: %1$.1f Stunden" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La durée dépasse : %1$.1f heures" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משך זמן חורג: %1$.1f שעות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La durata supera: %1$.1f ore" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varigheten overskrider: %1$.1f timer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Duur overschrijdt: %1$.1f uur" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czas trwania przekracza: %1$.1f godzin" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durata depășește: %1$.1f ore" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продолжительность превышает: %1$.1f часов" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Süre aşıldı: %1$.1f saat" + } + } + } + }, + "Enable\nBluetooth" : { + "comment" : "Message to the user to enable bluetooth", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiver \nbluetooth" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth einschalten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activar \nBluetooth" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ota Bluetooth käyttöön" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer \nbluetooth" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva\nBluetooth" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiver blåtann" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth\nInschakelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włączać\nBluetooth" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activează Bluetooth" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить\nBluetooth" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivera Bluetooth" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etkinleştir\nBluetooth" + } + } + } + }, + "Enable Glucose Based Partial Application" : { + "comment" : "Title for Glucose Based Partial Application toggle", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivér Glucose Based Partial Application" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose Based Partial Application aktivieren" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva Applicazione parziale basata sulla glicemia (GBPA)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiver delvis anvendelse basert på glukose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz Algorytm adaptacyjny" + } + } + } + }, + "Enable Integral Retrospective Correction" : { + "comment" : "Title for Integral Retrospective Correction toggle", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivér Integral Retrospective Correction" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integral Retrospective Correction aktivieren" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva Correzione retrospettiva integrale (IRC)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivere integrert retrospektiv korrigering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz Integralną Korektę Retrospektywną (IRC)" + } + } + } + }, + "Enables" : { + "comment" : "The action hint of the workout mode toggle button when disabled", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تفعيل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiverer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivieren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permitir" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ottaa käyttöön" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enables" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "有効にする" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiverer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inschakelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включает" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slår på" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etkin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cho phép" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + } + } + }, + "Enter a blood glucose from a meter for a recommended bolus amount." : { + "comment" : "Caption for bolus screen notice when glucose data is missing or stale", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast blodsukker fra en fingerprikmåling for at få anbefalet en bolusmængde." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gib einen Blutzuckerwert von einem Messgerät ein, um eine Bolusempfehlung zu bekommen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingrese una glucosa en sangre de un medidor por una cantidad recomendada de bolo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä sormenpäästä mitattu glukoosiarvo saadaksesi suositellun bolusmäärän." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrez la glycémie à partir d'un mesure manuelle pour le calcul du bolus." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הכנס קריאת מד סוכר כדי לקבל המלצה לכמות בולוס." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserirsci la glicemia capillare per ottenere la quantità di bolo consigliata." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg inn blodsukkerverdi fra en måler for anbefalt bolusmengde." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verkrijg een bloedglucose waarde van een meter voor een aanbevolen bolus hoeveelheid." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź poziom glukozy z glukometru, aby uzyskać zalecaną wielkość bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți o glicemie luata cu glucometrul pentru o recomandare de bolus." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите глюкозу крови, полученную с помощью глюкометра, для получения рекомендуемого количества болюса." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du behöver mata in ett blodsockervärde för att få en rekommenderad bolus." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen bolus miktarı için bir ölçüm cihazından bir kan şekeri girin." + } + } + } + }, + "Enter Bolus" : { + "comment" : "Button text to begin entering a bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus eingeben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introducir bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrer un Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci bolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skriv inn bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Invoeren" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introdu bolusul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ввести болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange Bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus girin" + } + } + } + }, + "Enter Fingerstick Glucose" : { + "comment" : "Button text prompting manual glucose entry on bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast fingerprikmåling" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker eingeben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingrese la glucosa de punción en el dedo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Syötä mitattu glukoosiarvo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrez la Glycémie capillaire" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הכנס קריאת מד סוכר" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserirsci glicemia capillare" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg inn blodsukkerverdi fra fingerstikk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vul Vingerprikglucose In" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź glukozę z glukometru" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți glicemia din deget" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите глюкозу по глюкометру" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange kapillärt blodsocker" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parmak Ucu KŞ Girin" + } + } + } + }, + "Enter glucose safety limit" : { + "comment" : "The placeholder text instructing users to enter a glucose safety limit", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast glucosesikkerhedsgrænse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukosesicherheitsgrenze eingeben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduzca el límite de seguridad de glucosa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aseta glukoosin turvaraja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrez la limite de sécurité du taux de glucose" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגדרת בטיחות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci limite di sicurezza glicemia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angi sikkerhetsgrensen for blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer glucoseveiligheidslimiet in" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź bezpieczny limit glukozy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți limita de siguranță pentru glicemie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите безопасный предел глюкозы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange tröskelvärde för blodsocker" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ güvenlik limitini girin" + } + } + } + }, + "Enter suspend threshold" : { + "comment" : "The placeholder text instructing users to enter a suspend treshold", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أدخل حد التوقف" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtast grænse for suspendering" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grenzwert für Hypo-Abschaltung eingeben" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter suspend threshold" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingrese nivel de suspensión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aseta pysäytysraja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrez le seuil de suspension" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enter suspend threshold" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserisci soglia di sospensione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一時停止値を入力" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angi suspenderingsgrense" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voer drempel voor onderbreking in" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź próg zawieszenia pompy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digite o limite de suspensão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introduceți limita pentru suspendare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введите рубеж приостановки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ange tröskelvärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Askıya alma eşiğini girin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhập ngưỡng tạm dừng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入暂停阈值" + } + } + } + }, + "Error Canceling Bolus" : { + "comment" : "The alert title for an error while canceling a bolus", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خطأ في إلغاء الجرعة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejl ved annullering af bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Abbrechen des Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error de cancelación de bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virhe boluksen kumoamisessa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur lors de l’annulation du Bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error Canceling Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore durante l'annullamento del bolo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラスのキャンセルにエラー" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunne ikke avbryte bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fout bij Annuleren Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błąd anulowania bolusa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erro Cancelando Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare la anularea bolusului" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка отмены болюса" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fel vid försök att avbryta bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus İptali Hatası" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lỗi hủy liều Bolus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法取消大剂量" + } + } + } + }, + "Error Exporting Logs" : { + "comment" : "Critical event log export error alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der opstod en fejl under eksport af log" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Exportieren des Protokolls" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error al exportar registros" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virhe lokin viennissä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur lors de l'exportation des journaux" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore durante l'esportazione dei registri" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Feil ved eksport av logger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fout bij exporteren logboeken" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błąd podczas eksportowania dzienników" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare la exportarea jurnalelor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка экспорта логов" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fel vid export av loggar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Günlükleri Dışa Aktarırken Hata" + } + } + } + }, + "Error Resuming" : { + "comment" : "The alert title for a resume error", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خطأ في الاستئناف" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejl ved genoptagelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehler beim Fortfahren" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error Resuming" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error Reanudando" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virhe jatkamisessa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur lors de la reprise" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error Resuming" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore durante la ripresa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "再開エラー" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Feil ved gjenopptagelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fout Bij Hervatten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błąd wznawiania" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erro ao Retomar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare în timpul reluării" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка возобновления" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chyba pri obnovení" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fel vid återupptagande" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sürdürme Hatası" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lỗi khi đang tái thực hiện" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "恢复输注错误" + } + } + } + }, + "Event History" : { + "comment" : "Segmented button title for insulin delivery log event history", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hændelseshistorik" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ereignisverlauf" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Historial de Eventos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tapahtumahistoria" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Historique des événements" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Event History" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cronologia degli eventi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Event History" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hendelseshistorie" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logboek" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Historia zdarzeń" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Event History" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Istoric evenimente" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "История событий" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Händelsehistorik" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etkinlik Geçmişi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Event History" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "历史事件" + } + } + } + }, + "Eventually %@" : { + "comment" : "The subtitle format describing eventual glucose. (1: localized glucose value description)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "في النهاية %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Med tiden %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voraussichtlich %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventualmente %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennuste %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finalement %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventually %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Infine %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想 %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Omsider %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uiteindelijk %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Docelowo %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventualmente %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajunge la %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В конечном итоге %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nihai KŞ %@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kết quả %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终 %@" + } + } + } + }, + "Exceeds maximum allowed bolus in settings" : { + "comment" : "Bolus error description: bolus exceeds maximum bolus in settings.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overskrider den maksimalt tilladte bolus i indstillingerne" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überschreitet den maximal zulässigen Bolus in den Einstellungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excede el bolo máximo permitido en la configuración" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dépasse le bolus maximal défini dans les paramètres" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supera il bolo massimo consentito nelle impostazioni" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overskrider maksimalt tillatt bolus i innstillingene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overschrijdt maximale toegestane bolus in instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przekracza maksymalny dozwolony bolus." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Depășește bolusul maxim permis în setări" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Превышен максимально допустимый болюс в настройках" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayarlarda izin verilen maksimum bolusu aşıyor" + } + } + } + }, + "Exceeds maximum allowed carbs" : { + "comment" : "Carb error description: carbs exceed maximum amount.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overskrider det maksimalt tilladte antal kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überschreitet die maximal zulässigen Kohlenhydrate" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supera el máximo permitido de carbohidratos definido en la configuración" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dépasse le nombre de glucides maximal accepté" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supera i carboidrati massimi consentiti" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overskrider maksimalt tillatte karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overschrijdt maximale toegestane koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przekracza maksymalną dopuszczalną ilość węglowodanów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Depășește maximul de carbohidrați permis" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Превышено максимально допустимое количество углеводов" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İzin verilen maksimum karbonhidrat miktarını aşıyor" + } + } + } + }, + "Exceeds Maximum Bolus" : { + "comment" : "Alert title for a maximum bolus validation error", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يتجاوز أقصى جرعة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overskrider maksimal bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Überschreitet den maximalen Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excede bolo máximo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ylittää maksimiboluksen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dépasse le bolus maximal" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exceeds Maximum Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supera il bolo massimo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス最大値を超えています" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overskrider maksimal bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overschrijdt Maximale Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Osiągnięto bolus maksymalny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Excede o Bolus Máximo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Depășește bolusul maxim" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Превышает максимальный болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Överstiger maxbolusdos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimum Bolusu Aşıyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vượt quá liều Bolus tối đa" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "超过大剂量最大输注限制" + } + } + } + }, + "Export Critical Event Logs" : { + "comment" : "The title of the export critical event logs in support", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksportér kritisk begivenhedslog" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Protokolle kritischer Ereignisse exportieren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportar registros de eventos críticos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vie tärkeiden tapahtumien loki" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exporter les journaux d'événements critiques" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esporta registri eventi critici" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksporter kritiske hendelseslogger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exporteer Kritieke Gebeurtenislogboek" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksportuj dzienniki zdarzeń krytycznych" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportă jurnalul de evenimente critice" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Экспорт логов критических событий" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportera kritiska händelseloggar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik Olay Günlüklerini Dışa Aktarma" + } + } + } + }, + "Export-%1$@" : { + "comment" : "The export file name formatted string (1: timestamp)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksport-%1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export-%1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportar- %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vienti-%1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export-%1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esporta- %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksporter- %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exporteren: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksportuj- %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Export-%1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Экспорт -%1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exportera-%1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dışa Aktar- %1$@" + } + } + } + }, + "Failed to Resume Insulin Delivery" : { + "comment" : "The alert title for a resume error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunne ikke genoptage insulintilførsel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiederaufnahme der Insulinabgabe fehlgeschlagen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se pudo reanudar la administración de insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Annostelun jatkaminen epäonnistui" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Échec de la reprise de l’administration d’insuline" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile riprendere l'erogazione dell'insulina" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunne ikke gjenoppta insulinlevering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinetoediening Hervatten Mislukt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie udało się wznowić podawania insuliny" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu s-a reușit reluarea administrării de insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удалось возобновить подачу инсулина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obnovenie podávania inzulínu zlyhalo" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Misslyckades att återuppta insulintillförsel" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin İletimine Devam Edilemedi" + } + } + } + }, + "Favorite Foods" : { + + }, + "FAVORITE FOODS" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "FAVORIT-MAD" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorisiertes Essen" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "CIBI SALVATI" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "FAVORITTMAT" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "FAVORIETE ETEN" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ULUBIONE JEDZENIE" + } + } + } + }, + "Fiasp" : { + "comment" : "Title of insulin model preset", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiasp" + } + } + } + }, + "Fingerstick Glucose" : { + "comment" : "Label for manual glucose entry row on bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fingerprik blodsukker" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa de punción en el dedo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mitattu glukoosi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose capilaire" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קריאת מד סוכר" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia capillare" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerverdi fra fingerstikk" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vingerprikglucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoza z krwi" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemie din deget" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Глюкоза по глюкометру" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapillärt blodsocker" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Parmak Ucu KŞ" + } + } + } + }, + "Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." : { + "comment" : "Secondary text for alerts disabled warning, which appears on the main status screen.", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opravit nyní zapnutím Oznámení, Kritických upozornění a Časově citlivých oznámení." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Løs nu ved at slå meddelelser, kritiske advarsler og tidsfølsomme meddelelser TIL." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behebe dies jetzt, indem Du Benachrichtigungen, kritische Alarme und zeitkritische Benachrichtigungen einschaltest." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soluciónalo ahora activando Notificaciones, Alertas Críticas y Notificaciones Sensibles al Tiempo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corrigez-le maintenant en activant les notifications, les alertes critiques et les notifications urgentes." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תקן כעת ע״י הפעלת התראות, התראות קריטיות והודעות רגישות לזמן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Risolvilo ora attivando notifiche, avvisi critici e notifiche sensibili al tempo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fiks nå ved å slå PÅ varsler, kritiske varsler og tidssensitive varsler." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los nu op door Meldingen, Kritieke Meldingen en Tijdgevoelige Meldingen AAN te zetten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Napraw teraz, włączając powiadomienia, alerty krytyczne i powiadomienia zależne od czasu." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remediați acum activând Notificări, Alerte critice și Notificări sensibile la timp." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Исправьте ситуацию, включив уведомления, критические оповещения и уведомления, чувствительные к времени." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimleri, Kritik Uyarıları ve Zamana Duyarlı Bildirimleri AÇIK konuma getirerek şimdi düzeltin." + } + } + } + }, + "For %1$@" : { + "comment" : "The format string used to describe a finite workout targets duration", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لمدة %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "I %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Für %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ajaksi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pendant %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "For %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@につき" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "For %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voor %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Do %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Timp de %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В течение %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "I %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ için" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "For %1$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "对于 %1$@" + } + } + } + }, + "For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." : { + "comment" : "Description text for silencing time sensitive and non-critical alerts (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Af sikkerhedsmæssige årsager bør du tillade, at Kritiske advarsler, Tidsfølsomme og Meddelelser (ikke-kritiske advarsler) på din enhed fortsætter med at bruge %1$@ og ikke kan slå individuelle alarmer fra." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per motivi di sicurezza, dovresti consentire gli avvisi critici, gli avvisi sensibili al tempo e le autorizzazioni di notifica (avvisi non critici) sul tuo dispositivo per continuare a utilizzare %1$@ e non puoi disattivare i singoli allarmi." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Av sikkerhetshensyn bør du tillate at kritiske varsler, tidssensitive varsler og varslingstillatelser (ikke-kritiske varsler) på enheten din fortsetter å bruke %1$@ og ikke kan slå av individuelle alarmer." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ze względów bezpieczeństwa należy zezwolić na alerty krytyczne, alerty zależne od czasu i uprawnienia do powiadomień (alerty niekrytyczne) na swoim urządzeniu na dalsze korzystanie z %1$@ i nie można wyłączać poszczególnych alarmów." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В целях безопасности вам следует разрешить критические оповещения, срочные оповещения и уведомления (некритические оповещения) на вашем устройстве, чтобы продолжить использовать %1$@ и не отключать отдельные тревоги." + } + } + } + }, + "Forecasted blood glucose may still be higher than target range." : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker kan stadig være højere end målområdet." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der prognostizierte Blutzucker kann immer noch über dem Zielbereich liegen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glucosa en sangre pronosticada aún puede estar por encima del rango objetivo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le taux de glucose sanguin prévu pourrait quand-même être plus élevé que la plage cible." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "רמת הסוכר הצפויה עשויה עדיין להיות גבוהה מטווח היעד." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia prevista potrebbe essere più elevata di quella impostata come obiettivo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker kan fortsatt være høyere enn målområdet." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspelde bloedglucose kan nog steeds hoger zijn dan het streefbereik." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prognozowany poziom glukozy we krwi może nadal być wyższy niż zakres docelowy." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prognozată poate fi în continuare mai mare decât intervalul țintă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогнозируемый уровень глюкозы в крови все еще может быть выше целевого диапазона." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öngörülen KŞ, hala hedef aralıktan yüksek olabilir." + } + } + } + }, + "Forecasted Glucose" : { + "comment" : "Title for forecast explanation modal on bolus view", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prognostizierte Blutzucker" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa pronosticada" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie prévue" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סוכר צפוי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prevista" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspelde Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prognozowana glukoza" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prognozată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогнозируемый уровень глюкозы" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini KŞ" + } + } + } + }, + "Frequently asked questions about alerts" : { + "comment" : "Label for link to see frequently asked questions", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ofte stillede spørgsmål om påmindelser" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foire aux questions sur les alertes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Domande frequenti sugli avvisi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ofte stilte spørsmål om varsler" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Często zadawane pytania dotyczące alertów" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Часто задаваемые вопросы об оповещениях" + } + } + } + }, + "g" : { + "comment" : "The short unit display string for grams", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + } + } + }, + "Get help with Alert Permissions" : { + "comment" : "Get help with Alert Permissions support button text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Få hjælp til advarselstilladelser" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hol Dir Hilfe zu den Benachrichtigungsberechtigungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayuda con los Permisos de Alerta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obtenir de l'aide avec les autorisations d'alerte" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ottieni assistenza per le autorizzazioni" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Få hjelp med varslingsinnstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Krijg hulp bij Toestemming Meldingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uzyskaj pomoc dotyczącą uprawnień alertów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obțineți ajutor cu permisiunile de alertă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Справка по разрешениям на оповещения" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyarı İzinleri ile ilgili yardım alın" + } + } + } + }, + "Glucose" : { + "comment" : "The title of the glucose and prediction graph\nTitle for predicted glucose chart on bolus screen", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءات السكر" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukóza" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukose" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "शुगर" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "血糖値" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicose" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucoza" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Глюкоза" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glykémia" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan şekeri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đường huyết" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "葡萄糖" + } + } + } + }, + "Glucose Based Partial Application" : { + "comment" : "Title for glucose based partial application experiment description\nTitle of glucose based partial application experiment", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose Based Partial Application" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Applicazione parziale basata sulla glicemia (GBPA)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Partiell anvendelse basert på glukosenivå" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorytm adaptacyjny" + } + } + } + }, + "Glucose data is %1$@ old" : { + "comment" : "The error message when glucose data is too old to be used. (1: glucose data age in minutes)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءات السكر منذ %1$@ " + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata er %1$@ gamle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzuckerdaten sind %1$@ alt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los datos de glucosa son de hace %1$@ " + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoositieto on %1$@ vanha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les dernières données de glucose remontent à %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose data is %1$@ old" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati sulla glicemia sono vecchi di %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "血糖データは %1$@ 前のものです" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata er %1$@ gammel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosegegevens zijn %1$@ oud" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane o glukozie są nieaktualne od %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Medida de glicose está %1$@ atrasada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datele despre glicemie au o vechime de %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные о глюкозе устарели на %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukosvärde är %1$@ gammalt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ eski KŞ verisi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu đường huyết %1$@ cũ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "葡萄糖%1$@分钟未更新" + } + } + } + }, + "Glucose data not available" : { + "comment" : "Description of error when glucose data is missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءات السكر غير متوفرة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata ikke tilgængelige" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzuckerdaten nicht verfügbar" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los datos de glucosa no están disponibles" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoositietoja ei saatavilla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données de glucose ne sont pas disponibles" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose data not available" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dati sulla glicemia non disponibili" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "グルコースデータがありません" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata er utilgjengelig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosegegevens niet beschikbaar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane o glukozie są niedostępne" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Medida de glicose não disponível" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu sunt disponibile date despre glicemie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные гликемии недоступны" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukosvärde saknas" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ verisi mevcut değil" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu đường huyết không sẵn sàng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "血糖数据不可用" + } + } + } + }, + "Glucose Data Now Available" : { + "comment" : "Alert title when glucose data returns while on bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata er nu tilgængelige" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker jetzt verfügbar" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datos de glucosa ahora disponibles" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoositiedot nyt saatavilla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données de glycémie sont maintenant disponibles" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dati glicemia ora disponibili" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata er utilgjengelig" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosegegevens Nu Beschikbaar" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane dotyczące glukozy są już dostępne" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valorile glicemiei sunt disponibile" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные о глюкозе теперь доступны" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodglukosvärde finns nu tillgängligt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ Verileri Artık Kullanılabilir" + } + } + } + }, + "Glucose effect of suspending insulin delivery" : { + "comment" : "Description of the prediction input effect for suspension of insulin delivery", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoseeffekt ved afbrydelse af insulintilførsel" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effetto sulla glicemia della sospensione dell'erogazione d'insulina" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoseeffekt av å suspendere insulintilførsel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wpływ wstrzymania podawania insuliny na poziom glukozy" + } + } + } + }, + "Glucose Entry Out of Range" : { + "comment" : "Alert title for a manual glucose entry out of range error\nTitle for bolus screen warning when glucose entry is out of range", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerværdi er uden for intervallet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker-Eingabe außerhalb des Bereichs" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrada de glucosa fuera de rango" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosiarvo alueen ulkopuolella" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glycémie saisie est hors de la plage." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia inserita fuori intervallo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerdata er utenfor intervallet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose-invoer Buiten Bereik" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadzanie glukoza jest poza zakresem" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valoarea glicemică introdusă este în afara intervalului" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ввод глюкозы вне допустимого диапазона" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det manuellt inmatade blodsockervärdet utanför gränsvärden" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ Girişi Aralık Dışında" + } + } + } + }, + "Glucose Momentum" : { + "comment" : "Title of the prediction input effect for glucose momentum", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مقاومة سكر الدم" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkermomentum" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker-Momentum" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momento de Glucosa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosin liike" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentum de glucose" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose Momentum" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momento della glicemia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "グルコース モメンタム" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukose Momentum" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosetrendlijn" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pęd glukozy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceleração da Glicose" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentum glicemie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Динамика гликемии" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukosförändring" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ Momentumu" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chuyển động của Glucose" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "葡萄糖增量预测算法" + } + } + } + }, + "Glucose Target Range Schedule" : { + "comment" : "Details for configuration error when glucose target range schedule is missing", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsplan for glukosemålområde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeitplan für den Blutzucker-Zielbereich" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horario para el objetivo de glucosa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horaire de la plage cible de glycémie" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programma di intervalli target di glicemia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsplan for blodsukker målområde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosestreefbereikschema" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Harmonogram zakresu docelowego glukozy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programul intervalului țintă de glucoză" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "График целевого диапазона глюкозы" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ Hedef Aralığı Programı" + } + } + } + }, + "HARDWARE SOUNDS" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "HARDWARE-LYDE" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "SONS MATÉRIELS" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "SUONI HARDWARE" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "MASKINVARELYDER" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "DŹWIĘKI SPRZĘTOWE" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "АППАРАТНЫЕ ЗВУКИ" + } + } + } + }, + "High Glucose" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Høj glukose" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie élevée" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia alta" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Høyt glukosenivå" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wysoki poziom glukozy" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Высокий уровень глюкозы" + } + } + } + }, + "How can I silence non-Critical Alerts?" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan kan jeg slå ikke-kritiske alarmer fra?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Come posso silenziare gli avvisi non critici?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan kan jeg dempe ikke-kritiske varsler?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jak mogę wyciszyć alerty niekrytyczne?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Как отключить некритичные оповещения?" + } + } + } + }, + "How can I silence only Time Sensitive and Non-Critical alerts?" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan kan jeg kun slå lyden fra for tidsfølsomme og ikke-kritiske advarsler?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Come posso silenziare solo gli avvisi sensibili al tempo e non critici?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan kan jeg deaktivere kun tidssensitive og ikke-kritiske varsler?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jak wyciszyć tylko alerty zależne od czasu i niekrytyczne?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Как отключить только срочные и некритические предупреждения?" + } + } + } + }, + "How can I temporarily silence all %1$@ app sounds?" : { + "comment" : "Title text for temporarily silencing all sounds (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan kan jeg midlertidigt slå lyden fra for alle %1$@ applyde?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comment puis-je désactiver temporairement tous les sons de l'application %1$@?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Come posso silenziare temporaneamente tutti i suoni dell'app %1$@ ?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan kan jeg midlertidig dempe alle %1$@-applydene?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jak mogę tymczasowo wyciszyć wszystkie dźwięki aplikacji %1$@ ?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Как временно отключить все звуки приложения %1$@?" + } + } + } + }, + "How to update (LoopDocs)" : { + "comment" : "The title text for how to update", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jak aktualizovat (LoopDocs)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sådan opdaterer du (LoopDocs)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wie man aktualisiert (LoopDocs)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cómo actualizar (LoopDocs)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comment mettre à jour (LoopDocs)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כיצד לעדכן (LoopDocs)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Come Aggiornare (LoopDocs)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvordan oppdatere (LoopDocs)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoe bij te werken (LoopDocs)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jak zaktualizować (LoopDocs)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cum se actualizează (LoopDocs)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Как обновить (LoopDocs)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nasıl güncellenir (LoopDocs)" + } + } + } + }, + "https://mysite.herokuapp.com" : { + "comment" : "The placeholder text for the nightscout site URL credential", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "https://mysite.herokuapp.com" + } + } + } + }, + "If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." : { + "comment" : "Focus modes descriptive text (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvis iOS-fokustilstand er slået TIL, og Slå lyden fra-advarsler er slået fra, leveres kritiske advarsler stadig, og ikke-kritiske advarsler slås fra, indtil %1$@ føjes til hver fokustilstand som en tilladt app." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si le mode Concentration d'iOS est activé et que les Alertes Muettes sont désactivées, les Alertes Critiques seront toujours livrées et les Alertes non Critiques seront silencieuses jusqu'à ce que %1$@ soit ajouté à chaque mode Concentration en tant qu'application autorisée." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se la modalità Focus iOS è attiva e Disattiva avvisi è disattivata, gli avvisi critici verranno comunque inviati e gli avvisi non critici verranno silenziati finché %1$@ non verrà aggiunto a ciascuna modalità Focus come app consentita." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvis iOS Focus Mode er PÅ og Mute Alerts er AV, vil kritiske varsler fortsatt bli levert og ikke-kritiske varsler vil bli dempet inntil %1$@ er lagt til i hver Focus Mode som en tillatt app." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jeśli tryb skupienia w systemie iOS jest włączony, a opcja Wycisz alerty jest wyłączona, alerty krytyczne będą nadal dostarczane, a alerty niekrytyczne będą wyciszane, dopóki %1$@ nie zostanie dodany do każdego trybu skupienia jako dozwolona aplikacja." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если режим фокусировки iOS включен, а функция отключения оповещений выключена, критические оповещения будут по-прежнему доставляться, а некритические будут глушиться до тех пор, пока %1$@ не будет добавлен в каждый режим фокусировки в качестве разрешенного приложения." + } + } + } + }, + "Immediate" : { + "comment" : "Immediate Delivery status text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akut" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sofort" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inmediato" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Immédiat" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Immediato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Umiddelbar" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onmiddellijk" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Natychmiastowy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imediat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немедленно" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acilen" + } + } + } + }, + "In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." : { + "comment" : "Algorithm Experiments description second paragraph.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "I fremtidige versioner af Loop kan disse eksperimenter ændre sig, ende som standarddele af Loop-algoritmen eller blive fjernet helt fra Loop. Følg med i Loop Zulip-chatten for at holde dig informeret om mulige ændringer af disse funktioner." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In zukünftigen Versionen von Loop können sich diese Experimente ändern, als Standardbestandteile des Loop-Algorithmus enden oder vollständig aus Loop entfernt werden. Bitte folgen Sie dem Loop Zulip-Chat, um über mögliche Änderungen dieser Funktionen auf dem Laufenden zu bleiben." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dans les futures versions de Loop, ces essais peuvent changer, devenir des parties standard de l'algorithme Loop, ou être complètement retirées de Loop. Veuillez suivre le chat Zulip de Loop pour rester informé des éventuels changements sur ces fonctionnalités." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nelle versioni future di Loop questi esperimenti potrebbero cambiare, diventare parti standard dell'algoritmo Loop o essere rimossi completamente da Loop. Segui la chat di Loop Zulip per rimanere informato su possibili modifiche a queste funzionalità." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "I fremtidige versjoner av Loop kan disse eksperimentene endres, ende opp som standarddeler av Loop-algoritmen eller fjernes helt fra Loop. Følg med i Loop Zulip-chatten for å holde deg informert om eventuelle endringer i disse funksjonene." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "W przyszłych wersjach Loop te eksperymenty mogą się zmienić, stać się standardowymi częściami algorytmu Loop lub zostać całkowicie usunięte z Loop. Śledź czat Loop Zulip, aby być na bieżąco z możliwymi zmianami w tych funkcjach." + } + } + } + }, + "Indefinitely" : { + "comment" : "The title of a target alert action specifying an indefinitely long workout targets duration", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إلى أجل غير مسمى" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uendelig" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbegrenzt" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indefinitely" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indefinidamente" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toistaiseksi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indéfiniment" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indefinitely" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indefinitamente" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無期限" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "På ubestemt tid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voor onbepaalde tijd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niemożliwy do określenia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indefinidamente" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nedeterminat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "На неопределенное время" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oändligt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Süresiz" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vô hạn định" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "永久" + } + } + } + }, + "Information" : { + + }, + "Insulin" : { + "comment" : "Title of the prediction input effect for insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأنسولين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliini" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インスリン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Инсулин" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thuốc Insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素" + } + } + } + }, + "Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" : { + "comment" : "Description of the prediction input effect for insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الأنسولين الذي تم امتصاصه (وحدات) × حساسيو الأنسولين (%1$@/وحدة)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin absorberet (E) × Insulinfølsomhed (%1$@/E)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resorbiertes Insulin (IE) × Insulinempfindlichkeit (%1$@/IE)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Absorbida (U) x Sensibilidad a Insulina (%1$@/U)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Imeytynyt insuliini (U) × Insuliiniherkkyys (%1$@/U)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline Absorbée (U) × Sensibilité à l'Insuline (%1$@/U)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina assorbita (U) × Sensibilità insulinica (%1$@/U)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "吸収済インスリン(U) × インスリン効果値(%1$@/U)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin absorbert (E) × insulinfølsomhet ( %1$@ /E)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opgenomen Insuline (E) x Insulinegevoeligheid (%1$@/E)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina podana (U) × czułość insuliny (%1$@/J)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Absorvida (U) × Sensibilidade a Insulina (%1$@/U)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină absorbită (U) × factor de sensibilitate la insulină (%1$@/U)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Усвоенный инсулин (U) × Чувствительность к инсулину (%1$@/U)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin absorberat (E) × Insulinkänslighet (%1$@/E)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Emilen İnsulin (Ü) × İnsulin Duyarlılığı (%1$@/Ü)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng insulin tiêu hao (U) × Độ nhạy của insulin (%1$@/U)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已吸收胰岛素×胰岛素敏感系数" + } + } + } + }, + "Insulin adjustments have been disabled!" : { + "comment" : "Notification body for crash recovery alert", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinjusteringer er blevet deaktiveret!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Insulinanpassung wurde deaktiviert!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Se han deshabilitado los ajustes de insulina!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les ajustements d’insuline ont été désactivés!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le regolazioni dell'insulina sono state disattivate!" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinjusteringer er deaktivert!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulineaanpassingen zijn uitgeschakeld!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Korekty insuliny zostały wyłączone!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustările de insulină au fost dezactivate!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Регулировка инсулина была отключена!" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin ayarlamaları devre dışı bırakıldı!" + } + } + } + }, + "Insulin Delivery" : { + "comment" : "The title of the insulin delivery graph", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "توصيل الأنسولين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintilførsel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinabgabe" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administración de Insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliinin annostelu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administration de l'insuline" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Delivery" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erogazione insulina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インスリン放出" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinlevering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinetoediening" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podaż insuliny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Entregue" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrare insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подача инсулина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podávanie inzulínu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin doserat" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsulin İletimi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khối lượng tiêm insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已输注胰岛素" + } + } + } + }, + "Insulin effects" : { + "comment" : "Details for missing data error when insulin effects are missing\nDetails for missing data error when insulin effects including pending insulin are missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأثيرات الأنسولين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulineffekter" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinwirkungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efectos de la insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliinivaikutus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effets de l'insuline" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin effects" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effetto dell’insulina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インスリン効果" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin effekt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulineëffecten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "wpływ insuliny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efeitos da Insulina" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efecte insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Влияние инсулина" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulineffekter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin etkileri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tác dụng của insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素效果" + } + } + } + }, + "Insulin Model" : { + "comment" : "Details for configuration error when insulin model is missing\n The title text for the insulin model setting row", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نوع الأنسولين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinmodel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin-Modell" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Model" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modelo de Insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliinimalli" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modèle d'insuline" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Model" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modello di azione dell'Insulina" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インスリンモデル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Modell" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinemodel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model insuliny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modelo de Insulina" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modelul de insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Модель инсулина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inzulínový model" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinmodell" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin Modeli" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chủng loại Insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素模型" + } + } + } + }, + "Insulin Pump" : { + "comment" : "Descriptive text for Insulin Pump", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinpumpe" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinpumpe" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Microinfusadora de insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliinipumppu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompe à insuline" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinpumpe" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinepomp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa insulinowa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa de insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Инсулиновая помпа" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinpump" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin pompası" + } + } + } + }, + "Insulin Sensitivities" : { + "comment" : "The title of the insulin sensitivities schedule screen\n The title text for the insulin sensitivity schedule", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حساسية الأنسولين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinfølsomheder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinempfindlichkeit" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Sensitivities" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensibilidad a la insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliiniherkkyydet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Facteurs de sensibilité à l'insuline" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin Sensitivities" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensibilità insulinica" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "インスリン効果値" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinfølsomhet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinegevoeligheden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wrażliwość na insulinę (ISF)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensibilidades a Insulina" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Factor de sensibilitate la insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Факторы чувствительности инсулина" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinkänslighet" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin Duyarlılığı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Độ nhạy của Insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素敏感系数" + } + } + } + }, + "Insulin Sensitivity Schedule" : { + "comment" : "Details for configuration error when insulin sensitivity schedule is missing", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinfølsomhed tidsplan" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinempfindlichkeit Plan" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horario de la sensibilidad a la insulina" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Horaire de facteur de sensibilité à l'insuline" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programma di sensibilità insulinica" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin følsomhet tidsplan" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinegevoeligheidschema" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Harmonogram wrażliwości na insulinę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programul Factorului de Sensibilitate la Insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "График чувствительности к инсулину" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin Duyarlılık Programı" + } + } + } + }, + "Insulin Suspended" : { + "comment" : "The title of the cell indicating the pump is suspended", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulin suspenderet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinabgabe unterbrochen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Suspendida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliini pysäytetty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline suspendue" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina sospesa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintilførsel utsatt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline Onderbroken" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podawanie Zawieszone" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrarea insulinei suspendată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подача инсулина приостановлена" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintillförsel pausad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin Askıya Alındı" + } + } + } + }, + "Insulin Type" : { + "comment" : "Insulin type label", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Typ inzulínu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintype" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintyp" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tipo de Insulina" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuliinityyppi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type d'insuline" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סוג האינסולין" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tipo d'insulina" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintype" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulinetype" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rodzaj insuliny" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tipul de insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Тип инсулина" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Typ inzulínu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulintyp" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin Tipi" + } + } + } + }, + "Integral Retrospective Correction" : { + "comment" : "Title for integral retrospective correction experiment description\nTitle of integral retrospective correction experiment", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integral Retrospective Correction" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integrale retrospektive Korrektur" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correzione retrospettiva integrale (IRC)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integrert retrospektiv korreksjon" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integralna korekta retrospektywna" + } + } + } + }, + "Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." : { + "comment" : "Description of Integral Retrospective Correction toggle.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integral Retrospective Correction (IRC) er en udvidelse af standard Retrospective Correction (RC) algoritmekomponent i Loop, som justerer prognosen baseret på historikken med uoverensstemmelser mellem forudsagte og faktiske glukoseniveauer.\n\nI modsætning til RC, der ser på uoverensstemmelser i løbet af de sidste 30 minutter, med IRC, tilføjes historikken over uoverensstemmelser over tid. Så fortsatte positive uoverensstemmelser over tid vil resultere i øget dosering. Hvis uoverensstemmelserne er negative over tid, vil Loop reducere doseringen yderligere." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integral Retrospective Correction (IRC) ist eine Erweiterung der standardmäßigen Retrospective Correction (RC)-Algorithmuskomponente in Loop, die die Prognose basierend auf der Historie der Abweichungen zwischen vorhergesagten und tatsächlichen Glukosewerten anpasst. \n\nIm Gegensatz zu RC, das die Abweichungen der letzten 30 Minuten betrachtet, summiert sich bei IRC der Verlauf der Abweichungen im Laufe der Zeit. Daher führen anhaltende positive Abweichungen im Laufe der Zeit zu einer erhöhten Dosierung. Wenn die Abweichungen im Laufe der Zeit negativ sind, reduziert Loop die Dosierung weiter." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correzione retrospettiva integrale (IRC) è un'estensione del componente standard dell'algoritmo di correzione retrospettiva (RC) in Loop, che regola la previsione in base alla cronologia delle discrepanze tra i livelli di glicemia previsti e quelli effettivi. \n\nA differenza di RC, che esamina le discrepanze negli ultimi 30 minuti, con IRC la cronologia delle discrepanze si accumula nel tempo. Pertanto, continue discrepanze positive nel tempo comporteranno un aumento del dosaggio. Se le discrepanze diventano negative nel tempo, Loop ridurrà ulteriormente il dosaggio." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integral Retrospective Correction (IRC) er en utvidelse av standardalgoritmekomponenten Retrospective Correction (RC) i Loop, som justerer prognosen basert på historikken for avvik mellom forventede og faktiske glukosenivåer.\n\nI motsetning til RC, som ser på avvik i løpet av de siste 30 minuttene, summerer IRC avvikene over tid. Fortsatte positive avvik over tid vil derfor føre til økt dosering. Hvis avvikene er negative over tid, vil Loop redusere doseringen ytterligere." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integralna korekta retrospektywna (IRC) jest rozszerzeniem standardowego komponentu algorytmu Korekta retrospektywna (RC) w Loop, który koryguje prognozę na podstawie historii rozbieżności między przewidywanymi a rzeczywistymi poziomami glukozy. \n\n W przeciwieństwie do RC, który analizuje rozbieżności w ciągu ostatnich 30 minut, w przypadku IRC historia rozbieżności sumuje się w czasie. Tak więc utrzymujące się dodatnie rozbieżności w czasie spowodują zwiększenie dawki. Jeśli rozbieżności są ujemne w czasie, Loop jeszcze bardziej zmniejszy podawanie insuliny." + } + } + } + }, + "Interrupted %1$@: %2$@ of %3$@ %4$@" : { + "comment" : "Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afbrudt %1$@: %2$@ af %3$@ %4$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ unterbrochen: %2$@ von %3$@ %4$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ interrumpido: %2$@ de %3$@ %4$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keskeytetty %1$@: %2$@ / %3$@ %4$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interrompu %1$@: %2$@ de %3$@ %4$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interrotto %1$@: %2$@ di %3$@ %4$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbrutt %1$@: %2$@ av %3$@ %4$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onderbroken %1$@: %2$@ van %3$@ %4$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przerwane %1$@ : %2$@ z %3$@ %4$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Întrerupere %1$@: %2$@ din %3$@ %4$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прервано %1$@: %2$@ из %3$@ %4$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avbruten %1$@: %2$@ av %3$@ %4$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kesintiye uğradı: %3$@ %4$@'nın %2$@ 'si" + } + } + } + }, + "Invalid absorption time: %1$@ hours" : { + "comment" : "Carb error description: invalid absorption time. (1: Input duration in hours).", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig absorptionstid: %1$@ timer" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Periodo di assorbimento non valido: %1$@ ore" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig absorpsjonstid: %1$@ timer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieprawidłowy czas absorpcji: %1$@ godz" + } + } + } + }, + "Invalid Bolus Amount" : { + "comment" : "Bolus error description: invalid bolus amount.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig bolusmængde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige Bolusmenge" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantité de bolus invalide" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות בולוס לא תקינה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantità bolo non valida" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig bolusmengde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongeldige bolushoeveelheid" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieprawidłowa wielkość bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitate invalidă de bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неверный объем болюса" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz Bolus Miktarı" + } + } + } + }, + "Invalid carb amount" : { + "comment" : "Carb error description: invalid carb amount.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig kulhydratmængde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige Kohlenhydratmenge" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantidad de carbohidratos no válida" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantité de glucides invalide" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות פחמימות לא תקינה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantità di carboidrati non valida" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig karbohydratmengde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongeldige hoeveelheid koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieprawidłowa ilość węglowodanów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitate de carbohidrați invalidă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неверное количество углеводов" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz karb miktarı" + } + } + } + }, + "Invalid data: %1$@" : { + "comment" : "The error message when invalid data was encountered. (1: details of invalid data)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بيانات غير صالحة: %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejlagtige data: %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige Daten: %1$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid data: %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datos no válidos: %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Virheellinen tieto: %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Données Incorrectes: %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invalid data: %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dati non validi: %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "無効データ: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldige data: %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongeldige gegevens: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błędne dane: %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dados inválidos: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Date invalide: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неверные данные: %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ogiltigt värde: %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz veri: %1$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu vô hiệu: %1$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无效数据: %1$@" + } + } + } + }, + "Invalid Future Glucose" : { + "comment" : "Title for bolus screen notice when glucose data is in the future", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig fremtidig glukose" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige zukünftige Blutzuckerwerte" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa futura no válida" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie future invalide" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia futura non valida" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig fremtidig blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongeldige Toekomstige Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przyszła glukoza nie jest znana" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemie Viitoare Invalidă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Недействительная будущая глюкоза" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz Gelecek Glikoz" + } + } + } + }, + "Invalid glucose reading with a timestamp that is %1$@ in the future" : { + "comment" : "The error message when glucose data is in the future. (1: glucose data time in future in minutes)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig glukoseaflæsning med et tidsstempel, der er %1$@ i fremtiden" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültiger Blutzuckermesswert mit einem Zeitstempel, der %1$@ in der Zukunft liegt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lectura de glucosa no válida de %1$@ en el futuro" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lecture de glucose non valide avec un horodatage situé à %1$@ dans le futur" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lettura della glicemia non valida con data e ora %1$@ nel futuro" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ugyldig blodsukkermåling med et tidsstempel som er %1$@ i fremtiden" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongeldige glucosemeting met een tijdstempel dat %1$@ in de toekomst ligt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieprawidłowy odczyt glukozy ze znacznikiem czasu, który wynosi %1$@ w przyszłości" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Citirea invalidă a glicemiei cu un marcaj temporal care este %1$@ în viitor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неверное показание глюкозы с временной меткой, которая находится на %1$@ в будущем" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gelecekte %1$@ olan bir zaman damgasıyla geçersiz KŞ okuması" + } + } + } + }, + "iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritiske iOS-advarsler og tidsfølsomme advarsler er typer Apple-meddelelser. De bruges til begivenheder med høj prioritet. Nogle eksempler inkluderer:" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les alertes critiques iOS et les alertes urgentes sont des types de notifications Apple. Elles sont utilisées pour des événements de haute priorité. Voici quelques exemples :" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "gli avvisi critici e gli avvisi sensibili al tempo di iOS sono tipi di notifiche Apple. Vengono utilizzati per eventi ad alta priorità. Alcuni esempi sono:" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "iOS Critical Alerts og Time Sensitive Alerts er typer Apple-varsler. De brukes ved hendelser med høy prioritet. Noen eksempler er:" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerty krytyczne systemu iOS i alerty zależne od czasu to typy powiadomień Apple. Wykorzystuje się je do zdarzeń o wysokim priorytecie. Oto kilka przykładów:" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Критические оповещения iOS и срочные оповещения — это типы уведомлений Apple. Они используются для проведения высокоприоритетных мероприятий. Вот некоторые примеры:" + } + } + } + }, + "IOS FOCUS MODES" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "iOS-FOKUSTILSTANDE" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "MODES DE CONCENTRATION IOS" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "MODALITÀ FOCUS IOS" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOS-FOKUSMODUSER" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "TRYBY SKUPIENIA IOS" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "РЕЖИМЫ ФОКУСИРОВКИ IOS" + } + } + } + }, + "Issue Report" : { + "comment" : "The title text for the issue report menu item\nThe view controller title for the issue report screen", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تقرير المشكلة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejlrapport" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problembericht" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informe de Errores" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ongelmaraportti" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Créer un rapport" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Issue Report" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Report problemi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "問題を報告" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Problem Rapport" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probleemrapportage" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zgłaszanie błędów" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerar Relatório" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raportare probleme" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сообщить об ошибке" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skapa felrapport" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sorun Raporu" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xuất bản Báo cáo" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "反馈问题" + } + } + } + }, + "It looks like you may not have logged a meal you ate. Tap to log it now." : { + "comment" : "The notification description for a meal that was possibly not logged in Loop.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det ser ud til, at du måske ikke har indtastet et måltid, du har spist. Tryk for at logge det nu." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es sieht so aus, als ob du vergessen hast eine Mahlzeit einzugeben. Tippe um sie nun einzutragen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il semble que vous n'ayez pas enregistré un repas que vous avez pris. Appuyez pour l'enregistrer maintenant." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ייתכן ולא הזנת ארוחה שאכלת. לחץ כדי להזין אותה כעת." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sembra che non sia stato registrato un pasto consumato. Tocca per registrarlo ora." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det ser ut til at du kanskje ikke har logget et måltid du har spist. Trykk for å logge den nå." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het lijkt erop dat je een maaltijd die je hebt gegeten niet hebt toegevoegd. Tik om het nu toe te voegen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wygląda na to, że nie wprowadziłeś zjedzonego posiłku. Stuknij, aby dodać zaległy posiłek." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se pare că nu ați înregistrat o masă pe care ați mâncat-o. Atingeți pentru a o înregistra acum." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Похоже, что Вы не ввели съеденную Вами еду. Нажмите , чтобы записать ее сейчас." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Görünüşe göre yediğiniz bir yemeği kaydetmemiş olabilirsiniz. Şimdi kaydetmek için dokunun." + } + } + } + }, + "Large Meal Entered" : { + "comment" : "Title of the warning shown when a large meal was entered", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stort måltid indtastet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Große Mahlzeit eingegeben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comida grande ingresada" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grand repas entré" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ארוחה גדולה נרשמה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pasto abbondante inserito" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Angitt Stort Måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grote Maaltijd Ingevoerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadzono duży posiłek" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "O cantitate mare de carbohidrați a fost introdusă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введена большая порция еды" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Büyük Yemek Girildi" + } + } + } + }, + "Launches CGM app" : { + "comment" : "Glucose HUD accessibility hint", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قم بتشغيل تطبيق نظام متابعة سكر الدم المستمرة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åbner CGM app’en" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öffnet die CGM-App" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Launches CGM app" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lanza app MCG" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avaa CGM-sovelluksen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lance l'application CGM" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מפעיל אפליקציית חיישן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avvia l'app CGM" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGMアプリを起動" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laster inn CGM-appen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lanceert CGM app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uruchamia aplikację CGM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inicia app CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lansează aplicația CGM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запускает приложение непрерывного мониторинга CGM" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Startar CGM-app" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "CGM uygulamasına erişim" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Phát hành ứng dụng CGM" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启动CGM软件" + } + } + } + }, + "Learn More" : { + "comment" : "OK button title for alert shown when delivery status is uncertain", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lær mere" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mehr erfahren" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Más información" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lue lisää" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En savoir plus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מידע נוסף" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ulteriori informazioni" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lære mer" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meer Informatie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dowiedz się więcej" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aflați mai multe" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подробнее" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lär dig mer" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daha fazla bilgi edin" + } + } + } + }, + "Less than a minute remaining" : { + "comment" : "Estimated remaining duration with less than a minute", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mindre end 1 minut tilbage" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weniger als eine Minute verbleiben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Queda menos de un minuto" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle minuutti jäljellä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Moins d'une minute restante" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נותרה פחות מדקה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meno di un minuto rimanente" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mindre enn et minutt gjenstår" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Minder dan een minuut resterend" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pozostało mniej niż minutę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "A rămas mai puțin de un minut" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Осталось меньше минуты" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mindre än en minut återstår" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir dakikadan az kaldı" + } + } + } + }, + "Loading..." : { + "comment" : "The loading message for the diagnostic report screen", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تحميل..." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indlæser..." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cargando..." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ladataan..." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chargement..." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loading..." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caricamento in corso..." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ロード中..." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laster inn..." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laden..." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ładowanie..." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carregando..." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se încarcă..." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Загрузка..." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laddar..." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yükleniyor..." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đang tải..." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "读取中..." + } + } + } + }, + "Log Dose" : { + "comment" : "Button text to log a dose\nTitle for dose logging screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Log dosis" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosis speichern" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registrar dosis" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjaa annos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregistrer la dose" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registra dose" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logg Dose" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Registreer Dosis" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarejestruj dawkę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înregistrează Doză" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доза из лога" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logga Dos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Günlük Doz" + } + } + } + }, + "Logged Insulin Dose" : { + "comment" : "The title of the screen displaying a manually entered insulin dose", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logget insulindosis" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gespeicherte Insulindosis" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosis de insulina registrada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kirjattu insuliiniannos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dose d'insuline enregistrée" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dose d'insulina registrata" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Logget insulindose" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geregistreerde Insulinedosis" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarejestrowana dawka insuliny" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doza de insulină înregistrată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зарегистрированная доза инсулина" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggad insulindos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kayıtlı İnsülin Dozu" + } + } + } + }, + "Loggly" : { + "comment" : "The title of the loggly service", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + } + } + }, + "Loop Crashed" : { + "comment" : "Title for crash recovery alert", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop er crashet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ist abgestürzt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falla del Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Panne de Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop è crashato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop krasjet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop is Vastgelopen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla uległa awarii" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop s-a închis" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Произошел сбой приложения" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Çöktü" + } + } + } + }, + "Loop Failure" : { + "comment" : "The notification title for a loop failure", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فشل في الحلقة المغلقة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop-fejl" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop fehlgeschlagen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falla del Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopin häiriö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Echec de Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Failure" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Malfunzionamento di Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループの不良" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop-feil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopstoring" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Awaria pętli" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falha no Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eșec Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка в работе петли" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopfel" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü Hatası" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop lỗi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop失败" + } + } + } + }, + "Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." : { + "comment" : "Bluetooth unavailable alert body.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har opdaget et problem med dine Bluetooth-indstillinger, og fungerer ikke korrekt, før Bluetooth er aktiveret. Du vil ikke få blodsukkeraflæsninger eller være i stand til at give bolus." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop hat ein Problem mit Deinen Bluetooth-Einstellungen festgestellt und funktioniert nicht, bis Bluetooth aktiviert ist. Du erhältst keine Blutzucker-Werte und es kann kein Bolus abgeben werden." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ha detectado un problema con la configuración de Bluetooth, y no funcionará correctamente hasta que el Bluetooth esté activado. No recibirás lecturas de glucosa, ni podrás dar los bolos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop on havainnut Bluetooth-asetuksissa ongelman, eikä se toimi oikein ennen kuin Bluetooth on otettu käyttöön. Et saa glukoosilukemia, etkä voi antaa bolusta." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop a détecté un problème avec vos paramètres Bluetooth, et ne fonctionnera pas correctement tant que le Bluetooth ne sera pas activé. Vous ne pourrez pas recevoir de lectures de glucose, ni être en mesure de faire un bolus." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ha rilevato un problema con le tue impostazioni Bluetooth e non funzionerà correttamente finché il Bluetooth non sarà attivato. Non riceverai letture glicemiche né potrai eseguire il bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har oppdaget et problem med Bluetooth-innstillingene dine, og vil ikke fungere før Bluetooth er aktivert. Du vil ikke motta blodsukkermålinger, eller være i stand til å gi bolus." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop heeft een probleem met je Bluetoothinstellingen gedetecteerd en zal niet goed werken totdat Bluetooth wordt ingeschakeld. Je ontvangt geen glucosemetingen en je kunt niet bolussen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop wykrył problem z ustawieniami Bluetooth i nie będzie działać poprawnie, dopóki Bluetooth nie zostanie włączony. Nie będziesz otrzymywać odczytów poziomu glukozy ani możliwości podania bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop a detectat o problemă cu setările Bluetooth și nu va funcționa cu succes până când Bluetooth nu este activat. Nu veţi primi valori ale glicemiei sau nu veţi putea face bolus." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop обнаружил проблему в настройках Bluetooth и не будет успешно работать, пока Bluetooth не будет включен. Вы не будете получать показания глюкозы и не сможете вводить болюс." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har upptäckt ett problem med dina Bluetooth-inställningar och kommer inte att fungera förrän Bluetooth är aktiverat. Du kommer varken att kunna se dina blodsockervärden eller att kunna ge någon bolus." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop, Bluetooth ayarlarınızla ilgili bir sorun algıladı ve Bluetooth etkinleştirilene kadar başarılı bir şekilde çalışmayacaktır. KŞ okumaları almayacaksınız veya bolus yapamayacaksınız." + } + } + } + }, + "Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." : { + "comment" : "Warning displayed when user is adding a meal from an missed meal notification", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har opdaget et overset måltid og vurderet dets størrelse. Rediger mængden af kulhydrater, så den svarer til mængden af kulhydrater, du har spist." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop hat eine vergessene Mahlzeit erkannt und deren Größe geschätzt. Passe die KH auf die Menge an, die Du wahrscheinlich gegessen hast." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop a détecté un repas manqué et a estimé sa taille. Modifiez la quantité de glucides pour qu'elle corresponde à la quantité de glucides que vous avez peut-être mangée." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop זיהה ארוחה שלא הוזנה והעריך את גודלה. ערוך את מספר הפחמימות כדי להתאים אותו לזה שאכלת." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ha rilevato un pasto saltato e ne ha stimato le dimensioni. Modifica la quantità di carboidrati in modo che corrisponda alla quantità di carboidrati che potresti aver mangiato." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har oppdaget et glemt måltid og estimert størrelsen. Rediger karbohydratmengden for å matche mengden av karbohydrater du måtte ha spist." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop heeft een gemiste maaltijd gedetecteerd en een schatting van de hoeveelheid gedaan. Bewerk de hoeveelheid koolhydraten, zodat deze overeenkomt met de hoeveelheid koolhydraten die je mogelijk hebt gegeten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla wykryła pominięty posiłek i oszacowała jego wielkość. Edytuj ilość węglowodanów, aby odpowiadała ilości węglowodanów, które mogłeś zjeść." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop a detectat o masă neanunțată și a estimat dimensiunea acesteia. Editați cantitatea de carbohidrați pentru a se potrivi cu cantitatea de carbohidrați pe care ați consumat-o." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop обнаружил пропущенный прием пищи и оценил его размер. Отредактируйте количество углеводов, чтобы оно соответствовало количеству тех углеводов, которые вы, возможно, съели." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop atlanmış bir öğün tespit etti ve boyutunu tahmin etti. Yemiş olabileceğiniz karbonhidrat miktarına uyması için karbonhidrat miktarını düzenleyin." + } + } + } + }, + "Loop has not completed successfully in %@" : { + "comment" : "The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لم تتم الحلقة المغلقة بنجاح منذ %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har ikke kørt korrekt i %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop wurde nicht erfolgreich abgeschlossen seit %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop no ha terminado correctamente en %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Häiriö Loopin toiminnassa %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop n'a pas bouclé avec succès depuis %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop has not completed successfully in %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop non ha funzionato correttamente per %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループが %@ の間クローズされていません" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har ikke fullført i %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop is niet goed afgerond in %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop nie działał poprawnie przez %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum ciclo completo com sucesso em %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop nu a rulat cu succes timp de %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ну удалось успешно замкнуть цикл/контур в %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop har inte lyckats köra på %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü %@ içinde başarıyla tamamlanamadı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop không hoạt động thành công trong %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop运行异常 %@" + } + } + } + }, + "Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." : { + "comment" : "Description of Glucose Based Partial Application toggle." + }, + "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." : { + "comment" : "Description string for automatic bolus dosing strategy", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop vil automatisk give bolus, når insulinbehov er over planlagt basal, og vil bruge midlertidige basalrater, når det er nødvendigt for at reducere insulinlevering under planlagt basal." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop gibt automatisch einen Bolus ab, wenn der Insulinbedarf über der geplanten Basalrate liegt, und verwendet temporäre Basalraten, wenn dies erforderlich ist, um die Insulinabgabe unter die geplante Basalrate zu reduzieren." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop administrará bolos automáticamente cuando las necesidades de insulina estén por encima del basal programado y utilizará ajustes temporales de basal cuando sea necesario para reducir la administración de insulina por debajo del basal programado." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop annostelee automaattisen boluksen kun insuliinitarve ylittää ohjelmoidun basaalin, ja käyttää tilapäisiä alhaisempia basaalitasoja kun tarvitaan vähemmän insuliinia." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop effectue automatiquement des bolus lorsque les besoins en insuline sont supérieurs au débit de base programmé, et utilise des débits basaux temporaires si nécessaire pour réduire l'administration d'insuline en dessous du débit de base programmé." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop eseguirà automaticamente il bolo quando il fabbisogno d'insulina è superiore alla basale programmata e utilizzerà velocità basali temporanee quando necessario per ridurre l'erogazione d'insulina al di sotto della basale programmata." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lopp vil sette bolus når insulinbehovet er over planlagt basal, og vil bruke midlertidige basale rater når det er nødvendig for å redusere insulintilførselen under planlagt basal" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop zal automatisch bolussen geven wanneer de insulinebehoefte groter is dan het ingestelde basaal, en Loop zal wanneer dat nodig is gebruik maken van tijdelijke basaalsnelheden om insulinetoediening te verlagen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla automatycznie poda bolusa, kiedy zapotrzebowanie na insulinę przekroczy zaplanowaną dawkę podstawową, a w razie potrzeby zredukuje zaplanowaną dawkę podstawową (bazę)." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop va bolusa automat când necesarul de insulină este deasupra bazalei programate, și va utiliza rate bazale temporare atunci când este necesar, pentru a reduce cantitatea de insulină administrată sub nivelul bazal programat." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop автоматически вводит болюсы, когда потребность в инсулине превышает запланированную базу, и при необходимости использует ВБС, чтобы снизить подачу инсулина ниже запланированной базы." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop kommer att ge bolus automatiskt när insulinbehovet är större än ordinarie basal och kommer, vid behov, att minska din ordinarie basal med temporära basaldoser för att minska insulintillförseln." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop, insülin ihtiyaçları programlanan bazalın üzerine çıktığında otomatik olarak bolus yapacak ve gerektiğinde insülin iletimini programlanan bazalın altına düşürmek için geçici bazal oranları kullanacaktır." + } + } + } + }, + "Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." : { + "comment" : "Bluetooth off background alert body.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop vil ikke fungere, før Bluetooth er aktiveret. Du vil ikke modtage glukoseaflæsninger eller være i stand til at give bolus." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop funktioniert nicht, bis Bluetooth aktiviert ist. Du erhältst keine Blutzuckerwerte und es kann kein Bolus abgeben werden." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop no funcionará correctamente hasta que el Bluetooth esté habilitado. No recibirá lecturas de glucosa ni podrá administrar bolus." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ne fonctionnera pas correctement tant que le Bluetooth ne sera pas activé. Vous ne pourrez pas recevoir de lectures de glucose, ni être en mesure de faire un bolus." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop לא תעבוד עד הפעלת Bluetooth. לא תוכל לקבל נתוני גלוקוז או להזריק בולוס." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop non funzionerà correttamente fino a quando il Bluetooth non sarà attivato. Non riceverai letture glicemiche né potrai eseguire il bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop vil ikke fungere før Bluetooth er aktivert. Du vil ikke motta blodsukkermålinger, eller være i stand til å gi bolus." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop werkt pas als Bluetooth is ingeschakeld. Je zult geen glucosemetingen ontvangen of een bolus kunnen toedienen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla nie będzie działać pomyślnie, dopóki Bluetooth nie zostanie włączony. Nie będziesz otrzymywać odczytów poziomu glukozy ani możliwości podania bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop nu va funcționa cu succes până când Bluetooth nu este activat. Nu veți primi citiri de glicemie sau nu veți putea să bolusați." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop не будет успешно работать, пока не будет включен Bluetooth. Вы не сможете получать показания уровня глюкозы или вводить болюсы." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bluetooth etkinleştirilene kadar döngü başarılı bir şekilde çalışmayacaktır. KŞ ölçümleri alamayacak veya bolus yapamayacaksınız." + } + } + } + }, + "Loop will set temporary basal rates to increase and decrease insulin delivery." : { + "comment" : "Description string for temp basal only dosing strategy", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop vil fastsætte midlertidige basalrater for at øge og reducere insulinafgivelse." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop stellt temporäre Basalraten ein, um die Insulinabgabe zu erhöhen oder zu verringern." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop establecerá basal temporales para aumentar y disminuir la administración de insulina." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop käyttää tilapäisiä basaalitasoja lisätäkseen tai vähentääkseen insuliinin annostelua." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop permet de définir des débits de base temporaires pour augmenter et diminuer l'administration d'insuline." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop תגדיר בזאלי זמני כדי להגדיל ולהקטין מתן אינסולין." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop imposterà velocità basali temporanee per aumentare e diminuire l'erogazione d'insulina." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop vil sette midlertidige basal rater for å øke og redusere insulin levering." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop stelt tijdelijke basaalsnelheden in om de insulinetoediening te verhogen of te verlagen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla ustawi tymczasowe dawki podstawowe, aby zwiększać lub zmniejszyć podawanie insuliny." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop va stabili ratele bazale temporare pentru a crește și reduce cantitatea de insulina livrata." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Петля установит ВБС для увеличения или уменьшения подачи инсулина." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop kommer att ställa in tillfälliga basalnivåer för att öka eller minska insulintillförsel." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop, insülin iletimini artırmak ve azaltmak için geçici bazal oranlar ayarlayacaktır." + } + } + } + }, + "Low Glucose" : { + "comment" : "Title for bolus screen warning when glucose is below glucose warning limit.\nTitle for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lav glukose" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niedriger Blutzucker" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa baja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie basse" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "גלוקוז נמוך" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia bassa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lavt blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lage Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niski poziom glukozy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemie scăzută" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Низкий уровень глюкозы" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Düşük KŞ" + } + } + } + }, + "Manage Permissions in Settings" : { + "comment" : "Manage Permissions in Settings button text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrer tilladelser i Indstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Berechtigungen in den Einstellungen verwalten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrar permisos en Configuración" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gérer les permissions dans les paramètres" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "קבע הרשאות בהגדרות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestisci le autorizzazioni in Impostazioni" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behandle tillatelser i Innstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beheer Toestemming in Instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarządzaj uprawnieniami w Ustawieniach" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestionați permisiunile din Setări" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управление разрешениями в настройках" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayarlarda İzinleri Yönetin" + } + } + } + }, + "Managing Alerts" : { + "comment" : "View title for how mute alerts work", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administration af advarsler" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestion des Alertes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestione degli avvisi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administrere varsler" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarządzanie alertami" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Управление оповещениями" + } + } + } + }, + "Manual Dose: %1$@ %2$@" : { + "comment" : "Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel dosis: %1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuelle Dosis: %1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosis manual: %1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dosage manuel : %1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות ידנית: %1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dose manuale: %1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuell dose: %1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doseer Handmatig: %1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dawka z pena: %1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doză manuală: %1$@ %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ручная доза: %1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel Doz: %1$@ %2$@" + } + } + } + }, + "Maximum Basal Rate Per Hour" : { + "comment" : "Details for configuration error when maximum basal rate per hour is missing", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal basalrate pr. time" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximale Basalte pro Stunde" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tasa basal máxima por hora" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Débit Basal Maximum par heure" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בזאלי מקסימלי לשעה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velocità basale massima all'ora" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal basaldose pr. time" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximale Basaalsnelheid Per Uur" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalna dawka podstawowa na godzinę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rata bazală maximă pe oră" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимальная базальная скорость в час" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saat Başı Maksimum Bazal Oran" + } + } + } + }, + "Maximum Bolus" : { + "comment" : "Details for configuration error when maximum bolus is missing", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximaler Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo Máximo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suurin sallittu bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Maximum" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מקסימלי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo massimo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大ボーラス" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maks bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximale Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalny bolus" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Máximo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus maxim" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимальный Болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximal bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimum Bolus" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liều Bolus tối đa" + } + } + } + }, + "Maximum Bolus Exceeded" : { + "comment" : "Title for bolus screen warning when max bolus is exceeded", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal bolus overskredet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximaler Bolus überschritten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo máximo excedido" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Maximum atteint" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חריגה מבולוס מקסימלי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo massimo superato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal bolus overskredet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximale Bolus Overschreden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przekroczono maksymalny bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusul maxim depășit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Превышен максимальный объем болюса" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimum Bolus Aşıldı" + } + } + } + }, + "Meal Bolus" : { + "comment" : "Title for bolus entry screen when also entering carbs", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Måltidsbolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mahlzeiten Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo de Comida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ateriabolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus de repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס לכיסוי ארוחה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo pasto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Måltidsbolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maaltijd Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Posiłkowy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus prandial" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс на еду" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Måltidsbolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yemek Bolusu" + } + } + } + }, + "mg/dL" : { + "comment" : "The short unit display string for milligrams of glucose per decilter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + } + } + }, + "Missed Meal Notifications" : { + "comment" : "Title for missed meal notifications toggle", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meddelelser om glemt måltid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verpasste Mahlzeit Benachrichtigung" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications de repas manqués" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראה על ארוחות שלא הוזנו" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifiche di pasti mancati" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varsler om tapte måltider" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gemiste Maaltijdmeldingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia o pominiętych posiłkach" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificări privind mesele pierdute" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления о пропущенных приемах пищи" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaçırılan Yemek Bildirimleri" + } + } + } + }, + "Missing data: %1$@" : { + "comment" : "The error message for missing data. (1: missing data details)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بيانات مفقودة: %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manglende data: %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fehlende Daten: %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Faltan Datos: %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiedot puuttuvat: %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Données manquantes: %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נתונים חסרים: %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dati mancanti: %1$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "データがありません: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manglende data: %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ontbrekende gegevens: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brakujące dane: %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dados ausentes: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Date lipsă: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пропущены данные: %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Saknar data: %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eksik veri: %1$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu thiếu: %1$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "数据缺失: %1$@" + } + } + } + }, + "Missing maximum allowed bolus in settings" : { + "comment" : "Bolus error description: missing maximum bolus in settings.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manglende maksimalt tilladt bolus i indstillingerne" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximal erlaubter Bolus in den Einstellungen fehlt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falta el bolo máximo permitido en la configuración" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus maximal autorisé manquant dans les paramètres" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מקסימלי חסר בהגדרות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manca il bolo massimo consentito nelle impostazioni" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mangler maksimalt tillatt bolus i innstillingene" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maximaal toegestane bolus ontbreekt in instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak ustawionego maksymalnego dozwolonego bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lipsește bolusul maxim permis în setări" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отсутствие максимально допустимого болюса в настройках" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayarlarda izin verilen maksimum bolus eksik" + } + } + } + }, + "mmol/L" : { + "comment" : "The short unit display string for millimoles of glucose per liter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ммоль/л" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + } + } + }, + "Momentum effects" : { + "comment" : "Details for missing data error when momentum effects are missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأثيرات النشاط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentumeffekter" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentum-Effekte" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efectos de Momento" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liikevaikutukset (momentum)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effets de momentum" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השפעות מומנטום" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effetti del momento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "モメンタム効果" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentum effekter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trendlijneffecten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "wpływ pędu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efeitos de aceleração" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efecte momentum" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Влияние динамики СК" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentumeffekter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentum etkileri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiệu ứng động lượng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "葡萄糖动量效应" + } + } + } + }, + "More Info" : { + "comment" : "Text for more info action on notification of upcoming TestFlight expiration\nText for more info action on notification of upcoming profile expiration", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mere Info" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weitere Info" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Más Info" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisätietoa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Plus d'informations" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מידע נוסף" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ulteriori informazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "詳細" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mer info" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meer Informatie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Więcej informacji" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mais Info" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalii" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доп. инфо" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mer info" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Daha fazla bilgi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thêm thông tin" + } + } + } + }, + "Mute All Alerts" : { + "comment" : "Label for button to mute all alerts", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå alle alarmer fra" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle Alarme stummschalten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Silenciar todas las alertas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enlever le son de toutes les alertes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השתק את כל ההתראות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattiva tutti gli avvisi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demp alle varsler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle Waarschuwingen Dempen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wycisz wszystkie alerty" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dezactivați toate alertele" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выключить все оповещения" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tüm Uyarıları Sessize Al" + } + } + } + }, + "Mute All Alerts Temporarily" : { + "comment" : "Title for mute alert duration selection action sheet", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå lyden fra for alle advarsler midlertidigt" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactiver temporairement toutes les alertes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattiva temporaneamente tutti gli avvisi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå av alle varsler midlertidig" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tymczasowo wycisz wszystkie alerty" + } + } + } + }, + "Needs Attention" : { + "comment" : "Sensor state description for the non-valid state", + "extractionState" : "manual", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Handling påkrævet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erfordert Aufmerksamkeit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necesita Atención" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarvitsee huomiota" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Demande votre attention" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "דורש תשומת לב" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richiede attenzione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "注意してください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trenger tilsyn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aandacht Nodig" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potrzebuje uwagi" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Precisa de Atenção" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necesită atenție" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Требует внимания" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kräver uppmärksamhet" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlgilenmeniz gerekiyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cần chú ý" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请注意" + } + } + } + }, + "Negative duration not allowed" : { + "comment" : "Override error description: negative duration error.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negativ varighed ikke tilladt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eine negative Dauer ist nicht erlaubt" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durée négative non autorisée" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משך זמן שלילי לא מותר" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durata negativa non consentita" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negativ varighet ikke tillatt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negatieve duur niet toegestaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ujemny czas trwania nie jest dozwolony" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durata negativă nu este permisă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отрицательная продолжительность не допускается" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negatif süreye izin verilmez" + } + } + } + }, + "New Favorite Food" : { + + }, + "Nightscout" : { + "comment" : "The title of the Nightscout service", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "نايتسكاوت" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout" + } + } + } + }, + "No alerts or alarms will sound while muted. Select how long you would you like to mute for." : { + "comment" : "Message for mute alert duration selection action sheet", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen advarsler eller alarmer lyder, mens lyden er slået fra. Vælg, hvor længe du vil slå lyden fra." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun avviso o allarme suonerà quando l'audio è disattivato. Seleziona per quanto tempo desideri disattivare l'audio." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen varsler eller alarmer vil høres mens de er dempet. Velg hvor lenge du ønsker å dempe lyden." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Po wyciszeniu nie będą emitowane żadne alerty ani alarmy. Wybierz, jak długo chcesz wyciszyć." + } + } + } + }, + "No Bolus Recommended" : { + "comment" : "Title for bolus screen notice when no bolus is recommended\nTitle for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended\nTitle for bolus screen warning when no bolus is recommended", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen bolus anbefalet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kein Bolus empfohlen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay bolo recomendado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusta ei suositella" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucun Bolus Recommandé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין המלצה לבולוס" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun bolo consigliato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen anbefalt bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Bolus Aanbevolen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus nie jest zalecany" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niciun bolus recomandat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет рекомендации болюса" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen bolus rekommenderas" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Önerilmez" + } + } + } + }, + "No connected devices, or failure during device connection" : { + "comment" : "The error message displayed for device connection errors.", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يوجد أجهزة متصلة, أو يوجد خطأ أثناء الاتصال" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen tilsluttede enheder eller fejl under forbindelse til enhed" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine verbundenen Geräte oder Fehler während der Geräteverbindung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay dispositivos conectados o falla durante conexión de dispositivo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei yhdistettyjä laitteita tai häiriö laiteyhteydessä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pas d'appareil connecté, ou échec durant la connexion à l'appareil" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין מכשירים מחוברים, או שישנה שגיאת התחברות." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun dispositivo connesso o mancanza di segnale durante la connessione del dispositivo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "機器が未接続、または接続に問題" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen tilkoblede enheter, eller feil under enhetstilkobling" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen aangesloten apparaten of storingen tijdens het verbinden met het apparaat" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak podłączonych urządzeń lub awaria podczas połączenia urządzenia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum dispositivo conectado ou falha durante a conexão" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu este conectat niciun dispozitiv sau s-a produs o eroare la conectare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Устройства не сопряжены или произошла ошибка во время сопряжения" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen ansluten enhet, eller fel vid anslutning till enhet" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bağlı cihaz yok veya cihaz bağlantısı sırasında hata" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không có thiết bị nào được kết nối, hoặc lỗi trong quá trình kết nối" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有连接的设备,或设备连接期间发生故障" + } + } + } + }, + "No Maximum Bolus Configured" : { + "comment" : "Alert title for a missing maximum bolus setting error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen maksimal bolus konfigureret" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kein maximaler Bolus konfiguriert" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay bolo máximo configurado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimibolusta ei ole määritetty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucun Bolus Maximum configuré" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא הוגדר בולוס מקסימלי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun bolo massimo configurato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen maksimal bolus er konfigurert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Maximale Bolus Geconfigureerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie skonfigurowano maksymalnego bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusul Maxim nu este setat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не установлен максимальный болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen maximal bolus har blivit inställd" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yapılandırılmış Maksimum Bolus Yok" + } + } + } + }, + "No Pump Configured" : { + "comment" : "Alert title for a missing pump error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen pumpe konfigureret" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Pumpe konfiguriert" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No hay microinfusadora configurada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumppua ei ole määritetty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pas de pompe configurée" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא הוגדרה משאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessuna pompa configurata" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen pumpe er konfigurert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Pomp Geconfigureerd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie skonfigurowano pompy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicio pompă configurată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет настроенной помпы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen pump konfigurerad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yapılandırılmış Pompa Yok" + } + } + } + }, + "No Recent Glucose" : { + "comment" : "The title of the cell indicating that there is no recent glucose", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen nyere glukose" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kein aktueller Blutzucker " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sin glucosa reciente" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei viimeaikaisia glukoositietoja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pas de Glycémie récente" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין גלוקוז לאחרונה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessuna glicemia recente" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen ny blodsukkermåling" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Recente Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak aktualnej glukozy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu există date recente despre glicemie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет актуальных данных о глюкозе" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inga senaste blodglukosvärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son KŞ Yok" + } + } + } + }, + "No Recent Glucose Data" : { + "comment" : "Title for bolus screen notice when glucose data is missing or stale", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen nylige glukosedata" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kein aktueller Blutzucker " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sin datos de glucosa recientes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei viimeaikaisia glukoositietoja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pas de Glycémie récente" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין נתוני גלוקוז אחרונים" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun dato recente sulla glicemia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen nye blodsukkerdata" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Recente Glucosegegevens" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak ostatnich danych dotyczących glukozy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu există date recente despre glicemie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет актуальных данных о глюкозе" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inget aktuellt blodsockervärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son KŞ Verisi Yok" + } + } + } + }, + "No Recent Pump Data" : { + "comment" : "Title for bolus screen notice when pump data is missing or stale", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen nyere pumpedata" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keine Pumpendaten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sin datos de microinfusora recientes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei viimeaikaisia pumpun tietoja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucune donnée de pompe récente" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אין נתוני משאבה אחרונים" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessun dato recente sulla pompa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mangler relevant pumpdata" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen Recente Pompgegevens" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak ostatnich danych pompy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu există date recente despre pompă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет актуальных данных от помпы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det finns inga aktuella pumpdata" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son Pompa Verisi Yok" + } + } + } + }, + "No, edit amount" : { + "comment" : "The title of the action used when rejecting the the amount of carbohydrates entered.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nej, indstil mængde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nein, Menge bearbeiten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No, editar cantidad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non, modifier la quantité" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא, ערוך כמות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "No, modifica la quantità" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nei, rediger mengde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nee, hoeveelheid aanpassen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie, edytuj ilość" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu, modificați cantitatea" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет, редактировать сумму" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hayır, miktarı düzenle" + } + } + } + }, + "Notification Delivery" : { + "comment" : "Notification Delivery Status text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifikationsindstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungszustellung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrega de notificaciones" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notification de l'administration" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משלוח הודעות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invio delle notifiche" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varslingslevering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afleveren Meldingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostarczanie powiadomień" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Livrare notificare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Доставка уведомлений" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirim Gönderimi" + } + } + } + }, + "Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." : { + "comment" : "Format for Critical Alerts permissions disabled alert body. (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifikationer er indstillet til et Planlagt resumé i telefonens indstillinger.\n\nFor at undgå forsinkelser ved modtagelse af notifikarioner fra %1$@ anbefaler vi, at notifikationslevering er indstillet til øjeblikkelig levering." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Benachrichtigungszustellung ist in den Einstellungen Deines Telefons auf geplante Zusammenfassung eingestellt.\n\nUm Verzögerungen beim Erhalt von Benachrichtigungen von %1$@ zu vermeiden, empfehlen wir, die Benachrichtigungszustellung auf sofortige Zustellung einzustellen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El envío de notificaciones está configurado como Resumen Programado en los ajustes del teléfono.\n\nPara evitar retrasos en la recepción de notificaciones de %1$@, le recomendamos que configure el envío de notificaciones como Entrega inmediata." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'envoi des notifications est réglé sur \"Résumé programmé\" dans les paramètres de votre téléphone.\n\nPour éviter tout retard dans la réception des notifications de %1$@, nous vous recommandons de régler l'envoi des notifications sur \"Envoi immédiat\"." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משלוח התראות מוגדר לסיכום מתוזמן בהגדרות הטלפון שלך. \n\n כדי למנוע עיכוב בקבלת התראות מ- %1$@ , אנו ממליצים להגדיר את משלוח ההתראות למשלוח מיידי." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'invio delle notifiche è impostato su Riepilogo pianificato nelle impostazioni del telefono. \n\nPer evitare ritardi nella ricezione delle notifiche da %1$@ , ti consigliamo di impostare l'invio delle notifiche su Consegna immediata." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varslingslevering er satt til Planlagt sammendrag i telefonens innstillinger. \n\n For å unngå forsinkelser i mottak av varsler fra %1$@ , anbefaler vi at varslingslevering settes til Umiddelbar levering." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De aflevering van meldingen in de instellingen van je telefoon staat op Gepland Overzicht.\n\nOm vertraging bij het ontvangen van meldingen van %1$@ te voorkomen, raden we je aan om de aflevering van meldingen in te stellen op Onmiddellijk Afleveren." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dostarczanie powiadomień jest ustawione na Zaplanowane podsumowanie w ustawieniach telefonu. \n\nAby uniknąć opóźnień w otrzymywaniu powiadomień od %1$@ , zalecamy ustawienie dostarczania powiadomień na Natychmiastowe dostarczanie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Livrarea notificărilor este setată la Rezumat programat în setările telefonului dvs. \n\nPentru a evita întârzierea primirii notificărilor de la %1$@ , vă recomandăm ca livrarea notificărilor să fie setată la Livrare imediată." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "В настройках телефона для доставки уведомлений установлено значение \"Сводка по расписанию\".\n\nЧтобы избежать задержки в получении уведомлений от %1$@, мы рекомендуем установить доставку уведомлений на Немедленную доставку." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirim gönderimi, telefonunuzun ayarlarında Zamanlanmış Özet olarak ayarlanmıştır.\n\n%1$@ adresinden bildirim almakta gecikmeyi önlemek için bildirim gönderimini Anında Gönderim olarak ayarlanmasını öneririz." + } + } + } + }, + "Notifications" : { + "comment" : "Notifications Status text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifikationer" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificaciones" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifiche" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varsler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sta meldingen toe" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificări" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimler" + } + } + } + }, + "Notifications Delayed" : { + "comment" : "Scheduled Delivery Enabled alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifikationer forsinkede" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungsverzögerung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retraso en las notificaciones" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications retardées" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראות מתעכבות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifiche ritardate" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varsler forsinket" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldingen Vertraagd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spóźnione Powiadomienia" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificări întârziate" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления временно отключены" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimler Gecikti" + } + } + } + }, + "Notifications give you important %1$@ app information without requiring you to open the app." : { + "comment" : "Alert Permissions descriptive text (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meddelelser giver dig vigtige oplysninger om %1$@-appen uden at du behøver at åbne appen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen geben Dir wichtige %1$@-App-Informationen, ohne dass Du die App öffnen musst." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Las notificaciones te proporcionan información importante sobre la aplicación %1$@ sin que tengas que abrirla." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les notifications vous donnent des informations importantes sur l'application %1$@ sans avoir à l'ouvrir." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראות מעבירות לך מידע חשוב על האפליקציה %1$@ מבלי לדרוש ממך לפתוח את האפליקציה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varslinger gir deg viktig %1$@ app informasjon uten at du behøver å åpne appen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldingen geven je belangrijke %1$@ appinformatie zonder dat je de app hoeft te openen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia zawierają ważne informacje o aplikacji %1$@ bez konieczności otwierania aplikacji." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificările vă oferă informații importante despre aplicație %1$@ fără a fi necesar să deschideți aplicația." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления предоставляют важную информацию о приложении %1$@, не требуя открытия приложения." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimler, uygulamayı açmanıza gerek kalmadan size önemli %1$@ uygulama bilgilerini verir." + } + } + } + }, + "Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." : { + "comment" : "Alert Permissions descriptive text (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meddelelser giver dig vigtige oplysninger om %1$@-appen, uden at du behøver at åbne appen.\n\nLad dem være aktiveret i telefonens indstillinger for at sikre, at du modtager %1$@-meddelelser, kritiske advarsler og tidsfølsomme meddelelser." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigungen geben Dir wichtige %1$@ App-Informationen, ohne dass Du die App öffnen musst.\n\nLass diese in den Einstellungen Deines Telefons aktiviert, um sicherzustellen, dass Du %1$@ Benachrichtigungen, kritische Warnungen und zeitkritische Benachrichtigungen erhältst." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Las notificaciones te proporcionan información importante sobre la aplicación %1$@ sin que tengas que abrirla.\n\nManten estas activadas en los ajustes del teléfono para recibir notificaciones %1$@, alertas críticas y notificaciones sensibles al tiempo cuando se entregan." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les notifications vous donnent des informations importantes sur l’application %1$@ sans que vous ayez à ouvrir l’application.\n\nGardez-les activées dans les paramètres de votre téléphone pour vous assurer de recevoir Notifications, Alertes critiques et Notifications urgentes de %1$@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראות מעניקות לך מידע חשוב על %1$@ מבלי לדרוש ממך לפתוח את האפליקציה.\n\nכדי להבטיח שתקבל התראות %1$@, התראות קריטיות והתראות רגישות לזמן, וודא שהן מופעלות." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app. \n\nTienile attive nelle impostazioni del tuo telefono per assicurarti di ricevere %1$@ notifiche, avvisi critici e notifiche sensibili al tempo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varsler gir deg viktig %1$@ appinformasjon uten at du trenger å åpne appen. \n\n Hold disse slått PÅ i telefonens innstillinger for å sikre at du mottar %1$@ -varsler, kritiske varsler og tidssensitive varsler." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meldingen geven je belangrijke %1$@ appinformatie zonder dat je de app hoeft te openen.\n\nHoud deze instellingen AAN in je telefooninstellingen om ervoor te zorgen dat %1$@ je Meldingen, Kritieke Meldingen en Tijdgevoelige Meldingen ontvangt." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia dostarczają ważnych informacji o aplikacji %1$@ bez konieczności otwierania aplikacji. \n\nWłącz je w ustawieniach telefonu, aby mieć pewność, że będziesz otrzymywać powiadomienia %1$@ , alerty krytyczne i powiadomienia zależne od czasu." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificările vă oferă informații importante despre aplicație %1$@ fără a fi necesar să deschideți aplicația. \n\n Păstrați-le activate în setările telefonului pentru a vă asigura că primiți notificări %1$@ , alerte critice și notificări sensibile la timp." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления предоставляют важную информацию о приложении %1$@, не требуя открытия приложения.\n\nВключите их в настройках телефона, чтобы получать уведомления %1$@, критические предупреждения и уведомления, чувствительные к времени." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bildirimler, uygulamayı açmanıza gerek kalmadan size önemli %1$@ uygulama bilgilerini verir. \n\n %1$@ Bildirimler, Kritik Uyarılar ve Zamana Duyarlı Bildirimler aldığınızdan emin olmak için telefonunuzun ayarlarında bunları AÇIK durumda tutun." + } + } + } + }, + "Off" : { + "comment" : "Notification Setting Status is Off", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnuto" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slukket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apagado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pois päältä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactivé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבוי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Av" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyłącz" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oprit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выключено" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnuté" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Av" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı" + } + } + } + }, + "Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." : { + "comment" : "Modal body for crash recovery alert", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åh nej! Loop gik ned under dosering, og insulinjusteringer er blevet sat på pause, indtil denne dialogboks er lukket. Doseringshistorikken er muligvis ikke nøjagtig. Gennemgå venligst insulintilførsindstillinger og overvåg dit blodsukker omhyggeligt." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oh nein! Loop ist während des Bolus abgestürzt und die Insulinanpassungen wurden angehalten, bis dieser Dialog geschlossen wird. Der Dosierung-Verlauf ist möglicherweise nicht korrekt. Bitte prüfe die Tabellen zur Insulinabgabe und überwache Deinen Blutzucker sorgfältig." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Oh, no! Loop falló durante la dosificación y los ajustes de insulina se pausaron hasta que se cierre este cuadro de diálogo. El historial de dosificación puede no ser exacto. Revise los gráficos de administración de insulina y controle cuidadosamente su nivel de glucosa en sangre." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oh non ! La boucle s'est arrêtée pendant le dosage, et les ajustements d'insuline ont été mis en pause jusqu'à ce que ce dialogue soit fermé. L'historique des dosages peut ne pas être exact. Veuillez revoir les tableaux d'administration d'insuline et surveiller attentivement votre glycémie." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אוי לא! Loop קרסה בזמן הזרקה והתאמות אינסולין נעצרו עד שתסגור חלון זה. ייתכן שהיסטוריות ההזרקות לא תהיה מדוייקת. עיין בגרף מתן האינסולין ועקוב אחר הגלוקוז שלך מקרוב." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oh No! Loop si è chiuso mentre stava eseguendo un bolo e il dosaggio d'insulina è stato messo in pausa, finchè la finestra sarà chiusa. L'elenco dell'infusione d'insulina potrebbe non essere accurato. Per favore rivedi con attenzione la tabella di infusione dell'insulina e sorveglia strettamente la tua glicemia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Å nei! Loop krasjet under dosering, og insulinjusteringer er satt på pause til denne dialogen er lukket. Doseringshistorikken er kanskje ikke nøyaktig. Vennligst sjekk diagrammer for insulin levering, og overvåk blodsukkeret nøye." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oh nee! Loop is vastgelopen tijdens het toedienen, en insulineaanpassingen zijn gepauzeerd totdat dit dialoogvenster wordt gesloten. De doseringsgeschiedenis is mogelijk niet nauwkeurig. Bekijk de Insulinetoedieningsgrafieken en controleer je bloedglucose nauwkeurig." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "O nie! Pętla uległa awarii podczas dozowania, a regulacja insuliny została wstrzymana do czasu zamknięcia tego okna dialogowego. Historia dawkowania może nie być dokładna. Przejrzyj wykresy podawania insuliny i uważnie monitoruj poziom glukozy we krwi." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oh nu! Loop s-a blocat în timpul administrării, iar ajustările insulinei au fost întrerupte până când acest dialog este închis. Istoricul administrării poate să nu fie exact. Vă rugăm să consultați tabelele de livrare a insulinei și să vă monitorizați cu atenție glicemia." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Внимание! Во время подачи произошел сбой петли, и управление помпой было приостановлено до закрытия этого диалога. История событий может быть неточной. Пожалуйста, просмотрите графики введения инсулина в помпе и внимательно следите за уровнем глюкозы в крови." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oh hayır! Dozlama sırasında Loop çöktü ve bu iletişim kutusu kapatılana kadar insülin ayarlamaları duraklatıldı. Dozlama geçmişi doğru olmayabilir. Lütfen İnsülin İletim tablolarını gözden geçirin ve kan şekerinizi dikkatle izleyin." + } + } + } + }, + "OK" : { + "comment" : "Alert acknowledgment OK button\nCritical Alert permissions disabled alert button\nDefault action for alert when alert acknowledgment fails\nNotifications permissions disabled alert button\nText for ok action on notification of upcoming TestFlight expiration\nText for ok action on notification of upcoming profile expiration\nThe title of the notification action to acknowledge a device alert", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "موافق" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אישור" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ok" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamam" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + } + } + }, + "On" : { + "comment" : "Notification Setting Status is On", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "On" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapnuto" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tændt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "An" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encendido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päällä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מופעל" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attivato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "På" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ligado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pornit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включено" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapnuté" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "På" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Açık" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "On" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开" + } + } + } + }, + "Override Presets" : { + "comment" : "The title text for the override presets", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تخطي الإعدادات المسبقة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override forudindstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellungen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override Presets" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobreescrituras preestablecidas" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilapäisasetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préréglages ajustement" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עקוף הגדרות מוגדרות מראש" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オーバーライドプリセット" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overstyr forhåndsinnstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override Programma's" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override Presets" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobreposições Predefinidas" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presetări de înlocuire" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Редактировать параметры" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override förinställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz Kılma Ön Ayarları" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cài đặt chồng liều" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "覆盖预设置" + } + } + } + }, + "Possible Missed Meal" : { + "comment" : "The notification title for a meal that was possibly not logged in Loop.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muligt glemt måltid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wahrscheinlich eine Mahlzeit vergessen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Repas manqué possible" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ייתכן שארוחה לא הוזנה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Possibile pasto saltato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mulig savnet måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mogelijk Gemiste Maaltijd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Możliwe pominięcie posiłku" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posibilă masă neanunțată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Возможный пропуск приема пищи" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muhtemel Kaçırılan Öğün" + } + } + } + }, + "Pre-Meal Targets" : { + "comment" : "The label of the pre-meal mode toggle button", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أهداف ما قبل الوجبة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Før-måltid Mål" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ziel vor dem Essen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Objetivos Pre-Comida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennen ateriaa -tavoite" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Objectif de Pré-Repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "יעדים לפני הארוחה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obiettivo pre-pasto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "食前ターゲット" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Målområde før måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal Doelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poziom przed posiłkiem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Meta Pré-Refeição" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ținte preprandiale" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Целевые значения до еды" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Målvärden före måltid" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yemek Öncesi Hedefler" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mục tiêu trước bữa ăn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "餐前目标" + } + } + } + }, + "Predicted glucose at %1$@ is %2$@." : { + "comment" : "Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءاة سكر الدم بعد %1$@ هي %2$@." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet glukose ved %1$@ er %2$@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorhergesagte Glukose um %1$@ ist %2$@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa proyectada a las %1$@ es %2$@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu glukoosi klo %1$@ on %2$@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie prévue à %1$@ est %2$@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז החזוי ב- %1$@ הוא %2$@ ." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia prevista a %1$@ è di %2$@." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@の予想グルコースは %2$@です。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker kl %1$@ er %2$@." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspelde glucose om %1$@ is %2$@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywany poziom cukru o %1$@ wyniesie %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prevista em %1$@ é %2$@." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prognozată pentru %1$@ este %2$@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогнозируемый уровень глюкозы на %1$@ составляет %2$@." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predpokladaná glykémia o %1$@ je %2$@ ." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat glukosvärde vid %1$@ är %2$@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini KŞ %1$@ %2$@." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dự đoán đường huyết vào lúc %1$@ là %2$@." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测%1$@时的葡萄糖是%2$@" + } + } + } + }, + "Predicted glucose is in range." : { + "comment" : "Notice when predicted glucose for bolus recommendation is in range", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den forventede glukose er inden for intervallet." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der vorhergesagte Blutzucker liegt im Zielbereich." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glucosa proyectada está en rango" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glycémie prévue est dans la plage." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז החזוי נמצא בטווח." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia prevista è nell'intervallo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker er innenfor målområdet." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspelde glucose is binnen bereik." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywane stężenie glukozy jest w zakresie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prognozată este în interval." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогнозируемый уровень глюкозы находится в диапазоне." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predpokladaná glykémia je v cieľovom rozsahu." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini KŞ aralık içinde." + } + } + } + }, + "Predicted glucose of %1$@ is below your glucose safety limit setting." : { + "comment" : "Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det forventede glukoseindhold på %1$@ er under din indstilling af glukose-sikkerhedsgrænsen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der vorhergesagte Blutzucker von %1$@ liegt unter der Sicherheitsgrenze." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa proyectada de %1$@ se encuentra por debajo de tu nivel de suspensión." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu glukoosi %1$@ on turvarajan alapuolella." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glycémie estimée à %1$@ est sous le seuil de suspension." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז החזוי %1$@ נמוך מגבול הבטיחות שהגדרת." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia prevista da %1$@ è al di sotto del tuo limite glicemico di sicurezza." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker på %1$@ er lavere enn innstillingen for blodsukkersikkerhet." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspelde glucose van %1$@ ligt onder je ingestelde glucoseveiligheidslimiet." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywana glukoza %1$@ jest poniżej ustawionego bezpiecznego limitu glukozy." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prognozată de %1$@ se situează sub limita de siguranță configurată." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогнозируемое значение глюкозы %1$@ ниже установленного вами предела безопасности глюкозы." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat blodsocker på %1$@ är under ditt tröskelvärde." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ tahmini KŞ, KŞ güvenlik limiti ayarınızın altında." + } + } + } + }, + "Predicted glucose of %1$@ is below your suspend threshold setting." : { + "comment" : "Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءة سكر الدم المتوقعة %1$@ أقل من قيمة تعليق الضخ في الإعدادات." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet glukose på %1$@ er under din indstilling for suspenderingstærskel." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der vorhergesagte Blutzucker von %1$@ liegt unter dem Grenzwert für die Hypo-Abschaltung." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicted glucose of %1$@ is below your suspend threshold setting." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa proyectada de %1$@ se encuentra por debajo de su nivel de suspensión." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu glukoosi %1$@ on pysäytysrajan alapuolella." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prédiction de la glycémie à %1$@ sous le seuil de suspension défini." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז החזוי %1$@ נמוך מסך ההשהייה שהגדרת." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia prevista %1$@ è inferiore al valore soglia per la sospensione dell'erogazione." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想グルコースは %1$@ で一時停止値を下回ります。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker %1$@ er lavere enn innstilling for insulinstopp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwachte glucose van %1$@ is lager dan je ingestelde insulineonderbrekingsdrempel." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywany poziom cukru %1$@ jest poniżej progu zawieszenia." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prevista de %1$@ está abaixo do limite de suspensão." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prognozată de %1$@ se situează sub limita de suspendare configurată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предсказываемая гликемия %1$@ ниже ваших настроек порога приостановки помпы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat glukosvärde %1$@ är under ditt tröskelvärde." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini KŞ %1$@ askıya alma eşiği ayarınızın altında." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dự đoán đường huyết %1$@ là dưới ngưỡng tạm ngưng trong cài đặt của bạn." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测葡萄糖%1$@低于您的暂停阈值设置" + } + } + } + }, + "Predicted: %1$@\nActual: %2$@ (%3$@)" : { + "comment" : "Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التوقع: %1$@\nالواقع: %2$@ (%3$@)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet: %1$@\nFaktisk: %2$@ (%3$@)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorhergesagt: %1$@\nAktuell: %2$@ (%3$@)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicción: %1$@\nActual: %2$@ (%3$@)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu: %1$@\nTodellinen: %2$@ (%3$@)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prédit : %1$@\nRéel : %2$@ (%3$@)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חזוי: %1$@\nבפועל: %2$@ (%3$@)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previsto: %1$@\nEffettivo: %2$@ (%3$@)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicted: %1$@\nActual: %2$@ (%3$@)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet: %1$@\nFaktisk: %2$@ ( %3$@ )" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspeld: %1$@\nActueel: %2$@ (%3$@)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywana: %1$@Rzeczywista: %2$@ (%3$@)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prevista: %1$@\nAtual: %2$@ (%3$@)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prognozată: %1$@\nActuală: %2$@ (%3$@)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогноз: %1$@\nФакт: %2$@ (%3$@)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat: %1$@\nFaktiskt: %2$@ (%3$@)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini: %1$@\nGüncel: %2$@ (%3$@)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Được dự đoán: %1$@\nThực tế: %2$@ (%3$@)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测值: %1$@\n实际值: %2$@ (%3$@)" + } + } + } + }, + "prediction-description-integral-retrospective-correction" : { + "comment" : "Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "prediction-description-integral-retrospective-correction" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integral effect: %1$@\nTotal glucose effect: %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "previsione-descrizione-integrale-correzione-retrospettiva" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "prediksjon-beskrivelse-integral-retrospektiv-korreksjon" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "predykcja-opis-całka-retrospektywna-korekta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "описание прогнозирования с помощью интегральной ретроспективной коррекции" + } + } + } + }, + "prediction-description-retrospective-correction" : { + "comment" : "Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference)", + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicted: %1$@\nActual: %2$@ (%3$@)" + } + } + } + }, + "Preparing Critical Event Logs" : { + "comment" : "Preparing critical event log text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forbereder kritiske begivenhedslogs" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorbereiten der kritischen Ereignis-Protokolle" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preparando registros de eventos críticos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valmistellaan tärkeiden tapahtumien lokia" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préparation des journaux d’événements critiques" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מכין יומן שגיאות קריטיות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preparazione dei registri degli eventi critici in corso" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forbereder logg av kritiske hendelser" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritieke Gebeurtenislogboek Voorbereiden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przygotowywanie dzienników zdarzeń krytycznych" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pregătire jurnal de evenimente critice" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Подготовка логов критических событий" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förbereder kritiska händelseloggar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik Olay Günlüklerinin Hazırlanması" + } + } + } + }, + "Profile Expiration" : { + "comment" : "Settings App Profile expiration view", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypršení platnosti profilu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profiludløb" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ablauf des Profils" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Caducidad del perfil" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expiration du profil" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תפוגת פרופיל" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scadenza profilo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilens utløp" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profiel Vervaldatum" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wygaśnięcie profilu:" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expirarea profilului" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Истечение срока действия профиля" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil Sona Erme" + } + } + } + }, + "Profile expires " : { + "comment" : "Time that profile expires", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Platnost profilu vyprší" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil udløber " + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil läuft ab " + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El perfil caduca" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le profil expire le " + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פרופיל יפוג" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il profilo scade " + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil utløper" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profiel verloopt " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil wygasa " + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilul expiră " + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Срок действия профиля истекает" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilin süresi doluyor" + } + } + } + }, + "Profile Expires Soon" : { + "comment" : "The title for notification of upcoming profile expiration", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilen udløber snart" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil läuft in Kürze ab" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El perfil caduca pronto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le profil expire bientôt" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "פרופיל פג בקרוב" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il profilo scade a breve" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil utløper snart" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profiel Verloopt Binnenkort" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil wkrótce wygaśnie" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profilul expiră în curând" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Скоро истечет срок действия профиля" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Profil Yakında Sona Eriyor" + } + } + } + }, + "Pump" : { + "comment" : "The title of the pump section in settings", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "المضخة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Microinfusadora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumppu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bomba" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помпа" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bơm" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素泵" + } + } + } + }, + "Pump Battery Low" : { + "comment" : "The notification title for a low pump battery", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بطارية المضخة منخفضة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpebatteri lav" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpenbatterie schwach" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Battery Low" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batería de la bomba baja" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpun paristo vähissä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batterie de la pompe faible" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סוללת משאבה חלשה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batteria della pompa scarica" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプの電池が不足" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpebatteri lavt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompbatterij Bijna Leeg" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niski poziom baterii w pompie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batteria da Bomba Fraca" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nivel scăzut baterie pompă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Батарея помпы разряжена" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Låg batterinivå i pump" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Pili Düşük" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pin của bơm thấp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素泵电量低" + } + } + } + }, + "Pump data is %1$@ old" : { + "comment" : "The error message when pump data is too old to be used. (1: pump data age in minutes)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بيانات المضخة منذ %1$@ " + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpedata er %1$@ gammel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpendaten sind %1$@ alt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los datos de la microinfusora son %1$@ viejos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpputieto on %1$@ vanha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données de la pompe remontent à %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מידע משאבה: לפני %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati forniti dalla pompa sono di %1$@ fa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプデータが %1$@前のものです" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpedata er %1$@ gammel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompgegevens zijn %1$@ oud" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane z pompy są nieaktualne od %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dados da bomba são de %1$@ atrás" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datele din pompă sunt vechi de %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные помпы от %1$@ " + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpvärdena är %1$@ gamla" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa verisi %1$@ eski" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu bơm %1$@ là cũ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素泵数据%1$@分钟未更新" + } + } + } + }, + "Pump Event" : { + "comment" : "The title of the screen displaying a pump event", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe-hændelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen-Ereignis" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Evento de microinfusadora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpputapahtuma" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Événement pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אירוע משאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Evento pompa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプイベント" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpehendelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompgebeurtenis" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zdarzenie pompy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eventos da Bomba" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eveniment de pompă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Событие помпы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumphändelse" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Etkinliği" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Event" + } + } + } + }, + "Pump Expired" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen er udløbet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompe Expirée" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa scaduta" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen er utløpt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa wygasła" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Срок работы помпы закончился" + } + } + } + }, + "Pump Manager" : { + "comment" : "Details for configuration error when pump manager is missing", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إدارة المضخة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpemanager" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpenmanager" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Administratión de Microinfusora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpun hallinta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestionnaire de pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מנהל משאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Manager" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプ設定" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe manager" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomp Manager" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zarządzanie Pompą" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gerenciamento da Bomba" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manager pompă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Менеджер помпо" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumphantering" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Yöneticisi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trình quản lý bơm" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "泵管理" + } + } + } + }, + "Pump Manager Error: %1$@" : { + "comment" : "The error message displayed for pump manager errors. (1: pump manager error)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fejl i pumpemanager: %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen-Fehler: %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error del administrador de bomba: %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur du gestionnaire de pompe : %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שגיאה במנהל שאבה: %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore Pump Manager: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Manager-feil: %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompmanager Fout: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Błąd menedżera pompy: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare de gestionare a pompei: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка менеджера помп: %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Yöneticisi Hatası: %1$@" + } + } + } + }, + "Pump Reservoir Empty" : { + "comment" : "The notification title for an empty pump reservoir", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خزان المضخة منتهي" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpereservoir tomt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpenreservoir leer" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Reservoir Empty" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reserva de bomba vacía" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpun säiliö tyhjä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réservoir de la pompe vide" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאגר משאבה ריק" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serbatoio della pompa vuoto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプのリザーバが空です" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpereservoaret tomt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompreservoir Leeg" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zbiorniczek w pompie jest pusty" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservatório da Bomba Vazio" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervorul pompei este gol" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Резервуар помпы пуст" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpreservoaren är tom" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Rezervuarı Boş" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ngăn chứa hết insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "储药器药量已用完" + } + } + } + }, + "Pump Reservoir Low" : { + "comment" : "The notification title for a low pump reservoir", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خزان المضخة منخفض" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpereservoir lavt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpenreservoir niedrig" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Reservoir Low" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reserva de bomba baja" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpun säiliö vähissä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réservoir de la pompe bas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאגר משאבה נמוך" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serbatoio della pompa scarico" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプのリザーバが低です" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe reservoar lav" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompreservoir Bijna Leeg" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niski poziom w zbiorniczku pompy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservatório da Bomba Vazio" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervor de pompare scăzut" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Мало инсулина в резервуаре" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpreservoaren har låg nivå" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Rezervuarı Düşük" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ngăn chứa insulin thấp" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "药量低" + } + } + } + }, + "Pump Suspended" : { + "comment" : "The title of the cell indicating the pump is suspended", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تم إيقاف الضخ مؤقتا" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe Pauset" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe unterbrochen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Suspended" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Microinfusora Suspendida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumppu pysäytetty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompe suspendue" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משאבה מושהית" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa sospesa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ポンプ一時停止中" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe suspendert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomp Onderbroken" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump Suspended" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bomba Suspensa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompă suspendată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помпа приостановлена" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen är pausad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Askıya Alındı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bơm đã tạm ngưng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "泵已暂停输注" + } + } + } + }, + "Pump Suspended. Automatic dosing is disabled." : { + "comment" : "The error message displayed for pumpSuspended errors.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen er suspenderet. Automatisk dosering er deaktiveret." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe unterbrochen. Die automatische Dosierung ist deaktiviert." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Microinfusora suspendida. La dosificación automática está desactivada." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumppu pysäytetty. Automaattinen annostelu ei ole käytössä." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompe suspendue. Le dosage automatique est désactivé." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משאבה מושהית. מינון אוטומטי מושבת." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa sospesa. Il dosaggio automatico è disattivato." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe suspendert. Automatisk dosing er deaktivert." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomp Onderbroken. Automatisch doseren is uitgeschakeld." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa zawieszona. Automatyczne dozowanie jest wyłączone." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompă suspendată. Administrarea automată este dezactivată." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помпа приостановлена. Авто болюсы и ВБС отключены." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pump pausad. Automatisk dosering är inaktiverad." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa Askıya Alındı. Otomatik dozlama devre dışı bırakıldı." + } + } + } + }, + "QUANTITY_VALUE_AND_UNIT" : { + "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "Rapid-Acting – Adults" : { + "comment" : "Title of insulin model preset", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التأثيرالسريع - كبار" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hurtigt-virkende (Rapid) – Voksne" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schnell wirkend – Erwachsene" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rapid-Acting – Adults" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acción Rápida — Adultos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nopeavaikutteinen – aikuiset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Action rapide - Adulte" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אינסולין מהיר - מבוגרים" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina ultrarapida – Adulti" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "超速攻型 - 大人" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hurtigvirkende – voksne" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snelwerkend - Volwassenen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Szybko działające – dorośli" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ação-Rápida – Adultos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acțiune rapidă – Adulți" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Быстродействующий - взрослые" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snabbverkande – vuxna" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hızlı Etkili – Yetişkinler" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thuốc tác động nhanh cho người lớn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "速效胰岛素 - 成人模型" + } + } + } + }, + "Rapid-Acting – Children" : { + "comment" : "Title of insulin model preset", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التأثيرالسريع - أطفال" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hurtigt-virkende (Rapid) – Børn" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schnell wirkend – Kinder" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rapid-Acting – Children" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acción Rápida — Niños" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nopeavaikutteinen – lapset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Action rapide - Enfant" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אינסולין מהיר - ילדים" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina ultrarapida – Bambini" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "超速攻型 - 子供" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hurtigvirkende – barn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snelwerkend - Kinderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Szybko działająca – dzieci" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ação-Rapida – Crianças" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acțiune rapidă - Copii" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Быстродействующий - дети" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snabbverkande – barn" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hızlı Etkili – Çocuklar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thuốc tác động nhanh cho trẻ em" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "速效胰岛素 - 儿童模型" + } + } + } + }, + "Recommendation expired: %1$@ old" : { + "comment" : "The error message when a recommendation has expired. (1: age of recommendation in minutes)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انتهت صلاحية التوصية منذ: %1$@ " + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forslag udløbet: %1$@ gamle" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfehlung abgelaufen: %1$@ alt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendación expiró hace: %1$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suositus vanhentunut: %1$@ vanha" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandation expirée, remonte à %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "המלצה פגה: לפני %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La raccomandazione è scaduta: %1$@ fa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨が %1$@ 経過したため失効" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefaling utløpt: %1$@ gammelt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbeveling verlopen: %1$@ oud" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekomendacja nieaktualna od %1$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendação expirou: %1$@ atrás" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomandare expirată: acum %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомнендация истекла : от %1$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommendationen gick ut för %1$@ sedan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerinin süresi doldu: %1$@ eski" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khuyến cáo hết hạn: %1$@ phút" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@分钟前推荐剂量已过期" + } + } + } + }, + "Recommended Basal" : { + "comment" : "The title of the cell displaying a recommended temp basal value", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الضخ المستمر المقترح" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalet basal" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlene Basalrate" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended Basal" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recomendada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suositeltu basaali" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandation basal" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בזאלי מומלץ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basale raccomandata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨基礎分泌量" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt Basal" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Basaal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zalecana baza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recomendada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bazala recomandată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый базал" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odporúčaný bazal" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommenderad basaldos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen Bazal" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khuyến nghị liều Basal" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐基础率" + } + } + } + }, + "Recommended Bolus" : { + "comment" : "Label for recommended bolus row on bolus screen\nLabel for recommended bolus row on simple bolus screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalet bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlener Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo recomendado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suositeltu bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recommandé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מומלץ" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo raccomandato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zalecany bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus recomandat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommenderad bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen Bolus" + } + } + } + }, + "Recommended Bolus Exceeds Maximum Bolus" : { + "comment" : "Title for bolus screen warning when recommended bolus exceeds max bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalet bolus overstiger maksimal bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der empfohlene Bolus überschreitet den maximalen Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El bolo recomendado supera al bolo máximo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le bolus recommandé dépasse le bolus maximal" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מומלץ גבוה מבולוס מקסימלי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il bolo raccomandato supera la quantità del bolo massimo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt bolus overskrider maksimal bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Bolus Overschrijdt Maximale Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zalecany bolus przekracza maksymalny bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusul recomandat depășește bolusul maxim" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый болюс превышает максимальный болюс" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen Bolus Maksimum Bolusu Aşıyor" + } + } + } + }, + "Recommended Bolus: %@ Units" : { + "comment" : "Accessibility hint describing recommended bolus units", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الجرعة الموصى بها: %@ وحدات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Foreslået bolus: %@ Enheder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlener Bolus: %@ IE" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended Bolus: %@ Units" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo Recomendado: %@ Unidades" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suositeltu bolus: %@ yksikköä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus recommandé : %@ unités" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מומלץ: %@ יחידות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo raccomandato: %@ Unità" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨ボーラス: %@ 単位" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt bolus: %@ enheter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Bolus: %@ Eenheden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekomendowany bolus: %@ jednostek" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Recomendado: %@ Unidades" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus recomandat: %@ unități" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый болюс: %@ ед" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommenderad bolus: %@ enheter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen Bolus: %@ Ünite" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liều Bolus khuyến nghị: %@ Units" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐大剂量:%@单位" + } + } + } + }, + "Remote Bolus Entry: %@ U" : { + "comment" : "The notification title for a remote bolus. (1: Bolus amount)\nThe notification title for a remote failure. (1: Bolus amount)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjernindtastning af bolus: %@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entfernte Boluseingabe: %@ IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrada remota de bolo: %@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrée du bolus à distance : %@ U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזרקת בולוס מרחוק: %@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserimento bolo remoto: %@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekstern bolusregistrering: %@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remote Bolusinvoer: %@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zdalne podanie bolusa: %@ J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introducere de la distanță a bolusului: %@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удаленный ввод болюса: %@ U" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uzak Bolus Girişi: %@ U" + } + } + } + }, + "Remote Carbs Entry: %d grams" : { + "comment" : "The carb amount message for a remote carbs entry notification. (1: Carb amount in grams)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fjernindtastning af kulhydrater: %d gram" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ferneingabe von Kohlenhydraten: %d g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrada remota de carbohidratos: %d gr" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entrée de glucides à distance : %d grammes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזנת פחמימות מרחוק: %d גרם" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inserimento remoto di carboidrati: %d grammi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ekstern karbohydratregistrering: %d gram" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Remote Koolhydraatinvoer: %d gram" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zdalne wprowadzanie węglowodanów: %d gramów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Introducere de la distanță a carbohidraților: %d grame" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Удаленный ввод углеводов: %d грамм" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uzak Karbonhidrat Girişi: %d gram" + } + } + } + }, + "Reservoir" : { + "comment" : "Segmented button title for insulin delivery log reservoir history", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الخزان" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservorio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säiliö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réservoir" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאגר" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serbatoio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoar" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zbiorniczek" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Резервуар" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervoár" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervuar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素容量" + } + } + } + }, + "Reservoir Empty" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir tomt" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réservoir vide" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serbatoio vuoto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoaret er tomt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pusty zbiorniczek" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Резервуар пуст" + } + } + } + }, + "Retrospective Correction" : { + "comment" : "Title of the prediction input effect for retrospective correction", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التصحيح بأثر رجعي" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilbagevirkende korrektion" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nachträgliche Korrektur" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corrección Retrospectiva" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retrospektiivinen korjaus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correction rétrospective" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תיקון לאחור" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correzione retrospettiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "レトロ補正" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retrospektiv korreksjon" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retroperspectieve Correctie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Korekcja retrospektywna" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correção Retrospectiva" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corecție retrospectivă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ретроспективная коррекция" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Retrospektiv korrigering" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçmişe Dönük Düzeltme" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liều Bổ sung còn hiệu lực" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "回顾性修正" + } + } + } + }, + "Retry" : { + "comment" : "The button text for attempting a manual loop\nThe title of the notification action to retry a bolus command", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أعد المحاولة" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zkusit znovu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forsøg igen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wiederholen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reintentar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yritä uudelleen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réessayer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נסה שוב" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Riprova" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "やり直す" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prøv på nytt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opnieuw Proberen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spróbuj ponownie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tentar de Novo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reîncearcă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Повторить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Skúsiť znova" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Försök igen" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yeniden dene" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thử lại" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重试" + } + } + } + }, + "Save" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gem" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sauvegarder" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz" + } + } + } + }, + "Save as favorite food" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gem som favoritmad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregistrer comme aliment préféré" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva come cibo preferito" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre som favorittmat" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opslaan als favoriet voedsel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz jako ulubione jedzenie" + } + } + } + }, + "Save Carbs & Deliver" : { + "comment" : "Button text to save carbs and/or manual glucose entry and deliver a bolus", + "localizations" : { + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva carboidrati ed eroga" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre og gi bolus" + } + } + } + }, + "Save without Bolusing" : { + "comment" : "Button text to save carbs and/or manual glucose entry without a bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gem uden at give bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern ohne Bolusgabe" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar sin Entregar Bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tallenna ilman bolusta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enregister sans Bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שמור ללא הזרקת בולוס" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva senza erogare bolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre uten å sette bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opslaan zonder Bolussen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz bez podania Bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvează fără bolusare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сохранить без болюса" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spara utan att ge bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus olmadan Kaydet" + } + } + } + }, + "Scheduled" : { + "comment" : "Scheduled Delivery status text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Planlagt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geplant" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programmé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מתוזמן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programmato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Planlagt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gepland" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaplanowane" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Запланировано" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Planlanan" + } + } + } + }, + "Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvis du vælger en favoritmad i kulhydratindtastningsskærmen, udfyldes felterne for kulhydratmængde, madtype og absorptionstid automatisk! Tryk på tilføj-knappen nedenfor for at oprette din første favoritmad!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selezionando un alimento preferito nella schermata di inserimento dei carboidrati, i campi relativi a quantità di carboidrati, tipo di alimento e tempo di assorbimento vengono compilati automaticamente! Tocca \"Aggiungi\" qui sotto per creare il tuo primo alimento preferito!" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når du velger en favorittmat i skjermbildet for innlegging av karbohydrater, fylles feltene for karbohydratmengde, matvaretype og opptakstid automatisk ut! Trykk på knappen Legg til nedenfor for å opprette din første favorittmat!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het selecteren van een favoriet voedsel in het koolhydraat invoerscherm vult automatisch de velden voor de hoeveelheid koolhydraten, het type voedsel en de absorptietijd in! Tik op de toevoegknop hieronder om je eerste favoriete voedsel te maken!" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wybór ulubionego jedzenia na ekranie wprowadzania węglowodanów powoduje automatyczne wypełnienie pól ilości węglowodanów, rodzaju jedzenia i czasu wchłaniania! Dotknij przycisku dodawania poniżej, aby stworzyć swoje pierwsze ulubione jedzenie!" + } + } + } + }, + "Sensor Failed" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensorfejl" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capteur\nDéfaillant" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensore guasto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensor mislyktes" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Awaria sensora" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка сенсора" + } + } + } + }, + "Services" : { + "comment" : "The title of the services section in settings", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الخدمات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Services" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dienste" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicios" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Palvelut" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Services" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שירותים" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servizi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "サービス" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjenester" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Services" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usługi" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serviços" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servicii" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Службы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tjänster" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servisler" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dịch vụ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "服务" + } + } + } + }, + "Settings" : { + "comment" : "Label of button that navigation user to iOS Settings\nSettings screen title\nThe label of the settings button", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الإعدادات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einstellungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustes" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paramètres" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגדרות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impostazioni" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Instellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienia" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurações" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setări" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nastavenia" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayarlar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cài đặt" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "设置" + } + } + } + }, + "Setup Incomplete" : { + "comment" : "The title of the cell indicating that onboarding is suspended", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opsætning ufuldstændig" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einrichtung unvollständig" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuración incompleta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configuration incomplète" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגדרה לא הושלמה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurazione incompleta" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ufullstendig oppsett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Installatie Onvolledig" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfiguracja niekompletna" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Configurare nefinalizată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройка не завершена" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kurulum Tamamlanmadı" + } + } + } + }, + "Shows last loop error" : { + "comment" : "Loop Completion HUD accessibility hint", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يظهر خطأ الحلقه الاخير" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viser sidste Loop-fejl" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeigt den letzten Loop-Fehler an" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Muestra último error de Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Näyttää Loopin viimeisimmän virheen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Affiche la dernière erreur de Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Shows last loop error" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostra l'ultimo errore di Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "前回のループエラー" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viser siste Loop-feil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toont laatste loop foutmelding" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokazuje ostatni błąd Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostrar último erro do ciclo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afișează ultima eroare de loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Показывает крайнюю ошибку петли" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Visar senaste loopfelet" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son döngü hatasını gösterir" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiển thị lỗi của loop trước đó" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "显示Loop上一次的错误" + } + } + } + }, + "Simple Bolus Calculator" : { + "comment" : "Title of simple bolus view when not displaying meal entry", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Simpel bolusberegner" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einfacher Bolusrechner" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calculadora simple de bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yksinkertainen boluslaskuri" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calculateur Simplifié de Bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחשבון בולוס פשוט" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calcolatore bolo semplice" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enkel bolus-kalkulator" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eenvoudige Boluscalculator" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prosty kalkulator bolusa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calculator simplu de bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Простой калькулятор болюса" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förenklad bolusdoskalkylator" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basit Bolus Hesaplayıcı" + } + } + } + }, + "Simple Meal Calculator" : { + "comment" : "Title of simple bolus view when displaying meal entry", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Simpel måltidsberegner" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Einfacher Mahlzeitenrechner" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calculadora simple de comida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yksinkertainen aterialaskuri" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calculateur Simplifié de Repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מחשבון ארוחה פשוט" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calcolatore pasto semplice" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enkelt måltid kalkulator" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eenvoudige Maaltijdcalculator" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prosty kalkulator posiłków" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Calculator simplu al mesei" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Простой калькулятор еды" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förenklad bolusdoskalkylator" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basit Yemek Hesaplayıcı" + } + } + } + }, + "since %@" : { + "comment" : "Format fragment for a start time", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "منذ %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "siden %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "seit %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "desde %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ jälkeen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "depuis %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאז %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "da %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ から" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "siden %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "sinds %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "od %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "desde %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "de la %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "от %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "sedan %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ den beri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "từ khi %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自从%@分钟前" + } + } + } + }, + "Site URL" : { + "comment" : "The title of the nightscout site URL credential", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "رابط الموقع" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL adresa webu" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Side-URL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Webseiten URL" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Site URL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL de Sitio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL du site" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כתובת האתר" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sito URL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nettstedets URL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Site URL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Strona URL" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Site URL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL site" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL сайта" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL adresa webu" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout-URL" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nightscout URL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Site URL" + } + } + } + }, + "Software Update" : { + "comment" : "Software update button link text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Software-opdatering" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Software-Aktualisierung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualización de software" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mise à jour logicielle" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עדכון תוכנה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiornamento software" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Programvare oppdatering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Software Update" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualizacja oprogramowania" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizare de software" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Обновление программного обеспечения" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yazılım güncellemesi" + } + } + } + }, + "Start time is out of range: %@" : { + "comment" : "Carb error description: invalid start time is out of range.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starttidspunktet er uden for området: %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Startzeit liegt außerhalb des Bereichs: %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le temps de début est hors de la zone définie : %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "זמן התחלה מחוץ לטווח: %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'orario di inizio non rientra nell'intervallo: %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starttiden er utenfor området: %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starttijd is buiten bereik: %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czas rozpoczęcia jest poza zakresem: %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ora de începere este în afara intervalului: %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Время начала вне допустимого диапазона: %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Başlangıç zamanı aralığın dışında: %@" + } + } + } + }, + "starting at %@" : { + "comment" : "The format for the description of a custom preset start date", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يبدأ من %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "starter ved %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beginnt um %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "comenzando a las %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "alkaa %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "commence à %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מתחיל ב-%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "a partire da %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@から開始" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "starter på %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "start om %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "starting at %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "iniciando às %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "începând de la %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "начало с %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Börjar kl. %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ tarihinde başladı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "bắt đầu lúc %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开始于 %@" + } + } + } + }, + "Starting Bolus" : { + "comment" : "The title of the cell indicating a bolus is being sent", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بدء الجرعة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starter bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starte Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Comenzando Bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aloitetaan bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Début du bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מתחיל בולוס" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avvio bolo in corso" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス注入を開始" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Starter Bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Starten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozpoczynam podawanie bolusa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Iniciando Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Начинаю болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Påbörjar bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus başlatılıyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bắt đầu liều Bolus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开始输注大剂量" + } + } + } + }, + "Support" : { + "comment" : "Section title for Support\nThe title of the support section in settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Support" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unterstützung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ayuda" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tuki" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Support" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תמיכה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supporto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brukerstøtte" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ondersteuning" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wsparcie" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asistenţă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Поддержка" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Support" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Destek" + } + } + } + }, + "Suspend Threshold" : { + "comment" : "The title text in settings", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قيمة التعليق" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pause grænseværdi" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grenzwert für Hypo-Abschaltung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suspend Threshold" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nivel de Suspensión" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pysäytysraja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Seuil de suspension" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סף השהייה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soglia di sospensione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "一時停止値" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terskel for utsettelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onderbrekingsdrempel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Próg zawieszenia pompy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limite de Suspenção" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Limită suspendare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Порог приостановки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tröskelvärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eşiği Askıya Al" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ngưỡng Tạm dừng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "暂停阈值" + } + } + } + }, + "Suspension of Insulin Delivery" : { + "comment" : "Title of the prediction input effect for suspension of insulin delivery", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afbryd insulintilførsel" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sospensione dell'erogazione d'insulina" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suspensjon av insulintilførsel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wstrzymanie podawania insuliny" + } + } + } + }, + "Tap here to set up a CGM" : { + "comment" : "Descriptive text for button to add CGM device", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk her for at konfigurere en CGM" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe hier, um ein CGM einzurichten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulsa aquí para configurar un CGM" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Määritä CGM napauttamalla tästä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez ici pour configurer un CGM" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ כאן להגדיר חיישן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per impostare un CGM" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk her for å sette opp en CGM" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik hier om een CGM in te stellen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij tutaj, aby skonfigurować CGM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apăsați aici pentru a configura un CGM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите здесь, чтобы настроить CGM" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck här för att ställa in en CGM" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir CGM ayarlamak için buraya dokunun" + } + } + } + }, + "Tap here to set up a pump" : { + "comment" : "Descriptive text for button to add pump device", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk her for at tilføje en pumpe" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe hier, um eine Pumpe einzurichten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulsa aquí para configurar una microinfusadora" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Määritä pumppu napauttamalla tästä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez ici pour paramétrer une pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ כאן להגדיר משאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per impostare una pompa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk her for å sette opp en pumpe" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik hier om een pomp in te stellen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij tutaj, aby skonfigurować pompę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apăsați aici pentru a configura o pompă de insulină" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите здесь, чтобы настроить помпу" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck här för att ställa in en pump" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir pompa ayarlamak için buraya dokunun" + } + } + } + }, + "Tap here to set up a Service" : { + "comment" : "The descriptive text of the add service button in settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk her for at konfigurere en tjeneste" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe hier, um einen Dienst einzurichten" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulsa aquí para configurar un Servicio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Määritä palvelu napauttamalla tästä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez ici pour configurer un service" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ כאן להגדיר שירות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per configurare un servizio" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk her for å sette opp en tjeneste" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik hier om een Service in te stellen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij tutaj, aby skonfigurować usługę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apăsați aici pentru a configura un Serviciu" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите здесь, чтобы настроить службу" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck här för att ställa in en tjänst" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir Servis ayarlamak için buraya dokunun" + } + } + } + }, + "Tap to Add" : { + "comment" : "The subtitle of the cell displaying an action to add a manually measurement glucose value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk for at tilføje" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulsa para añadir" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää napauttamalla" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajout" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ להוסיף" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per aggiungere" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk for å legge til" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik voor Toevoegen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dodaj glikemię" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atinge pentru a adăuga" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите, чтобы добавить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck för att ange" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eklemek için dokunun" + } + } + } + }, + "Tap to Resume" : { + "comment" : "The subtitle of the cell displaying an action to resume insulin delivery\nThe subtitle of the cell displaying an action to resume onboarding", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انقر للاستئناف" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk for at Fortsætte" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsetzen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque para reanudar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jatka annostelua" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez pour reprendre" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ להמשך" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per riprendere" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "タップして再開する" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk for å fortsette" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik voor Hervatten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij, aby wznowić" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toque para retomar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apăsați pentru a relua" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите чтобы возобновить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck för att återuppta" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sürdürmek için dokunun" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chạm để tiếp tục" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击恢复输注" + } + } + } + }, + "Tap to Stop" : { + "comment" : "Message presented in the status row instructing the user to tap this row to stop a bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk for at stoppe" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stoppen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulsa para detener" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pysäytä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ לעצור" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per interrompere" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk for å stoppe" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik voor Stoppen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus STOP!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atingeți pentru a opri" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите, чтобы остановить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryck för att stoppa" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durdurmak için dokunun" + } + } + } + }, + "Tap to Unmute Alerts" : { + "comment" : "Label for button to unmute all alerts", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk for at slå alarmer til" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca per riattivare gli avvisi" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk for å dempe varsler" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij, aby wyłączyć wyciszenie alertów" + } + } + } + }, + "Tap Unmute to resume sound for your alerts and alarms." : { + "comment" : "The alert body for unmute alert confirmation", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk på Slå lyden til for at genoptage lyden for dine alarmer og alarmer." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe auf Stummschaltung aufheben, um den Ton für Deine Warnungen und Alarme wieder aufzunehmen." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca \"Riattiva\" audio per riattivare l'audio degli avvisi e delle sveglie." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk på Slå av lyd for å gjenoppta lyden for varsler og alarmer." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij opcję Wyłącz wyciszenie, aby wznowić dźwięk alertów i alarmów." + } + } + } + }, + "TestFlight" : { + "comment" : "Settings app TestFlight section", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + } + } + }, + "TestFlight Expiration" : { + "comment" : "Settings TestFlight expiration view", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight Udløber" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expiration de TestFlight" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Scadenza di TestFlight" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight-utløp" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wygaśnięcie TestFlight" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Срок действия TestFlight" + } + } + } + }, + "TestFlight expires " : { + "comment" : "Time that build expires", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight udløber " + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight expire le " + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight scade " + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight utløper " + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight wygasa" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Срок действия TestFlight истекает " + } + } + } + }, + "TestFlight Expires Soon" : { + "comment" : "The title for notification of upcoming TestFlight expiration", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight udløber snart" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight expire bientôt" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight scade a breve" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight utløper snart" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight wkrótce wygaśnie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Срок действия TestFlight скоро истечет" + } + } + } + }, + "The bolus amount entered is smaller than the minimum deliverable." : { + "comment" : "Alert message for a bolus too small validation error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den indtastede bolusmængde er mindre end den mindste leverbare mængde." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die eingegebene Bolusmenge ist kleiner als die Mindestabgabemenge." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La cantidad de bolo ingresada es menor que el mínimo que se puede administrar." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantité de bolus saisie est inférieure au minimum délivrable." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות הבולוס שהכנסת נמוכה מהכמות המינימלית." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantità di bolo immessa è inferiore alla quantità minima erogabile." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den angitte bolusmengden er mindre enn minimumsleveransen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De ingevoerde bolushoeveelheid is kleiner dan die minimaal toegediend kan worden." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadzona wielkość bolusa jest mniejsza niż minimalna możliwa do podania." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitatea de bolus introdusă este mai mică decât valoarea minimă administrabilă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Введенное количество болюса меньше минимально допустимого в помпе" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Girilen bolus miktarı, minimum teslim edilebilir miktardan daha küçük." + } + } + } + }, + "The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." : { + "comment" : "Forecast explanation modal on bolus view", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusdoseringsalgoritmen bruger et mere konservativt skøn over det forventede blodsukker end det, der bruges til at justere din basalhastighed.\n\nSom følge heraf kan dit forventede blodglukose efter en bolus stadig være højere end dit målområde." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der Bolusdosierungsalgorithmus verwendet eine konservativere Schätzung des prognostizierten Blutzuckers als die zur Anpassung Deiner Basalrate.\n\nDaher kann Dein prognostizierter Blutzucker nach einem Bolus immer noch über Deinem Zielbereich liegen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El algoritmo de dosificación de bolo utiliza una estimación más conservadora de la glucosa en sangre pronosticada que la que se usa para ajustar su basal. \n\n Como resultado, su glucosa en sangre pronosticada después de un bolo aún puede ser más alta que su rango objetivo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'algorithme de dosage bolus utilise une estimation plus prudente de la glycémie prévue que celle utilisée pour ajuster votre débit basal. \n\nPar conséquent, votre glycémie prévue après un bolus peut rester supérieure à votre plage cible." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אלגוריתם מינון הבולוס משתמש באומדן שמרני יותר של צפי הגלוקוז ממה שמשמש כדי להתאים את הקצב הבזאל שלך.\n\nכתוצאה מכך, הגלוקוז הצפוי לאחר בולוס עדיין עשוי להיות גבוה מטווח היעד שלך." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'algoritmo di dosaggio del bolo utilizza una stima più conservativa della glicemia prevista rispetto a quella utilizzata per regolare la velocità basale.\n\nDi conseguenza, la glicemia prevista dopo un bolo potrebbe essere superiore all'intervallo obiettivo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusdoseringsalgoritmen bruker et mer konservativt estimat av anslått blodsukker enn det som brukes til å justere basalhastigheten. \n\n Som et resultat kan det anslåtte blodsukkeret ditt etter en bolus fortsatt være høyere enn målområdet ditt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het bolusdoseeralgoritme gebruikt een meer conservatieve schatting van de verwachte bloedglucose dan wat wordt gebruikt om je basaalsnelheid aan te passen.\n\nHierdoor kan je voorspelde bloedglucose na een bolus nog steeds hoger zijn dan je streefbereik." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorytm dawkowania bolusa wykorzystuje bardziej ostrożne oszacowanie przewidywanego poziomu glukozy we krwi niż to, które jest używane do dostosowania dawki podstawowej. \n\nW rezultacie przewidywany poziom glukozy we krwi po podaniu bolusa może nadal być wyższy niż zakres docelowy." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algoritmul de dozare al bolusurilor folosește o estimare mai conservatoare a glicemiei prognozate decât cea utilizată pentru a ajusta rata bazală. \n\n Ca rezultat, glicemia estimată după un bolus poate fi în continuare mai mare decât intervalul țintă." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Алгоритм авто болюса использует более консервативную оценку прогнозируемого уровня глюкозы в крови, чем та, которая используется для корректировки с помощью ВБС.\n\nВ результате прогнозируемый уровень глюкозы в крови после болюса может оказаться выше целевого диапазона." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus dozlama algoritması, bazal hızınızı ayarlamak için kullanılandan daha ihtiyatlı bir kan şekeri tahmini kullanır. \n\n Sonuç olarak, bir bolustan sonra tahmin edilen kan şekeriniz, hedef aralığınızdan daha yüksek olabilir." + } + } + } + }, + "The bolus recommendation has updated. Please reconfirm the bolus amount." : { + "comment" : "Alert message for an updated bolus recommendation", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusanbefalingen er opdateret. Bekræft venligst bolus." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Bolusempfehlung wurde aktualisiert. Bitte bestätige die Bolusmenge erneut." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La recomendación de bolo ha sido updatada. Reconfirme el bolo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolussuositus on päivittynyt. Vahvista bolus uudelleen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La recommandation du bolus a changé. Veuillez reconfirmer la quantité du bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "המלצת הבולוס עודכנה. אשר מחדש את כמות הבולוס." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La raccomandazione del bolo è stata aggiornata. Si prega di riconfermare la quantità di bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus-anbefalingen er oppdatert. Bekreft bolusverdien på nytt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De aanbevolen bolus is bijgewerkt. Bevestig de bolus opnieuw." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekomendacja dotycząca bolusa została zaktualizowana. Potwierdź ponownie wielkość bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomandarea pentru bolus a fost actualizată. Vă rugăm să reconfirmaţi valoarea bolusului." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендация по болюсу была обновлена. Пожалуйста, подтвердите новое количество инсулина." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusrekommendationen har uppdaterats. Konfirmera bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus önerisi güncellendi. Lütfen bolus miktarını yeniden onaylayın." + } + } + } + }, + "The legacy model used by Loop, allowing customization of action duration." : { + "comment" : "Subtitle description of Walsh insulin model setting", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "النموذج المستخدم بالتطبيق، يسمح بتخصيص مدة الفعالية." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ældre model, der bruges af Loop, og som gør det muligt at tilpasse insulinens varighed." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Das von Loop verwendete Legacy-Modell, das die Anpassung der Aktivitätsdauer ermöglicht." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The legacy model used by Loop, allowing customization of action duration." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El modelo heredado utilizado por Loop, que permite personalizar la duración de la acción de la insulina." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopin vanha insuliinimalli, jossa voi muokata insuliinin vaikutusaikaa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le modèle original utilisé par Loop, permettant de gérer la durée d'action de l'insuline." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מודל מדור קודם בשימוש Loop, מאפשר שינוי משך זמן פעולה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il modello legacy utilizzato da Loop, che consente la personalizzazione della durata dell'azione." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループのレガシーモデルで、作用期間をカスタマイズできます。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den eldre modellen brukt av Loop, som tillater tilpasning av handlingsvarigheten." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Het model gebruikt bij Loop, staat verandering van actieduur toe." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Model umożliwiający dostosowanie czasu działania insuliny." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O modelo antigo utilizado pelo Loop permitindo personalização da duração da ação." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modelul vechi utilizat de Loop, permite personalizarea duratei de acțiune." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Устаревшая модель, используемая Loop, позволяющая настраивать продолжительность действия." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Äldre modell använd av Loop, vilken tillåter anpassning av insulinets verkningstid." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop tarafından kullanılan ve eylem süresinin özelleştirilmesine izin veren eski model." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mô hình cũ được Loop sử dụng, cho phép tùy chỉnh thời lượng hành động." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop使用的默认模型参数,您可以自行修改胰岛素代谢时间。" + } + } + } + }, + "The maximum allowed amount is %@ grams." : { + "comment" : "Alert body displayed for quantity greater than max (1: maximum quantity in grams)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den maksimalt tilladte mængde er %@ gram." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die maximal zulässige Menge beträgt %@ Gramm." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La cantidad máxima permitida es %@ gr." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantité maximale autorisée est de %@ grammes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות מקסימלית מותרת היא: %@ גרם." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantità massima consentita è %@ grammi." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimalt tillatt mengde er %@ gram." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De maximaal toegestane hoeveelheid is %@ gram." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalna dozwolona ilość to %@ gramów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitatea maximă admisă este de %@ grame." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимально допустимое количество составляет %@ грамм." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İzin verilen maksimum miktar %@ gramdır." + } + } + } + }, + "The maximum amount allowed is %1$@." : { + "comment" : "Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den maksimale tilladte mængde er %1$@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der maximal zulässige Wert ist %1$@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La cantidad máxima permitida es %1$@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantité maximum autorisée est de %@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות מקסימלית מותרת היא: %1$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantità massima consentita è %1$@ ." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal tillatt mengde er %1$@ ." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De maximaal toegestane hoeveelheid is %1$@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalna dozwolona ilość to: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitatea maximă permisă este %1$@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимально допустимая сумма составляет %1$@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İzin verilen maksimum tutar %1$@." + } + } + } + }, + "The maximum bolus amount is %@ U." : { + "comment" : "Alert message for a maximum bolus validation error (1: max bolus value)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den maksimale bolus er %@ enheder." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die maximale Bolusmenge beträgt %@ IE." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo máximo es %@ Unidades." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suurin sallittu bolus on %@ U." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantité maximum du bolus est de %@ U." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מקסימלי הוא %@ U." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantità massima consentita del bolo è %@ U." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal bolus er satt til %@ E." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De maximale bolushoeveelheid is %@ E." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalna wielkość bolusa to %@ J." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valoarea maximă bolus este %@ U." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Максимальный объем болюса составляет %@ ед." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den högst tillåtna bolusmängden är %@ E." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimum bolus miktarı %@ Ü." + } + } + } + }, + "The maximum bolus amount is %@ Units" : { + "comment" : "Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الحد الأقصى للجرعة هو %@ وحدات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den maksimale bolusmængde er %@ enheder" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die maximale Bolus beträgt %@ IE" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "The maximum bolus amount is %@ Units" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo máximo es %@ Unidades" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suurin sallittu bolus on %@ yksikköä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le bolus maximal est de %@ unités" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בולוס מקסימלי הוא %@ יחידות." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantità massima consentita del bolo è %@ Unità" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大ボーラス量は %@単位です" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal bolusmengde er %@ enheter" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De maximale bolushoeveelheid is %@ Eenheden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksymalny bolus wynosi %@ jednostek" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "O bolus máximo é %@ Unidades" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitatea maximă de bolus este de %@ unități" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "максимальный болюс %@ ед" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den maximala bolusdosen är %@ enheter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimum bolus miktarı %@ Ünitedir" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Số lượng bolus tối đa là %@ Units" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量输注最大限制为%@单位" + } + } + } + }, + "The maximum bolus setting must be configured before a bolus can be delivered." : { + "comment" : "Alert message for a missing maximum bolus setting error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimal bolus skal konfigureres, før en bolus kan leveres." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die Boluseinstellungen müssen konfiguriert werden, bevor ein Bolus abgegeben werden kann." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El ajuste de bolo máximo debe configurarse antes de que se pueda administrar un bolo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suurin sallittu bolus -asetus täytyy määrittää ennen kuin bolus voidaan annostella." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le réglage de bolus maximum doit être configuré avant qu’un bolus puisse être effectué." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "יש לקבוע הגדרת בולוס מקסימלי לפני מתן בולוס." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'impostazione del bolo massimo deve essere configurata prima di poter erogare un bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Innstillingen for maksimal bolus må konfigureres før bolus kan leveres." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De maximale bolusinstelling moet worden ingesteld voordat een bolus kan worden afgeleverd." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przed podaniem bolusa musi zostać skonfigurowane ustawienie maksymalnego bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trebuie sa configurați o valoare maxima pentru bolus înainte ca acesta să poată fi livrat." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Перед подачей болюса необходимо настроить максимальное значение болюса." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den högst tillåtna bolusmängden måste ställas in innan en bolus kan ges." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bir bolus verilmeden önce maksimum bolus ayarı yapılandırılmalıdır." + } + } + } + }, + "Therapy Settings" : { + "comment" : "Title text for button to Therapy Settings", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behandlingsindstillinger" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Therapieeinstellungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustes de la Terapia" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoitoasetukset" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réglages Thérapeutique" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תכנית טיפול" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impostazioni terapia" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behandlingsinnstillinger" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Therapieinstellingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienia terapii" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setări Terapie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Настройки терапии" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Behandlingsinställningar" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tedavi Ayarları" + } + } + } + }, + "This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." : { + "comment" : "String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denne mulighed gælder kun, når Loops doseringsstrategi er indstillet til Automatisk bolus." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cette option ne s’applique que lorsque la stratégie de dosage de Loop est réglée sur Bolus automatique." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Questa opzione si applica solo quando Strategia di dosaggio di Loop è impostata su Bolo automatico." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dette alternativet gjelder bare når Loops doseringsstrategi er satt til Automatisk bolus." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ta opcja ma zastosowanie tylko wtedy, gdy Strategia dawkowania pętli jest ustawiona na Automatyczny bolus." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Эта опция применима только в том случае, если для стратегии дозирования петли установлено значение «Автоматический болюс»." + } + } + } + }, + "Time Sensitive Alerts" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsfølsomme advarsler" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alertes Urgentes" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifiche sensibili al tempo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidssensitive varsler" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerty zależne od czasu" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Срочные оповещения" + } + } + } + }, + "Time Sensitive Notifications" : { + "comment" : "Time Sensitive Status text", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsfølsomme meddelelser" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeitkritische Benachrichtigungen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificaciones sensibles al tiempo" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifications urgentes" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הודעות רגישות לזמן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notifiche sensibili al tempo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidssensitive varsler" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tijdgevoelige Meldingen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Powiadomienia zależne od czasu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Notificări urgente" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уведомления, чувствительные к времени" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamana Duyarlı Bildirimler" + } + } + } + }, + "Transmitter Low Battery" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sender lavt batteri" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batterie faible de l'émetteur" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Batteria del trasmettitore scarica" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Svakt batteri i senderen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Słaba bateria transmitera" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Батарейка трансмиттера садится" + } + } + } + }, + "Try Again" : { + "comment" : "Critical event log export error alert try again button", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prøv igen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nochmals versuchen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inténtalo de nuevo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yritä uudelleen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Réessayer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נסה שוב" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Riprova" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prøv på nytt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Probeer Opnieuw" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spróbuj ponownie" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reîncercați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Попробуйте еще раз" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Försök igen" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tekrar deneyin" + } + } + } + }, + "Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." : { + "comment" : "Description text for temporarily silencing non-critical alerts (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluk for lydstyrken på din iOS-enhed eller føj %1$@ som en tilladt app til hver fokustilstand. Tidsfølsomme og kritiske advarsler lyder stadig, men ikke-kritiske advarsler slås fra." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactivez le volume sur votre appareil iOS ou ajoutez %1$@ comme application autorisée à chaque mode Concentration. Les Alertes urgentes et critiques sonneront toujours, mais les Alertes non critiques seront silencieuses." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattiva il volume sul tuo dispositivo iOS o aggiungi %1$@ come app consentita per ciascuna modalità Focus. Gli avvisi sensibili al tempo e critici continueranno a suonare, ma gli avvisi non critici verranno silenziati." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå av volumet på iOS-enheten eller legg til %1$@ som en tillatt app i hver fokusmodus. Tidssensitive og kritiske varsler vil fortsatt høres, men ikke-kritiske varsler blir dempet." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyłącz głośność na swoim urządzeniu iOS lub dodaj %1$@ jako dozwoloną aplikację do każdego trybu skupienia. Alerty zależne od czasu i krytyczne będą nadal emitowane, ale alerty niekrytyczne zostaną wyciszone." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выключите громкость на устройстве iOS или добавьте %1$@ в качестве разрешенного приложения для каждого режима фокусировки. Срочные и критические оповещения по-прежнему будут звучать, но некритические оповещения будут отключены." + } + } + } + }, + "Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." : { + "comment" : "Bluetooth off foreground alert body", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå bluetooth til for at modtage advarsler, alarmer eller blodsukkermålinger." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schalte Bluetooth ein, um Warnungen, Alarme oder Gewebeglukosewerte zu erhalten." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activa Bluetooth para recibir alertas, alarmas o medidas de glucosa del sensor." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ota Bluetooth käyttöön saadaksesi hälytyksiä tai sensorin glukoosilukemia." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activez le Bluetooth pour recevoir des alertes, alarmes ou les données de capteurs de glycémie." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הפעל את Bluetooth כדי לקבל תזכורות, התראות או קריאות גלוקוז." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attiva il Bluetooth per ricevere avvisi, allarmi o letture glicemiche del sensore." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå på Bluetooth for å motta varsler, alarmer eller avlesninger fra glukosesensor." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schakel Bluetooth in om waarschuwingen, alarmen of sensorglucosemetingen te ontvangen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz Bluetooth, aby otrzymywać powiadomienia, alarmy lub odczyty poziomu glukozy z sensora." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activați Bluetooth pentru a primi alerte, alarme sau citiri de glicemie de la senzor." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включите Bluetooth для получения предупреждений, сигналов тревоги или показаний датчика глюкозы." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivera Bluetooth för att ta emot varningar, larm eller blodglukosavläsningar." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyarıları, alarmları veya sensör KŞ okumalarını almak için Bluetooth'u açın." + } + } + } + }, + "U" : { + "comment" : "The short unit display string for international units of insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + } + } + }, + "Unable To Clear Alert" : { + "comment" : "Title for alert shown when alert acknowledgement fails", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke rydde en advarsel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benachrichtigung kann nicht gelöscht werden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede borrar la alerta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'effacer l'alerte" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן לבטל התראה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile cancellare l'avviso" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke fjerne varsel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Waarschuwing Niet Wissen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można wyczyścić alertu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se poate șterge alerta" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно снять предупреждение" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyarı Silinemiyor" + } + } + } + }, + "Unable To Reach Pump" : { + "comment" : "Title for alert shown when delivery status is uncertain", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke få kontakt til pumpen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe kann nicht erreicht werden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede contactar con la bomba" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumppuun ei voitu yhdistää" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de contacter la pompe" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן לתקשר עם המשאבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile contattare la pompa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kommunikasjonsfeil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Pomp Niet Bereiken" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można połączyć się z pompą" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se poate conecta la pompă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно достучаться до помпы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det går inte att nå pump" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompaya Ulaşılamıyor" + } + } + } + }, + "Unable to Save Carb Entry" : { + "comment" : "Alert title for a carb entry persistence error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke gemme kulhydrat indtastningen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH-Eintrag kann nicht gespeichert werden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede guardar la entrada de carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraatteja ei voitu tallentaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'enregistrer la saisie des Glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן לשמור ערך פחמימות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile salvare l'inserimento di carboidrati" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunne ikke lagre karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Koolhydraatinvoer Niet Opslaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zapisać wprowadzonych węglowodanów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se pot salva Carbohidrații" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удается сохранить запись углеводов" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det går inte att spara kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb Girişi Kaydedilemiyor" + } + } + } + }, + "Unable to Save Manual Glucose Entry" : { + "comment" : "Alert title for a manual glucose entry persistence error", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det manuelt indtastet blodsukker kan ikke gemmes" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuelle Glukose-Eingaben kann nicht gespeichert werden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede guardar la entrada manual de glucosa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosiarvoa ei voitu tallentaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d’enregistrer la glycémie saisie" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן לשמור ערך גלוקוז ידני" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile salvare l'inserimento manuale delle glicemie" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke lagre manuell blodsukkerregistrering" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan Handmatige Glucose-invoer Niet Opslaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zapisać ręcznie wprowadzonego poziomu glukozy" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se poate salva glicemia manuala" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Невозможно сохранить ручной ввод глюкозы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det går inte att spara manuellt inmatat blodsockervärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Manuel KŞ Girişi Kaydedilemiyor" + } + } + } + }, + "Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." : { + "comment" : "The alert body for an error while canceling a bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke stoppe igangværende bolus. Flyt din iPhone tættere på pumpen og prøv igen. Tjek din historik for insulinafgivelse for detaljer og overvåg nøje dit blodsukkerniveau." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der laufende Bolus kann nicht gestoppt werden. Bewegen Dein iPhone näher an die Pumpe und versuche es erneut. Überprüfe den Verlauf der Insulinabgabe auf Einzelheiten und überwache Deinen Blutzucker genau." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede detener el bolo en progreso. Mueve tu iPhone más cerca de la microinfusora e inténtalo de nuevo. Revisa tu historial de entrega de insulina para más detalles y supervisa tu glucosa." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käynnissä olevaa bolusta ei voitu pysäyttää. Siirrä iPhone lähemmäksi pumppua ja yritä uudelleen. Tarkista tiedot insuliinin annosteluhistoriasta ja seuraa glukoosia tarkasti." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d'arrêter le bolus en cours. Déplacez votre iPhone plus près de la pompe et réessayez. Vérifiez votre historique de distribution d'insuline pour plus de détails et surveillez votre glycémie de près." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ניתן להפסיק את הבולוס בתהליך. קרב את האייפון שלך למשאבה ונסה שוב. בדוק את היסטוריית מתן האינסולין שלך, ועקוב מקרוב אחר הגלוקוז שלך." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile interrompere il bolo in corso. Avvicina l'iPhone alla pompa e riprova. Controlla la cronologia delle erogazioni d'insulina per maggiori dettagli e monitora attentamente la glicemia." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke stoppe bolusen som pågår. Flytt iPhone nærmere pumpen og prøv igjen. Sjekk insulinleveringshistorikken for detaljer, og overvåk glukosen nøye." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan de toedienende bolus niet stoppen. Plaats je iPhone dichter bij de pomp en probeer het opnieuw. Controleer je insulinetoedieningsgeschiedenis voor details, en houd je glucose nauwlettend in de gaten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można zatrzymać podawanego bolusa. Przybliż iPhone'a do pompy i spróbuj ponownie. Aby uzyskać szczegółowe informacje, sprawdź historię podawania insuliny i uważnie monitoruj poziom glukozy." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu s-a putut opri livrarea bolusului. Mutați iPhone-ul mai aproape de pompă și încercați din nou. Verificați istoricul administrării insulinei pentru detalii și monitorizați îndeaproape glicemia." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удается остановить текущий болюс. Переместите свой iPhone ближе к помпе и попробуйте еще раз. Проверьте историю введения инсулина и внимательно следите за уровнем глюкозы." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det går inte att stoppa pågående bolus. Flytta din iPhone närmare din pump och försök igen. Kontrollera händelsehistorik för insulin för mer detaljerad information och var vaksam på sjunkande blodsocker." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Devam etmekte olan bolus durdurulamıyor. iPhone'unuzu pompaya yaklaştırın ve tekrar deneyin. Ayrıntılar için insülin uygulama geçmişinizi kontrol edin ve kan şekerinizi yakından takip edin." + } + } + } + }, + "Unknown" : { + "comment" : "Event title displayed when StoredPumpEvent.title is not set\nThe default description to use when an entry has no dose description\nlabel for when the alert mute end time is unknown\nresult when time cannot be formatted", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unknown" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukendt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbekannt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desconocido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tuntematon" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inconnu" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לא ידוע" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sconosciuto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "不明" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukjent" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onbekend" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieznany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desconhecido" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necunoscut" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неизвестно" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neznáme" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okänd" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilinmeyen" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không nhận ra" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未知" + } + } + } + }, + "Unknown Error: %1$@" : { + "comment" : "The error message displayed for unknown errors. (1: unknown error)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "خطأ غير معروف" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neznámá chyba: %1$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukendt fejl: %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbekannter Fehler: %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Error desconocido: %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erreur inconnue : %1$03d" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תקלה לא ידועה %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Errore sconosciuto: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukjent feil: %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onbekende Fout: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieznany błąd: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eroare necunoscută: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неизвестная ошибка: %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilinmeyen Hata: %1$@" + } + } + } + }, + "Unknown preset: %1$@" : { + "comment" : "Override error description: unknown preset (1: preset name).", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukendt forudindstilling: %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbekannte Voreinstellung: %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préréglage inconnu : %1$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגדרה לא ידועה: %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preset sconosciuto: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukjent forhåndsinnstilling: %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onbekende voorinstelling: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieznane ustawienie: %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presetare necunoscută: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неизвестный пресет: %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilinmeyen ön ayar: %1$@" + } + } + } + }, + "Unknown time" : { + "comment" : "Unknown amount of time in settings' profile expiration section", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neznámý čas" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukendt tidspunkt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbekannte Zeit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiempo desconocido" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temps inconnu" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "זמן לא ידוע" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Orario sconosciuto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukjent tid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onbekende tijd" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieznany czas" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Timp necunoscut" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неизвестное время" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilinmeyen zaman" + } + } + } + }, + "Unmute" : { + "comment" : "The title of the action used to unmute alerts", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå lyden til" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Riattiva" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oppheve demping" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyłącz wyciszenie" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить звук" + } + } + } + }, + "Unmute Alerts?" : { + "comment" : "The alert title for unmute alert confirmation", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slå alarmer til?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattivare gli avvisi?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oppheve demping av varsler?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyciszyć Alerty?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить звук оповещений?" + } + } + } + }, + "Unsupported Notification Service: %1$@" : { + "comment" : "Error message when a service can't be found to handle a push notification. (1: Service Identifier)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ikke-understøttet meddelelsestjeneste: %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Servizio di notifica non supportato: %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varslingstjeneste som ikke støttes: %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieobsługiwana usługa powiadomień: %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неподдерживаемая служба уведомлений: %1$@" + } + } + } + }, + "until %@" : { + "comment" : "The format for the description of a custom preset end date", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حتى %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "indtil %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Endet um %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "hasta las %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ asti" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "jusqu’à %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עד %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "fino a %@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@まで" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "til %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "tot %@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "do %@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "até %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "până la %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "до %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "fram till %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ tarihine kadar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "cho đến khi %@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "直到 %@" + } + } + } + }, + "Until %1$@" : { + "comment" : "indication of when alerts will be unmuted (1: time when alerts unmute)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtil %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fino a %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inntil %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Do %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "До %1$@" + } + } + } + }, + "Until I enter carbs" : { + "comment" : "The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first).", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtil jeg indtaster kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bis ich KH eingebe" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasta que registre carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunnes syötän hiilihydraatteja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jusqu'à l'apport de glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עד שאזין פחמימות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fino a quando non inserisco carboidrati" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Frem til jeg legger inn karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Totdat ik koolhydraten invoer" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dopóki nie wprowadzę węglowodanów" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Până când introduc carbohidrații" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пока я не введу углеводы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tills jag anger kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb girene kadar" + } + } + } + }, + "Until I turn off" : { + "comment" : "The title of a target alert action specifying workout targets duration until it is turned off by the user", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indtil jeg slukker" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bis ich ausschalte" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hasta que lo desactive" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kunnes laitan pois päältä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jusqu'à ce que je désactive" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "עד שאכבה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Finché non disattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Frem til jeg skrur av" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Totdat ik uitschakel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dopóki nie wyłączę" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Până mă opresc" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пока я не выключу" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tills jag stänger av" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ben kapatana kadar" + } + } + } + }, + "Urgent Low" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritisk lav" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Urgent bas" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ipo urgente" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Øyeblikkelig lav" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pilny niski" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Очень низкий" + } + } + } + }, + "Use Pre-Meal Preset" : { + "comment" : "The title of the alert controller used to select a duration for pre-meal targets", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brug Før-måltid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellung „Vor dem Essen“ verwenden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar Pre-Comida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käytä Ennen ateriaa -esiasetusta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser le préréglage Pré-repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השתמש בהגדרת טרום-ארוחה" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa il Preset pre-pasto" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk pre-måltidsmål" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gebruik Pre-Meal Programma" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Użyj ustawień przed posiłkiem" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilizare presetare înainte de masă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Использовать функцию до еды" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använd förval 'Före måltid'" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yemek Öncesi Ön Ayarı Kullanın" + } + } + } + }, + "Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." : { + "comment" : "Description text for temporarily silencing all sounds (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brug funktionen Mute Alerts. Den giver dig mulighed for midlertidigt at slå alle dine advarsler og alarmer fra via %1$@-appen, inklusive Kritiske advarsler og Tidsfølsomme advarsler." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilisez la fonction Muet Alertes. Elle vous permet de mettre temporairement en silence toutes vos alertes et alarmes via l'application %1$@, y compris les Alertes Critiques et les Alertes Urgentes." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilizza la funzione Disattiva avvisi. Consente di silenziare temporaneamente tutti gli avvisi e gli allarmi tramite l'app %1$@, compresi gli avvisi critici e gli avvisi sensibili al tempo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk funksjonen Demp varsler. Med denne funksjonen kan du midlertidig dempe alle varsler og alarmer via %1$@-appen, inkludert kritiske varsler og tidssensitive varsler." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Użyj funkcji Wycisz alerty. Umożliwia tymczasowe wyciszenie wszystkich alertów i alarmów za pośrednictwem aplikacji %1$@ , w tym alertów krytycznych i alertów zależnych od czasu." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Используйте функцию отключения оповещений. Она позволяет временно отключить все ваши оповещения и тревоги с помощью кнопки %1$@ , включая критические оповещения и срочные оповещения." + } + } + } + }, + "Use Workout Glucose Targets" : { + "comment" : "The title of the alert controller used to select a duration for workout targets", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "استخدم أهداف قراءات سكر الدم للتمارين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anvend blodsukkermål for motion" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zielbereich für Sport verwenden" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Use Workout Glucose Targets" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar Objetivos de Glucosa de Ejercicio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käytä liikuntatilan glukoositavoitetteita" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser les objectifs exercice" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השתמש בטווחי גלוקוז לאימון" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilizza i target glicemi per l'allenamento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "運動時ターゲットを使用" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk treningsmodus for BS-målområde" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gebruik Trainingsglucosedoelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Użyj zakresu glukozy dla wysiłku fizycznego" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar Metas de Glicemia de Exercício" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folosește țintele glicemice de activitate sportivă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Применить цели гликемии как для физической нагрузки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använd målvärden för träning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egzersiz KŞ Hedeflerini Kullanın" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sử dụng Workout Glucose Targets" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用运动状态的血糖目标" + } + } + } + }, + "Use Workout Preset" : { + "comment" : "The title of the alert controller used to select a duration for workout targets", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brug forudindstillinger for motion" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trainingsvoreinstellung verwenden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usar Ejercicio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Käytä liikuntatilaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utiliser le préréglage exercice" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "השתמש בהגדרת אימון" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Usa il Preset allenamento" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bruk forhåndsinnstilling for treningsøkt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gebruik Trainingsprogramma" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Użyj wstępnego ustawienia treningu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilizare presetare antrenament" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Использовать пресет физнагрузки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Använd förval 'Träning'" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egzersiz Ön Ayarını Kullan" + } + } + } + }, + "Walsh" : { + "comment" : "Title of insulin model setting", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Walsh" + } + } + } + }, + "Warning! Safety notifications are turned OFF" : { + "comment" : "Alert Permissions Need Attention alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Advarsel! Sikkerhedsmeddelelser er slået FRA" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Warnung! Sicherheitsbenachrichtigungen sind AUSGESCHALTET" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atención Las notificaciones de seguridad están desactivadas" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attention! Les notifications de sécurité sont DÉSACTIVÉES" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "אזהרה! התראות בטיחות כבויות" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attenzione! Le notifiche di sicurezza sono disattivate" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Advarsel! Sikkerhetsvarsler er slått AV" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Waarschuwing! Veiligheidsmeldingen staan UIT" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uwaga! Powiadomienia dotyczące bezpieczeństwa są WYŁĄCZONE" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atenție! Notificările de siguranță sunt DEZACTIVATE" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Внимание! Уведомления о безопасности отключены" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uyarı! Güvenlik bildirimleri KAPALI" + } + } + } + }, + "What are examples of Critical and Time Sensitive alerts?" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hvad er eksempler på kritiske og tidsfølsomme alarmer?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quels sont des exemples d'alertes critiques et urgentes?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quali sono alcuni esempi di avvisi critici e sensibili al tempo?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hva er eksempler på kritiske og tidssensitive varsler?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jakie są przykłady alertów krytycznych i alerty zależne od czasu?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Каковы примеры критических и срочных оповещений?" + } + } + } + }, + "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." : { + "comment" : "Explanation of glucose safety limit", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når den nuværende eller forventede blodsukker ligger under blodsukkersikkerhedsgrænsen, vil Loop ikke anbefale en bolus og vil altid anbefale en midlertidig basalrate på 0 enheder i timen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn der aktuelle oder prognostizierte Glukosewert unter dem Glukosesicherheitsgrenzwert liegt, empfiehlt Loop keinen Bolus und immer eine temporäre Basalrate von 0 Einheiten pro Stunde." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuando la glucosa actual o proyectada se encuentre debajo del nivel de suspensión, Loop no recomendará un bolo y siempre recomendará un basal temporal de 0 unidades por hora." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun nykyinen tai ennustettu glukoosi on glukoosin turvarajan alapuolella, Loop ei suosittele bolusta ja suosittelee aina tilapäiseksi basaaliksi 0 yksikköä tunnissa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsque la glycémie actuelle ou prévue est inférieure au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כאשר גלוקוז נוכחי או צפוי קטן מגבול הבטיחות, Loop לא תמליץ על בולוס, ותמיד תמליץ על קצב בזאלי זמני של 0 יחידות לשעה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando la glicemia attuale o prevista è inferiore al limite di sicurezza, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità all'ora." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når gjeldende eller anslått glukose er under glukosesikkerhetsgrensen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basaldose på 0 enheter pr. time." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wanneer de huidige of voorspelde glucose onder de glucoseveiligheidslimiet ligt, zal Loop geen bolus aanbevelen en zal het altijd een tijdelijke basissnelheid van 0 eenheden per uur aanbevelen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiedy aktualny lub prognozowany poziom glukozy znajduje się poniżej granicy bezpieczeństwa, Loop nie zaleca bolusa i zawsze zaleca tymczasową dawkę podstawową wynoszącą 0 jednostek na godzinę." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În momentul în care glicemia actuală sau cea prognozată se situează sub limita de siguranța, Loop nu va recomanda un bolus și va recomanda întotdeauna o rată bazală temporară de 0 unități pe ora." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если текущий или прогнозируемый уровень глюкозы ниже безопасного предела глюкозы, Loop не будет рекомендовать болюс и всегда будет рекомендовать временную базальную скорость 0 единиц в час." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "När nuvarande eller förväntat blodglukosvärde är under tröskelvärde kommer Loop inte att rekommendera en bolus, och kommer också alltid att föreslå en temporär basal på 0 enheter per timme." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mevcut veya tahmin edilen KŞ, KŞ güvenlik sınırının altında olduğunda Loop bir bolus önermez ve her zaman saatte 0 ünite geçici bazal oran önerir." + } + } + } + }, + "When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." : { + "comment" : "Explanation of suspend threshold", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عندما تكون قراءات السكر الحالية أو المتوقعة أقل من قيمة التعليق المؤقت ، لن يوصي التطبيق بجرعة، وسيوصي دائمًا بمعدل ضخ مؤقت يبلغ 0 وحدة في الساعة." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når nuværende og forventet glukose er under suspenderingsgrænsen, vil Loop ikke anbefale en bolus, og vil altid anbefale en midlertidig basal rate på 0 enheder i timen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn der aktuelle oder prognostizierte Blutzucker unter dem Schwellenwert für die Hypo-Abschaltung liegt, empfiehlt Loop keinen Bolus, sondern immer eine temporäre Basalrate von 0 IE/h." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuando la glucosa actual o proyectada se encuentre debajo del nivel de suspensión, Loop no recomendará un bolo y siempre recomendará un basal temporal de 0 unidades por hora." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun nykyinen tai ennustettu glukoosi on pysäytysrajan alapuolella, Loop ei suosittele bolusta ja suosittelee aina tilapäiseksi basaaliksi 0 yksikköä tunnissa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsque le glucose actuel ou prévu est inférieur au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כאשר גלוקוז נוכחי או צפוי קטן מסף ההשהיה, Loop לא תמליץ על בולוס, ותמיד תמליץ על בזאלי זמני של 0 יחידות לשעה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando la glicemia attuale o prevista è sotto la soglia di sospensione, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità per ora." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在または予測グルコースが一時停止値を下回るため、ループはボーラスを推奨しません。0単位/時の一時的基礎レートを推奨します。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når gjeldende eller anslått glukose er under suspenderingsterskelen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basaldose på 0 enheter pr. time." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wanneer de huidige of voorspelde glucose onder de onderbrekingsdrempel ligt, zal Loop geen bolus aanbevelen en zal Loop altijd een tijdelijke basaalsnelheid van 0 eenheden per uur aanbevelen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kiedy aktualna lub prognozowana glukoza znajduje się poniżej progu zawieszenia, Loop nie zaleca bolusa i zawsze zaleca tymczasową dawkę podstawową wynoszącą 0 jednostek na godzinę." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando a glicose atual ou prevista estiver abaixo do limite de suspensão, o Loop não recomendará um bolus e sempre recomendará uma taxa basal temporária de 0 unidades por hora" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În momentul în care glicemia actuală sau cea prognozată se situează sub limita de suspendare, Loop nu va recomanda un bolus și va recomanda întotdeauna o rată bazală temporară de 0 unități pe ora." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если текущая или предсказываемая гликемия ниже порога приостановки помпы, алгоритм цикла ипж не рекомендует болюс и всегда рекомендует временный базал 0 ед/час" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "När nuvarande eller förväntat slutglukosvärde är under tröskelvärdet kommer Loop inte att rekommendera en bolus, utan kommer alltid att föreslå en temporär basal på 0 enheter per timme." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mevcut veya tahmin edilen KŞ askıya alma eşiğinin altında olduğunda, Loop bir bolus önermez ve her zaman saatte 0 birimlik geçici bir bazal hız önerir." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khi mức glucose hiện tại hoặc được dự báo thấp hơn ngưỡng tạm dừng, Loop sẽ không khuyến nghị một liều bolus và sẽ luôn khuyến nghị liều basal là 0 unit mỗi giờ." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前或预测的葡萄糖低于暂停阈值时,Loop不推荐推注,并且总是建议每小时0单位的临时基础速率。" + } + } + } + }, + "When enabled, Loop can notify you when it detects a meal that wasn't logged." : { + "comment" : "Description of missed meal notifications.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når aktiveret, kan Loop give dig besked, når den registrerer et måltid, som ikke er logget." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn aktiviert, kann Loop Dich benachrichtigen, wenn es eine Mahlzeit erkennt, die nicht protokolliert wurde." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsqu'il est activé, Loop peut vous avertir lorsqu'il détecte un repas qui n'a pas été enregistré." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בהפעלה, Loop יכול להודיע לך כשהוא מזהה ארוחה שלא הוזנה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se attivato, Loop può avvisarti quando rileva un pasto che non è stato registrato." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når den er aktivert, kan Loop varsle deg når den oppdager et måltid som ikke ble logget." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Indien ingeschakeld, kan Loop je op de hoogte stellen wanneer het een maaltijd detecteert die niet is toegevoegd." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Po włączeniu Loop może powiadomić Cię, gdy wykryje posiłek, który nie został wprowadzony." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Când este activat, Loop vă poate notifica când detectează o masă care nu a fost înregistrată." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если эта функция включена, Loop может уведомить вас, когда обнаружит прием пищи, который не был внесен." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etkinleştirildiğinde Loop, günlüğe kaydedilmemiş bir öğün tespit ettiğinde sizi bilgilendirebilir." + } + } + } + }, + "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når der ikke køres lukket Loop, bruger appen en forenklet bolusberegner som en typisk pumpe." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ist der Loop-Modus ausgeschaltet, dann verwendet die App einen vereinfachten Bolusrechner wie eine typische Pumpe." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cuando está fuera del modo Closed Loop, la aplicación utiliza una calculadora de bolo simplificada como una microinfusadora típica." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun suljettu säätö ei ole päällä, sovellus käyttää yksinkertaista boluslaskuria, kuten tavallisessa pumpussa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En dehors du mode Boucle fermée, l'application utilise un calcul de bolus simplifié comme pour une pompe classique." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ב-Loop פתוח האפליקציה תחשב ערכי בולוס בצורה פשוטה, כמו משאבה רגילה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando non è in modalità Loop chiuso, l'applicazione utilizza un calcolatore di bolo semplificato come una tipica pompa." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når den er ute av lukket Loop-modus, bruker appen en forenklet boluskalkulator som en vanlig pumpe." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als de Gesloten Loop modus is uitgeschakeld, gebruikt de app een vereenvoudigde boluscalculator zoals bij een gewone pomp." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poza trybem pętli zamkniętej aplikacja korzysta z uproszczonego kalkulatora bolusa, takiego jak typowa pompa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Când modul Buclă închisa nu este activat, aplicația folosește un calculator simplificat pentru bolus similar cu cel al unei pompe tipice." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Когда приложение выходит из режима замкнутого цикла, оно использует упрощенный калькулятор болюса, как в обычной помпе." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "När läget sluten Loop inte används, kommer appen använda en förenklad bolusdoskalkylator likt den en vanlig pump använder." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulama, Kapalı Döngü modundan çıktığında, tipik bir pompa gibi basitleştirilmiş bir bolus hesaplayıcı kullanır." + } + } + } + }, + "While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." : { + "comment" : "App sounds descriptive text (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mens lydløse advarsler er slået til, vises alle advarsler fra din %1$@ app inklusive kritiske og tidsfølsomme advarsler midlertidigt uden lyde og vil kun vibrere." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tant que les alertes muettes sont activées, toutes les alertes de votre application %1$@, y compris les alertes critiques et urgentes, s'afficheront temporairement sans son et vibreront uniquement." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quando Disattiva avvisi è attiva, tutti gli avvisi dell'app %1$@, compresi gli avvisi critici e quelli sensibili al tempo, vengono temporaneamente visualizzati senza suoni e solo con una vibrazione." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Når lydløse varsler er på, vil alle varsler fra %1$@-appen, inkludert kritiske og tidssensitive varsler, midlertidig vises uten lyd og kun vibrere." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gdy włączone jest wyciszenie alertów, wszystkie alerty z aplikacji %1$@ w tym alerty krytyczne i alerty zależne od czasu, będą tymczasowo wyświetlane bez dźwięków i będą jedynie wibrować." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пока отключение звука оповещений включено, все оповещения от вашего %1$@ приложения, включая критические и срочные оповещения, будут временно отображаться без звуков и будут только вибрировать." + } + } + } + }, + "While mute alerts is on, your insulin pump and CGM hardware may still sound." : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mens lydløs alarm er slået til, kan din insulinpumpe og CGM-hardware stadig afgive lyd." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lorsque les alertes sont en mode muettes, votre pompe à insuline et le matériel CGM peuvent toujours émettre des sons." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anche se gli avvisi sono disattivati, la pompa per insulina e l'hardware CGM potrebbero comunque emettere suoni." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selv om dempede varsler er aktivert, kan insulinpumpen og CGM-maskinvaren fortsatt avgi lyd." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gdy włączone jest wyciszenie alertów, pompa insulinowa i sprzęt CGM mogą nadal wydawać dźwięki." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "При отключении звуковых сигналов ваша инсулиновая помпа и мониторинг могут продолжать издавать звуки." + } + } + } + }, + "While trying to restart %1$@ an error occured.\n\n%2$@" : { + "comment" : "Format string for message of reset loop alert. (1: App name) (2: error description)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Under forsøg på at genstarte %1$@ opstod der en fejl.\n\n%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durante il tentativo di riavviare %1$@ si è verificato un errore.\n\n%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det oppstod en feil da du prøvde å starte %1$@ på nytt.\n\n%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Podczas próby ponownego uruchomienia %1$@ wystąpił błąd. \n\n %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "При попытке перезапустить %1$@ произошла ошибка. \n\n %2$@" + } + } + } + }, + "Workout Targets" : { + "comment" : "The label of the workout mode toggle button", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أهداف التمارين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Motion Mål" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zielbereich für Sport" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Objetivos de Ejercicio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liikuntatavoitteet" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Objectifs d'exercice" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "טווחים באימון" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obiettivi di allenamento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "運動時ターゲット" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Målområder for trening" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trainingsdoelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zakres w czasie wysiłku fizycznego" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Metas de Exercício" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ținte de activitate sportivă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Целевые значения при физической нагрузке" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Målvärden för träning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egzersiz Hedefleri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mục tiêu tập luyện" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运动模式血糖目标" + } + } + } + }, + "Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." : { + "comment" : "Workout override still on reminder alert body.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Træning Temp Adjust har været tændt i mere end 24 timer. Sørg for, at du stadig vil have den aktiveret, eller slå den fra i appen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zielbereichsänderung ist seit mehr als 24 Stunden eingeschaltet. Stelle sicher, dass Du es weiterhin aktiviert haben möchtest, oder schalte es aus." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "El Ajuste Temporal por Ejercicio se ha activado durante más de 24 horas. Asegúrate de que todavía quieres que esté habilitado o desactívalo en la aplicación." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liikuntatila on ollut käytössä yli 24 tuntia. Varmista, että haluat sen olevan edelleen käytössä, tai poista se käytöstä sovelluksessa." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le réglage de la température d'entraînement est activé depuis plus de 24 heures. Vérifiez que vous souhaitez toujours l'activer ou désactivez-le dans l'application. Vérifiez que vous souhaitez toujours le garder actif ou désactivez-le dans l'application." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התאמה זמנית באימון מופעלת במשך יותר מ-24 שעות. ודא שאתה עדיין רוצה שהיא תופעל, או כבה אותה באפליקציה." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Override di allenamento è attivo da più di 24 ore. Assicurati di volerlo mantenere attivato oppure disattivalo nell'app." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Temp Adjust for trening har vært slått på i mer enn 24 timer. Forsikre deg om at du fortsatt vil ha den aktivert, eller slå den av i appen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tijdelijk Trainingsprogramma staat meer dan 24 uur ingeschakeld. Zorg ervoor dat je deze nog steeds wilt inschakelen of schakel deze uit in de app." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cel Tymczasowy (trening) był włączony przez ponad 24 godziny. Upewnij się, że nadal chcesz, aby był włączony, lub wyłącz go w aplikacji." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustarea temporară de antrenament fost activată de mai mult de 24 de ore. Asigură-te că încă dorești să fie activată sau dezactiveaz-o din aplicație." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Функция физнагрузки была включена более 24 часов. Убедитесь, что вы все еще хотите, чтобы она была включена, или выключите ее в приложении." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ett träningsförval har varit aktivt i mer än 24 timmar. Kontrollera om du fortfarande vill ha den på, eller stäng av den i appen." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçici Egzersiz Ayarı 24 saatten uzun süredir açık. Hala etkin olmasını istediğinizden emin olun veya uygulamadan kapatın." + } + } + } + }, + "Workout Temp Adjust Still On" : { + "comment" : "Workout override still on reminder alert title", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Træning Temp Justere stadig på" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zielbereichsänderung ist noch an" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajuste Temporal por Ejercicio todavía encendido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liikuntatila on yhä päällä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Le préréglage exercice temporaire est encore actif" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התאמה זמנית באימון עדיין מופעלת" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'Override di allenamento è ancora attivo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Midlertidig justering for treningsøkter er fortsatt på" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tijdelijk Trainingsprogramma Nog Steeds Aan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tymczasowy profil treningowy nadal działa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustare temporara antrenament încă activa" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Физнагрузка все еще включена" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Träningsförval fortfarande på" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçici Egzersiz Ayarı Hala Açık" + } + } + } + }, + "Yes" : { + "comment" : "The title of the action used when confirming entered amount of carbohydrates.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sí" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oui" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כן" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "SÌ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ja" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tak" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Da" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Да" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Áno" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Evet" + } + } + } + }, + "You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." : { + "comment" : "Format for Notifications permissions disabled alert body. (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du får muligvis ikke lyd-, visuelle eller vibrationsadvarsler om vigtige sikkerhedsoplysninger.\n\nFor at løse problemet skal du trykke på \"Indstillinger\" og sikre dig, at Meddelelser, Kritiske advarsler og Tidsfølsomme meddelelser er slået til." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Möglicherweise erhältst Du keine akustischen, optischen oder Vibrationswarnungen zu wichtigen Sicherheitsinformationen.\n\nUm das Problem zu beheben, tippe auf „Einstellungen“ und vergewissere Dich, dass „Benachrichtigungen“, „Dringende Warnungen“ und „Zeitkritische Benachrichtigungen“ aktiviert sind." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es posible que no reciba alertas sonoras, visuales o por vibración relativas a información de seguridad crítica.\n\nPara solucionar el problema, toque \"Ajustes\" y asegúrese de que las notificaciones, las alertas críticas y las notificaciones sensibles al tiempo están activadas." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il se peut que vous ne receviez pas d'alertes sonores, visuelles ou vibratoires concernant des informations de sécurité critiques. \n\n Pour résoudre le problème, appuyez sur \"Paramètres\" et assurez-vous que les notifications, les alertes critiques et les notifications exigeant une intervention rapide sont activées." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ייתכן שלא תקבל התראות קוליות, חזותיות או רטט בנוגע למידע בטיחותי קריטי.\n\nכדי לתקן את הבעיה, הקש על 'הגדרות' וודא שהתראות, התראות קריטיות והודעות רגישות לזמן מופעלות." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potresti non ricevere avvisi sonori, visivi o con vibrazione relativi a informazioni critiche sulla sicurezza. \n\nPer risolvere il problema, tocca Impostazioni e assicurati che notifiche, avvisi critici e notifiche sensibili al tempo siano attivate." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du får kanskje ikke lyd-, visuelle eller vibrasjonsvarsler angående kritisk sikkerhetsinformasjon. \n\n For å fikse problemet, trykk på \"Innstillinger\" og sørg for at varsler, kritiske varsler og tidssensitive varsler er slått PÅ." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mogelijk ontvangt je geen geluids-, visuele of trillingswaarschuwingen met betrekking tot kritieke veiligheidsinformatie. \n\nOm het probleem op te lossen, tikt op 'Instellingen' en zorg ervoor dat Meldingen, Kritieke Meldingen en Tijdgevoelige Meldingen AAN staan." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Możesz nie otrzymywać alertów dźwiękowych, wizualnych lub wibracyjnych dotyczących krytycznych informacji o bezpieczeństwie. \n\nAby rozwiązać ten problem, wybierz „Ustawienia” i upewnij się, że Powiadomienia, Alerty Krytyczne i Powiadomienia Zależne od Czasu są WŁĄCZONE." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Este posibil să nu primiți alerte sonore, vizuale sau cu vibrații referitoare la informații critice de siguranță. \n\nPentru a remedia problema, atingeți „Setări” și asigurați-vă că notificările, alertele critice și notificările sensibile la timp sunt activate." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы можете не получать звуковые, визуальные или вибрационные предупреждения о важной информации по безопасности.\n\nЧтобы решить эту проблему, нажмите \"Настройки\" и убедитесь, что уведомления, критические предупреждения и уведомления с учетом времени включены." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritik güvenlik bilgileriyle ilgili sesli, görsel veya titreşimli uyarılar alamayabilirsiniz. \n\n Sorunu çözmek için 'Ayarlar'a dokunun ve Bildirimlerin, Kritik Uyarıların ve Zamana Duyarlı Bildirimlerin AÇIK olduğundan emin olun." + } + } + } + }, + "Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." : { + "comment" : "Time change alert body. (1: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din %1$@'s tid er blevet ændret. %2$@ har brug for nøjagtige tidsregistreringer for at kunne forudsige din glukose og justere din insulin i overensstemmelse hermed.\n\nTjek i dine %1$@-indstillinger (Generelt / Dato og tid), og kontrollér, at \"Indstilles automatisk\" er slået til. Hvis dette ikke løses, kan det føre til alvorlig under- eller overlevering af insulin." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deine Zeit %1$@ wurde geändert. %2$@ benötigt genaue Zeitaufzeichnungen, um Vorhersagen über Deinen Blutzuckerwert zu treffen und Dein Insulin entsprechend anzupassen.\n\nÜberprüfe %1$@ Einstellungen (Allgemein / Datum & Uhrzeit) und vergewissere Dich, dass „Automatisch einstellen“ aktiviert ist. Wird dies nicht behoben, kann dies zu einer schwerwiegenden Unter- oder Über-Abgabe von Insulin führen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se ha cambiado la hora de su %1$@. %2$@ necesita registros horarios precisos para hacer predicciones sobre su glucosa y ajustar su insulina.\n\nCompruebe en su %1$@ Ajustes (General / Fecha y Hora) y verifique que 'Ajustar automáticamente' está activado. Si no se resuelve, podría producirse un grave suministro insuficiente o excesivo de insulina." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'heure de votre %1$@ a été modifiée. %2$@ a besoin d'enregistrements de temps précis pour établir des prédictions sur votre glycémie et ajuster votre insuline en conséquence. \n\nEnregistrez vos paramètres %1$@ (Général / Date et heure) et vérifiez que \"Régler automatiquement\" est activé. L'absence de résolution pourrait entraîner une sous-administration ou une sur-administration grave d'insuline." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזמן של %1$@ השתנה. %2$@ צריך זמן מדויק כדי לחזות את הגלוקוז שלך ולאזן את מתן האינסולין.\n\nבדוק את הגדרות הזמן ב-%1$@ כדי לוודא שהוא מכוון אוטומטית, אחרת ייתכנו השפעות רציניות על מתן נמוך או גבוה מדי של אינסולין." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "L'orario di %1$@ è stato modificato. La %2$@ ha bisogno di registrazioni accurate dell'orario per fare previsioni sulle glicemie e regolare l'insulina di conseguenza.\n\nControlla in Impostazioni di %1$@ (Generale / Data e ora) e verifica che l'opzione Imposta automaticamente sia attivata. In caso contrario, l'insulina potrebbe essere erogata in quantità insufficiente o eccessiva." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tidsinnstillingen til %1$@ er endret. %2$@ trenger nøyaktige tidsregistreringer for å gi spådommer om blodsukker og justere insulinet deretter. \n\nSjekk inn %1$@ innstillingene (Generelt / Dato og klokkeslett) og bekreft at 'Sett automatisk' er slått PÅ. Unnlatelse av å løse problemet kan føre til alvorlig under- eller overlevering av insulin." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je %1$@'s tijd is veranderd. %2$@ heeft nauwkeurige tijdsregistraties nodig om voorspellingen te doen over je glucose en dienovereenkomstig je insuline aan te passen.\n\nControleer in je %1$@ Instellingen (Algemeen / Datum & Tijd) en controleer of 'Automatisch Instellen' is INGESCHAKKELD. Als dit niet wordt opgelost, kan dit leiden tot ernstig te weinig toediening of tot ernstige overmatige toediening van insuline." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Czas %1$@ został zmieniony. %2$@ potrzebuje dokładnych zapisów czasu, aby przewidywać poziom glukozy i odpowiednio dostosowywać poziom insuliny. \n\nSprawdź w ustawieniach %1$@ (Ogólne / Data i godzina) i upewnij się, że opcja „Ustaw automatycznie” jest WŁĄCZONA. Niepowodzenie w rozwiązaniu problemu może prowadzić do poważnego niedostatecznego lub nadmiernego podawania insuliny." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ora %1$@ dumneavoastră a fost schimbată. %2$@ are nevoie de înregistrări precise ale timpului pentru a face predicții despre glicemia și pentru a ajusta insulina în consecință. \n\nVerificați setările %1$@ (General / Data și Ora) și verificați dacă „Setare automată” este activată. Nerezolvarea poate duce la o administrare insuficientă sau excesivă de insulină." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Время вашего %1$@ было изменено. %2$@ нуждается в точном учете времени, чтобы делать прогнозы уровня глюкозы и соответствующим образом корректировать инсулин.\n\nПроверьте настройки %1$@ (Общие / Дата и время) и убедитесь, что опция \"Устанавливать автоматически\" включена. Невыполнение этого требования может привести к серьезному дефициту или избытку инсулина." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 'inizin saati değiştirildi. %2$@ KŞ ile ilgili tahminlerde bulunmak ve insülininizi buna göre ayarlamak için doğru zaman kayıtlarına ihtiyaç duyar. \n\n %1$@ Ayarlarınızı (Genel / Tarih ve Saat) kontrol edin ve 'Otomatik Olarak Ayarla' seçeneğinin AÇIK olduğunu doğrulayın. Çözülmemesi, insülinin ciddi şekilde yetersiz veya fazla verilmesine yol açabilir." + } + } + } + }, + "Your glucose is below %1$@. Are you sure you want to bolus?" : { + "comment" : "Format string for simple bolus screen warning when glucose is below glucose warning limit.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit glukose er under %1$@. Er du sikker på, at du ønsker at give bolus?" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Blutzucker liegt unter %1$@. Bist Du sicher, dass Du einen Bolus abgeben möchtest?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu glucosa está por debajo de %1$@. ¿Estás seguro de que deseas administrar un bolo?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre glycémie est inférieure à %1$@. Êtes-vous sûr de vouloir administrer un bolus?" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז שלך נמוך מ-%1$@. בטוח שברצונך להזריק בולוס?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia è inferiore a %1$@. Sei sicuro di voler fare il bolo?" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkeret ditt er under %1$@ . Er du sikker på at du vil gi bolus?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je glucose is lager dan %1$@. Weet je zeker dat je een bolus wilt toedienen?" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twój poziom glukozy jest poniżej %1$@ . Czy na pewno chcesz podać bolus?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia dumneavoastră este sub %1$@. Sunteți sigur/ă că doriți să bolusați?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш уровень глюкозы ниже %1$@. Вы уверены, что хотите ввести болюс?" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ %1$@ altında. Bolus yapmak istediğinizden emin misiniz?" + } + } + } + }, + "Your glucose is below or predicted to go below your glucose safety limit, %@." : { + "comment" : "Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit blodsukker er under eller forventes at ligge under din blodsukkersikkerhedsgrænse, %@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Blutzucker liegt unter Deiner Sicherheitsgrenze %@ oder wird voraussichtlich unter diese fallen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu nivel de glucosa está por debajo o se prevé que vaya a estar por debajo de tu límite de seguridad de glucosa, %@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosi on alle tai sen ennustetaan alittavan glukoosin turvarajan %@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre glycémie est en-dessous ou prévue pour aller en dessous de votre limite de sécurité de glycémie, %@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז שלך נמוך או חזוי להיות נמוך מגבול הביטחון, %@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La tua glicemia è inferiore o si prevede che scenderà al di sotto del limite di sicurezza della glicemia, %@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkeret ditt er under eller forventes å gå under BS-sikkerhetsgrensen din, %@." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je glucose is onder of zal naar verwachting onder je glucoseveiligheidslimiet komen, %@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twój poziom glukozy jest poniżej lub przewiduje się, że spadnie poniżej granicy bezpieczeństwa, %@." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia ta este sub sau se anticipează că va scădea sub limita de siguranță, %@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш уровень глюкозы ниже или прогнозируется, что он будет ниже безопасного предела глюкозы, %@." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ditt blodsocker är lägre än eller förväntas bli lägre än ditt inställda tröskelvärde, %@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ güvenlik sınırınızın %@ altındadır veya altına düşeceği tahmin edilmektedir." + } + } + } + }, + "Your glucose is below your glucose safety limit, %1$@." : { + "comment" : "Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit blodsukker ligger under din blodsukkersikkerhedsgrænse, %1$@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Blutzucker liegt unter Deiner Sicherheitsgrenze von %1$@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu glucosa está por debajo del límite de seguridad de glucosa, %1$@." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosi on alle glukoosin turvarajan %1$@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre glycémie est inférieure au seuil de suspension, %1$@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז שלך נמוך מגבול הביטחון %1$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La tua glicemia è al di sotto del limite di sicurezza, %1$@ ." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din glukose er under din glukosesikkerhetsgrense, %1$@." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je glucose is onder je glucoseveiligheidslimiet, %1$@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twój poziom glukozy jest poniżej granicy bezpieczeństwa, %1$@." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia ta este sub limita de siguranță, %1$@." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш уровень глюкозы ниже безопасного предела глюкозы, %1$@." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ditt blodsocker är lägre än ditt tröskelvärde, %1$@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ güvenlik sınırınızın altında, %1$@ ." + } + } + } + }, + "Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." : { + "comment" : "Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dit glukose er lavt. Spis kulhydrater, og overvej at vente med at give bolus, indtil dit glukoseniveau er i et sikkert område." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Blutzucker ist niedrig. Iss Kohlenhydrate und erwäge, mit dem Bolus zu warten, bis Dein Blutzucker in einem sicheren Bereich liegt." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tu glucosa está baja. Come carbohidratos y considera esperar para administrar el bolo hasta que tu glucosa esté en un rango seguro." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre glycémie est basse. Mangez des glucides et envisagez d'attendre pour le bolus jusqu'à ce que votre glycémie se situe dans une plage sûre." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז שלך נמוך. אכול פחמימות ושקול להמתין עם הבולוס עד שהגלוקוז יגיע לטווח בטוח." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La tua glicemia è bassa. Mangia carboidrati e valuta di aspettare il bolo finché la glicemia non torna a un intervallo sicuro." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din glukose er lav. Spis karbohydrater og vurder å vente med bolus til glukosen er innenfor et trygt område." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je glucose is laag. Eet koolhydraten en overweeg te wachten met een bolus totdat je glucose binnen een veilig bereik is." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twój poziom glukozy jest niski. Zjedz węglowodany i rozważ odczekanie z podaniem bolusa, aż poziom glukozy znajdzie się w bezpiecznym zakresie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia dumneavoastră este scăzută. Consumați carbohidrați și luați în considerare posibilitatea de a aștepta să faceți un bolus până când glicemia se află într-un interval sigur." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "У вас низкий уровень глюкозы. Ешьте углеводы и подумайте о том, чтобы подождать с болюсом, пока уровень глюкозы не достигнет безопасного диапазона." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ düşük. Karbonhidrat yiyin ve KŞ güvenli bir aralığa gelene kadar bolus yapmayı erteleyin." + } + } + } + }, + "Your glucose is low. Eat carbs and monitor closely." : { + "comment" : "Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din glukose er lav. Spis kulhydrater og overvåg nøje." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein Blutzucker ist niedrig. Kohlenhydrate essen und genau beobachten." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tienes la glucosa baja. Come carbohidratos y vigílalo de cerca." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre glycémie est basse. Mangez des glucides et surveillez de près." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הגלוקוז שלך נמוך. אכול פחמימות ועקוב מקרוב." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La tua glicemia è bassa. Mangia carboidrati e monitora attentamente." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din glukose er lav. Spis karbohydrater og følg nøye med." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je glucose is laag. Eet koolhydraten en houd alles nauwlettend in de gaten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twój poziom glukozy jest niski. Zjedz węglowodany i uważnie monitoruj poziom glikemii." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia dumneavoastră este scăzută. Mâncați carbohidrați și monitorizați cu atenție." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "У вас низкий уровень глюкозы. Съешьте углеводы и внимательно следите за состоянием здоровья." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ düşük. Karbonhidrat yiyin ve yakından izleyin." + } + } + } + }, + "Your maximum bolus amount is %1$@." : { + "comment" : "Warning for simple bolus when max bolus is exceeded. (1: maximum bolus)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din maksimale bolusmængde er %1$@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deine maximale Bolusmenge beträgt %1$@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Su cantidad máxima de bolo es %1$@ ." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantité maximum de votre bolus est de %1$@ U." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות הבולוס המקסימלית שלך היא %1$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La quantità massima consentita del tuo bolo è %1$@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din maksimale bolusmengde er %1$@ ." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je maximale bolushoeveelheid is %1$@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twoja maksymalna wielkość bolusa to %1$@ ." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Valoarea maximă a bolusului este %1$@ ." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваш максимальный объем болюса составляет %1$@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maksimum bolus miktarınız %1$@ ." + } + } + } + }, + "Your pump data is stale. %1$@ cannot recommend a bolus amount." : { + "comment" : "Caption for bolus screen notice when pump data is missing or stale", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dine pumpedata er forældede. %1$@ kan ikke anbefale en bolusmængde." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deine Pumpendaten sind veraltet. %1$@ kann keine Bolusmenge empfehlen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los datos de su bomba están obsoletos. %1$@ no puede recomendar una cantidad de bolo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données de votre pompe ne pas sont à jour. %1$@ ne peut pas faire de recommandation de bolus." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מידע מהמשאבה שלך מיושן. %1$@ לא יכול להמליץ על כמות בולוס." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati della pompa sono obsoleti. %1$@ non può consigliare un bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpedataene er foreldede. %1$@ kan ikke anbefale en bolusmengde." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je pompgegevens zijn verouderd. %1$@ kan geen bolushoeveelheid aanbevelen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane Twojej pompy są nieaktualne. %1$@ nie może zalecić wielkości bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datele pompei dumneavoastră sunt învechite. %1$@ nu poate recomanda o cantitate de bolus." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные вашей помпы устарели. %1$@ не может рекомендовать количество инсулина." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa verileriniz eski. %1$@ bir bolus miktarı öneremez." + } + } + } + }, + "Your pump is delivering a manual temporary basal rate." : { + "comment" : "The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din pumpe leverer en manuel midlertidig basalrate." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deine Pumpe liefert eine manuelle temporäre Basalrate." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Su bomba está suministrando una tasa basal temporal manual." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre pompe délivre un débit basal temporaire manuel." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "המשאבה שלך מזליפה בזאלי ידני זמני." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La pompa sta erogando una velocità basale temporanea manuale." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpen leverer en manuell midlertidig basaldose." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je pomp geeft een handmatig ingestelde tijdelijke basaalsnelheid af." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa podaje tymczasową dawkę podstawową ustawioną ręcznie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompa dumneavoastră furnizează o rată bazală temporară manuală." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ваша помпа вводит ВБС вручную." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompanız manuel bir geçici bazal oran veriyor." + } + } + } + }, + "Your recommended bolus exceeds your maximum bolus amount of %1$@." : { + "comment" : "Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Din anbefalede bolus overstiger din maksimale bolusmængde på %1$@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der empfohlene Bolus übersteigt die maximale Bolus von %1$@." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Su bolo recomendado excede su cantidad máxima de bolo de %1$@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Votre bolus recommandé dépasse votre bolus maximum de %1$@." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הבולוס המומלץ עבורך גבוה מכמות הבולוס המקסימלית של %1$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il bolo raccomandato supera la quantità del bolo massimo di %1$@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Den anbefalte bolusen overskrider den maksimale bolusmengden på %1$@ ." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je aanbevolen bolus overschrijdt je maximale bolushoeveelheid van %1$@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Twój zalecany bolus przekracza maksymalną wartość bolusa wynoszącą %1$@ ." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusul recomandat depășește cantitatea maximă de bolus de %1$@ ." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый вами объем болюса превышает лимит подачи болюса %1$@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen bolus miktarı, maksimum bolus miktarınız olan %1$@ değerini aşıyor." + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop/ar.lproj/InfoPlist.strings b/Loop/ar.lproj/InfoPlist.strings deleted file mode 100644 index be734bf6e0..0000000000 --- a/Loop/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,21 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "يستخدم البلوتوث للتواصل مع مضخة الأنسولين وأجهزة متابعة سكر الدم المستمرة."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "يستخدم البلوتوث للتواصل مع مضخة الأنسولين وأجهزة متابعة سكر الدم المستمرة."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "تستخدم هوية التعرف على الوجه للتحقق من أجل جرعة الأنسولين."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "يتم استخدام بيانات الوجبات من قواعد بيانات تطبيق صحتي لتحديد تأثيرات سكر الدم. يتم استخدام بيانات سكر الدم منقواعد بيانات تطبيق صحتي للرسم البياني والتحليل. تُستخدم بيانات النوم من قواعد بيانات تطبيق صحتي لتحسين توصيل تحديثات تعقيدات ساعة أبل أثناء فترة استيقاظك."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "بيانات كربوهيدرات الوجبة المدخلة للتطبيق و الساعة محفوظة في قواعد بيانات تطبيق صحتي. يتم تخزين بيانات سكر الدم المستردة من نظام متابعة سكر الدم المستمرة بشكل آمن في تطبيق صحتي."; - diff --git a/Loop/ar.lproj/Localizable.strings b/Loop/ar.lproj/Localizable.strings deleted file mode 100644 index e68508d647..0000000000 --- a/Loop/ar.lproj/Localizable.strings +++ /dev/null @@ -1,438 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (قيد الانتظار: %@)"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "—"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ استغرق"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ وحدة بشكل كامل"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/وحدة"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ وحدة متبقية"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ وحدة متبقية: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ وحدة/ساعة @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 دقيقة معامل انحدار قراءات سكر الدم (b₁), ويستمر بالاضمحلال خلال 30 دقيقة"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 دقيقة مقارنة قراءات سكر الدم المتوقعة والفعلية , ويستمر بالاضمحلال خلال 60 دقيقة"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "نموذج يستند على امتصاص أنسولين Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "نموذج يستند على امتصاص أنسولين Humalog و Novolog و Apidra لدى البالغين."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "استخدم قيمة الجرعة الموصى بها"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "الكربوهيدرات النشطة"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "الكربوهيدرات النشطة: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "كارب النشط"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "أنسولين نشط"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "الأنسولين النشط: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Add Carb Entry"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "إضافة CGM"; - -/* The label of the meal button */ -"Add Meal" = "إضافة وجبة"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "إضافة مضخة"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "هل أنت متأكد أنك تريد حذف هذا CGM؟"; - -/* Format fragment for a specific time */ -"at %@" = "في %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "المصادة على ضخ %@ وحدات"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "جدول الضخ المستمر"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "الضخ المستمر"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "تم ضخ %1$@ من %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "يضخ %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "إلغاء"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "إلغاء الجرعة"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "تأثيرات الكارب"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "معاملات الكارب"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Add Carb Entry"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "الكربوهيدرات"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "الكارب الذي تم امتصاصه (جرام) ÷ معامل الكارب (جرام لكل وحدة) × حاسية الأنسولين (%1$@/وحدة)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "قم بتغيير بطارية المضخة على الفور"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "قم بتغيير خزان المضخة الآن"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "تأكد من الإعدادات"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "تأكد أن المضخة في النطاق"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "تأكد من مصدر قراءات السكر المستمرة"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "حلقة مغلقة"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "موافق"; - -/* The title of the configuration section in settings */ -"Configuration" = "المعطيات"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "خطأ في المعطيات: %1$@"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "نظام متابعة السكر المستمرة"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "نطاق التصحيح"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "قراءة سكر الدم %1$@ أقل من نطاق التصحيح."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "تجاوز مخصص"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* Button title to delete CGM */ -"Delete CGM" = "حذف CGM"; - -/* Title text for delivery limits */ -"Delivery Limits" = "حدود الضخ"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "تعطيل"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "تجاهل"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "تفعيل"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "أدخل حد التوقف"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "خطأ في إلغاء الجرعة"; - -/* The alert title for a resume error */ -"Error Resuming" = "خطأ في الاستئناف"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "في النهاية %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "يتجاوز أقصى جرعة"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "لمدة %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "قراءات السكر"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "قراءات السكر منذ %1$@ "; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "قراءات السكر غير متوفرة"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "مقاومة سكر الدم"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "إلى أجل غير مسمى"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "الأنسولين"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "الأنسولين الذي تم امتصاصه (وحدات) × حساسيو الأنسولين (%1$@/وحدة)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "توصيل الأنسولين"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "تأثيرات الأنسولين"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "نوع الأنسولين"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "حساسية الأنسولين"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "بيانات غير صالحة: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "تقرير المشكلة"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "قم بتشغيل تطبيق نظام متابعة سكر الدم المستمرة"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "تحميل..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "فشل في الحلقة المغلقة"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "لم تتم الحلقة المغلقة بنجاح منذ %@"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "بيانات مفقودة: %1$@"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "تأثيرات النشاط"; - -/* The title of the Nightscout service */ -"Nightscout" = "نايتسكاوت"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "لا يوجد أجهزة متصلة, أو يوجد خطأ أثناء الاتصال"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "موافق"; - -/* Notification Setting Status is On */ -"On" = "On"; - -/* The title text for the override presets */ -"Override Presets" = "تخطي الإعدادات المسبقة"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "أهداف ما قبل الوجبة"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "قراءاة سكر الدم بعد %1$@ هي %2$@."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "قراءة سكر الدم المتوقعة %1$@ أقل من قيمة تعليق الضخ في الإعدادات."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "التوقع: %1$@\nالواقع: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "المضخة"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "بطارية المضخة منخفضة"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "بيانات المضخة منذ %1$@ "; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "إدارة المضخة"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "خزان المضخة منتهي"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "خزان المضخة منخفض"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "تم إيقاف الضخ مؤقتا"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "التأثيرالسريع - كبار"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "التأثيرالسريع - أطفال"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "انتهت صلاحية التوصية منذ: %1$@ "; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "الضخ المستمر المقترح"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "الجرعة الموصى بها: %@ وحدات"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "الخزان"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "التصحيح بأثر رجعي"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "أعد المحاولة"; - -/* The title of the services section in settings */ -"Services" = "الخدمات"; - -/* The label of the settings button */ -"Settings" = "الإعدادات"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "يظهر خطأ الحلقه الاخير"; - -/* Format fragment for a start time */ -"since %@" = "منذ %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "رابط الموقع"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "يبدأ من %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "بدء الجرعة"; - -/* The title text in settings */ -"Suspend Threshold" = "قيمة التعليق"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "انقر للاستئناف"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "النموذج المستخدم بالتطبيق، يسمح بتخصيص مدة الفعالية."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "الحد الأقصى للجرعة هو %@ وحدات"; - -/* The short unit display string for international units of insulin */ -"U" = "وحدة"; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Unknown"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "خطأ غير معروف"; - -/* The format for the description of a temporary override end date */ -"until %@" = "حتى %@"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "استخدم أهداف قراءات سكر الدم للتمارين"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "عندما تكون قراءات السكر الحالية أو المتوقعة أقل من قيمة التعليق المؤقت ، لن يوصي التطبيق بجرعة، وسيوصي دائمًا بمعدل ضخ مؤقت يبلغ 0 وحدة في الساعة."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "أهداف التمارين"; - diff --git a/Loop/ar.lproj/Main.strings b/Loop/ar.lproj/Main.strings deleted file mode 100644 index 48a731f79d..0000000000 --- a/Loop/ar.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "الحالة"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 وحدة/ساعة @ 12:12 مساء"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "تنبأ"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "تفاصيل"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Label"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "تغير قراءات السكر"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g المجموع"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Label"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "في النهاية 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "مُلاحظ"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 وحدة/ساعة @ 12:12 مساء"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "تأثيرات الكربوهيدرات"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "التغيرات الملاحظة على سكر الدم وتغيرات الخصم المشكل من توصيل الأنسولين بالإمكان استخدامها لتقدير امتصاص الكربوهيدرات."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "تفاصيل"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "الضخ المستمر المقترح"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Label"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "سكر الدم المتوقع"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "في النهاية 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g كارب نشط"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "قراءات السكر"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Label"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "الكربوهيدرات"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "الضخ المستمر المقترح"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "عنوان"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/cs.lproj/Localizable.strings b/Loop/cs.lproj/Localizable.strings deleted file mode 100644 index 5437a77c22..0000000000 --- a/Loop/cs.lproj/Localizable.strings +++ /dev/null @@ -1,94 +0,0 @@ -/* remaining time in setting's profile expiration section */ -" remaining" = "zbývající"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Settings app profile section */ -"App Profile" = "Profil"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Opravdu chcete tuto službu smazat?"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Úrovně bazálu"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Zrušit"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfigurace"; - -/* Default alert dismissal */ -"Continue" = "Pokračovat"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritická upozornění"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Smazat účet"; - -/* Button title to delete a service */ -"Delete Service" = "Smazat službu"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limity podávání"; - -/* No comment provided by engineer. */ -"Done" = "Hotovo"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Opravit nyní zapnutím Oznámení, Kritických upozornění a Časově citlivých oznámení."; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glukóza"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Jak aktualizovat (LoopDocs)"; - -/* Insulin type label */ -"Insulin Type" = "Typ inzulínu"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Notification Setting Status is Off */ -"Off" = "Vypnuto"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Zapnuto"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Vypršení platnosti profilu"; - -/* Time that profile expires */ -"Profile expires " = "Platnost profilu vyprší"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Zkusit znovu"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL adresa webu"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Neznámá chyba: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Neznámý čas"; - diff --git a/Loop/cs.lproj/Main.strings b/Loop/cs.lproj/Main.strings deleted file mode 100644 index 8b1faf67aa..0000000000 --- a/Loop/cs.lproj/Main.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glukóza"; - diff --git a/Loop/da.lproj/InfoPlist.strings b/Loop/da.lproj/InfoPlist.strings deleted file mode 100644 index ec4d258296..0000000000 --- a/Loop/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - NFC Scan Usage Description */ -"NFCReaderUsageDescription" = "Appen bruger NFC til at parre sig med diabetesapparater."; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth bliver brugt til at kommunikere med din insulinpumpe og din glukosemonitor."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Kamera bruges til at scanne stregkoder på enheder."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID bliver brugt til at godkende en insulinbolus."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Måltidsdata fra Apple Health bliver brugt til at glukosens effekt på dit blodsukker. Glukose data fra Apple Health bliver brugt til at danne grafer og udregninger."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Data om kulhydratmåltider, der indtastes i appen og på uret, gemmes i Apples Health-database. Glukosedata, der hentes fra CGM'en, gemmes sikkert i HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop bruger Siri til at give dig mulighed for at udføre forudindstillinger med din stemme."; - diff --git a/Loop/da.lproj/Localizable.strings b/Loop/da.lproj/Localizable.strings deleted file mode 100644 index 9e1de67566..0000000000 --- a/Loop/da.lproj/Localizable.strings +++ /dev/null @@ -1,1315 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (afventer: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "Før-måltid forudindstillinger"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " tilbage"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = " Sikkerhedsmeddelelser er SLÅET FRA"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "Motion forudindstilling"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ optaget"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ tilbage"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ E Total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ kunne ikke annullere din nuværende midlertidige basalrate, som er højere end den nye Max basalgrænse, du har indstillet. Dette kan resultere i en højere insulintilførsel end ønsket.\n\nOvervej at suspendere insulintilførslen manuelt og derefter straks genoptage den for at iværksætte basaltilførslen med den nye grænse på plads."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/E"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* App sounds title text (1: app name) */ -"%1$@ APP SOUNDS" = "%1$@ APP LYDE"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ kører med Lukket Loop i positionen OFF. Din pumpe og CGM fortsætter med at fungere, men appen justerer ikke doseringen automatisk."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ kan ikke slette advarslen fra din enhed"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ kan ikke kommunikere med insulinpumpen. Loop vil fortsætte med at forsøge at kommunikere med din pumpe, men insulinafgivelsesoplysninger kan ikke opdateres og ingen automatisering kan fortsætte.\nDu kan vente et par minutter for at se, om problemet bliver løst, eller tryk på knappen nedenfor for at få mere at vide om andre muligheder."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Tidsindstillinger kræver opmærksomhed"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ E"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ E tilbage"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ E tilbage: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ E/time @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ holder op med at fungere i %2$@. Du bliver nødt til at rebuilde før det."; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ holder op med at fungere i %2$@. Du skal opdatere inden da med en ny provisioneringsprofil."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min. glukoseregressionskoefficient (b₁), fortsætter med henfald over 30 minutter."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min. sammenligning af glukose-forudsigelse kontra faktisk målt glukose, med henfald over 60 minutter."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Et par sekunder tilbage"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "En manuel blodsukkerindtastning skal være mellem %1$@ og %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "En manuel glukoseindtastning skal være mellem %1$@ og %2$@"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "En model baseret på publiceret data om absorption af Fiasp insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "En model baseret på publiceret data om absorption Humalog, Novolog, og Apidra insulin hos voksne."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "En ny version af %@ er tilgængelig og anbefales for at fortsætte med at bruge appen."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "En ny version af %@ er tilgængelig."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "En pumpe skal være konfigureret, før en bolus kan leveres."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AccepterAnbefaletBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktive kulhydrater"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktive kulhydrater: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktive kulhydrater"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktivt insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktiv insulin: %@"; - -/* No comment provided by engineer. */ -"Add a new favorite food" = "Tilføj en ny favoritmad"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Tilføj kulhydrater"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Tilføj CGM"; - -/* The label of the meal button */ -"Add Meal" = "Tilføj måltid"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Tilføj pumpe"; - -/* Title text for button to set up a service */ -"Add Service" = "Tilføj tjeneste"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Justeret for"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Administration af advarsler"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Alarmtilladelser"; - -/* Alert Permissions descriptive text */ -"Alert Permissions and Mute Alerts" = "Advarselstilladelser og dæmpede advarsler"; - -/* Navigation title for algorithms experiments screen -The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Algoritme-eksperimenter"; - -/* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Algoritmeeksperimenter er valgfrie ændringer af Loop-algoritmen. Disse ændringer er mindre testet end standard Loop-algoritmen, så brug venligst omhyggeligt."; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Indstillinger for algoritme"; - -/* Warning text for when alerts are muted */ -"All Alerts Muted" = "Alle alarmer er slået fra"; - -/* Label for when mute alert will end */ -"All alerts muted until" = "Alle advarsler er slået fra indtil"; - -/* No comment provided by engineer. */ -"All Favorites" = "Alle favoritter"; - -/* Label for carb quantity entry row on carb entry screen */ -"Amount Consumed" = "Forbrugt mængde kulhydrater"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "En aktiv Override ændrer dit kulhydratforhold og din insulinfølsomhed. Hvis du ikke ønsker, at dette skal påvirke din bolusberegning og dit forventede glukose, kan du overveje at slå Override fra."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Der opstod en fejl under forsøget på at gemme kulhydratindtastning."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Der opstod en fejl under forsøget på at gemme en manuel blodsukkerindtastning."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Der er opstået en uventet fejltilstand i forbindelse med onboarding."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "En opdateret bolusanbefaling er tilgængelig."; - -/* The title of the amplitude API key credential */ -"API Key" = "API nøgle"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API kodeord"; - -/* Settings app profile section */ -"App Profile" = "App-profil"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Er du sikker på at du vil slette alle gamle indtastninger?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Er du sikker på, at du vil slette alle logget dosis?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Er du sikker på at du vil slette alle reservoirværdier?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Er du sikker på, at du vil slette alle dine %@ data?\n(Denne handling kan ikke fortrydes)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Er du sikker på, at du vil slette denne CGM?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete this food?" = "Er du sikker på, at du vil slette denne mad?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Er du sikker på, du vil slette denne service?"; - -/* Format fragment for a specific time */ -"at %@" = "at %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Godkend bolus af %@ Enheder"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Godkend for at logge %@ enheder"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basalrateskema"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basalrater"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Baseret på din forventede glukose anbefales ingen bolus."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth slået fra"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth ikke tilgængelig"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Advarsel om Bluetooth slået fra"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Bluetooth er ikke tilgængelig"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Bolusproblem"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Bolusanbefaling opdateret"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolus-resumé"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus for lille"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolus %1$@ af %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolus %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Annuller"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Annullerer bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Kulhydrateffekter"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Indtast kulhydrater"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Tidsplan for kulhydratforhold"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Kulhydratforhold"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Tilføj kulhydrater"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Kulhydratindtastning for stor"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Kulhydrater"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Kulhydrater absorberet (g) ÷ Kulhydratratio (g/E) × Insulinfølsomhed (%1$@/E)"; - -/* No comment provided by engineer. */ -"Caution" = "Forsigtig"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Udskift pumpebatteri omgående"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Skift pumpereservoir nu"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Kontroller indstillinger"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Kontroller, at din pumpe er indenfor rækkevidde"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Kontroller din CGM-datakilde"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Tjek din enheds tid og/eller fjern ugyldige data fra Apple Health."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Vælg en længere absorptionstid ved større måltider, eller dem med fedt og proteiner. Det er blot hjælp til algoritmen og behøver ikke være nøjagtig."; - -/* No comment provided by engineer. */ -"Choose Favorite:" = "Vælg favorit:"; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Luk"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Lukket Loop"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Lukket loop FRA"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Lukket Loop kræver en aktiv CGM sensor-session"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Lukket Loop kræver, at opsætningen er fuldført"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "d %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "siden %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Fuldfør opsætning"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfiguration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Konfigurationsfejl: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Fortsæt"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Kontinuerlig Blodsukker Måler (CGM)"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Korrektionsområde"; - -/* Format string for title of reset loop alert. (1: App name) */ -"Could Not Restart %1$@" = "Kunne ikke genstarte %1$@"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritiske advarsler"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Kritisk begivenhedslog klar"; - -/* Critical event log export title */ -"Critical Event Logs" = "Kritisk begivenhedslog"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Kritisk begivenhedslogs kunne ikke eksporteres."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Nuværende blodsukker"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Den aktuelle glukose for %1$@ er under korrektionsområdet."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Brugerdefineret Override"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Brugerdefineret forudindstilling"; - -/* Date picker label */ -"Date" = "Dato"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Slet"; - -/* No comment provided by engineer. */ -"Delete “%@”?" = "Slet \"%@\"?"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Slet konto"; - -/* Button title to delete all objects */ -"Delete All" = "Slet alle"; - -/* Button title to delete CGM */ -"Delete CGM" = "Slet CGM"; - -/* No comment provided by engineer. */ -"Delete Food" = "Slet mad"; - -/* Button title to delete a service */ -"Delete Service" = "Slet service"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Slet CGM testdata"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Slet testdata"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Slet testdata for pumpe"; - -/* Button text to deliver a bolus */ -"Deliver" = "Afgiv"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Insulingrænser"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diabetesbehandling"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Havde du til hensigt at angive %1$@ gram som mængden af kulhydrater for dette måltid?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Deaktiverer"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Afvis"; - -/* No comment provided by engineer. */ -"Done" = "Udført"; - -/* Title for card to log dose */ -"Dose Summary" = "Resumé af dosis"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Dosingstrategi"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Varigheden overstiger: %1$.1f timer"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Aktiver \nbluetooth"; - -/* Title for Glucose Based Partial Application toggle */ -"Enable Glucose Based Partial Application" = "Aktivér Glucose Based Partial Application"; - -/* Title for Integral Retrospective Correction toggle */ -"Enable Integral Retrospective Correction" = "Aktivér Integral Retrospective Correction"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Aktiverer"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Indtast blodsukker fra en fingerprikmåling for at få anbefalet en bolusmængde."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Indtast bolus"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Indtast fingerprikmåling"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Indtast glucosesikkerhedsgrænse"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Indtast grænse for suspendering"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Fejl ved annullering af bolus"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Der opstod en fejl under eksport af log"; - -/* The alert title for a resume error */ -"Error Resuming" = "Fejl ved genoptagelse"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Hændelseshistorik"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Med tiden %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Overskrider den maksimalt tilladte bolus i indstillingerne"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Overskrider det maksimalt tilladte antal kulhydrater"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Overskrider maksimal bolus"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Eksportér kritisk begivenhedslog"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Eksport-%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Kunne ikke genoptage insulintilførsel"; - -/* No comment provided by engineer. */ -"FAVORITE FOODS" = "FAVORIT-MAD"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Fingerprik blodsukker"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Løs nu ved at slå meddelelser, kritiske advarsler og tidsfølsomme meddelelser TIL."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "I %1$@"; - -/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ -"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Af sikkerhedsmæssige årsager bør du tillade, at Kritiske advarsler, Tidsfølsomme og Meddelelser (ikke-kritiske advarsler) på din enhed fortsætter med at bruge %1$@ og ikke kan slå individuelle alarmer fra."; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Forventet blodsukker kan stadig være højere end målområdet."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Forventet blodsukker"; - -/* Label for link to see frequently asked questions */ -"Frequently asked questions about alerts" = "Ofte stillede spørgsmål om påmindelser"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Få hjælp til advarselstilladelser"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glukose"; - -/* Title for glucose based partial application experiment description -Title of glucose based partial application experiment */ -"Glucose Based Partial Application" = "Glucose Based Partial Application"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Blodsukkerdata er %1$@ gamle"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Blodsukkerdata ikke tilgængelige"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Blodsukkerdata er nu tilgængelige"; - -/* Description of the prediction input effect for suspension of insulin delivery */ -"Glucose effect of suspending insulin delivery" = "Glukoseeffekt ved afbrydelse af insulintilførsel"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Blodsukkerværdi er uden for intervallet"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Blodsukkermomentum"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Tidsplan for glukosemålområde"; - -/* No comment provided by engineer. */ -"HARDWARE SOUNDS" = "HARDWARE-LYDE"; - -/* No comment provided by engineer. */ -"High Glucose" = "Høj glukose"; - -/* No comment provided by engineer. */ -"How can I silence non-Critical Alerts?" = "Hvordan kan jeg slå ikke-kritiske alarmer fra?"; - -/* No comment provided by engineer. */ -"How can I silence only Time Sensitive and Non-Critical alerts?" = "Hvordan kan jeg kun slå lyden fra for tidsfølsomme og ikke-kritiske advarsler?"; - -/* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Hvordan kan jeg midlertidigt slå lyden fra for alle %1$@ applyde?"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Sådan opdaterer du (LoopDocs)"; - -/* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Hvis iOS-fokustilstand er slået TIL, og Slå lyden fra-advarsler er slået fra, leveres kritiske advarsler stadig, og ikke-kritiske advarsler slås fra, indtil %1$@ føjes til hver fokustilstand som en tilladt app."; - -/* Immediate Delivery status text */ -"Immediate" = "Akut"; - -/* Algorithm Experiments description second paragraph. */ -"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "I fremtidige versioner af Loop kan disse eksperimenter ændre sig, ende som standarddele af Loop-algoritmen eller blive fjernet helt fra Loop. Følg med i Loop Zulip-chatten for at holde dig informeret om mulige ændringer af disse funktioner."; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Uendelig"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulin absorberet (E) × Insulinfølsomhed (%1$@/E)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Insulinjusteringer er blevet deaktiveret!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulintilførsel"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulineffekter"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulinmodel"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Insulinpumpe"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulinfølsomheder"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Insulinfølsomhed tidsplan"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insulin suspenderet"; - -/* Insulin type label */ -"Insulin Type" = "Insulintype"; - -/* Title for integral retrospective correction experiment description -Title of integral retrospective correction experiment */ -"Integral Retrospective Correction" = "Integral Retrospective Correction"; - -/* Description of Integral Retrospective Correction toggle. */ -"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Integral Retrospective Correction (IRC) er en udvidelse af standard Retrospective Correction (RC) algoritmekomponent i Loop, som justerer prognosen baseret på historikken med uoverensstemmelser mellem forudsagte og faktiske glukoseniveauer.\n\nI modsætning til RC, der ser på uoverensstemmelser i løbet af de sidste 30 minutter, med IRC, tilføjes historikken over uoverensstemmelser over tid. Så fortsatte positive uoverensstemmelser over tid vil resultere i øget dosering. Hvis uoverensstemmelserne er negative over tid, vil Loop reducere doseringen yderligere."; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Afbrudt %1$@: %2$@ af %3$@ %4$@"; - -/* Carb error description: invalid absorption time. (1: Input duration in hours). */ -"Invalid absorption time: %1$@ hours" = "Ugyldig absorptionstid: %1$@ timer"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Ugyldig bolusmængde"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Ugyldig kulhydratmængde"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Fejlagtige data: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Ugyldig fremtidig glukose"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Ugyldig glukoseaflæsning med et tidsstempel, der er %1$@ i fremtiden"; - -/* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Kritiske iOS-advarsler og tidsfølsomme advarsler er typer Apple-meddelelser. De bruges til begivenheder med høj prioritet. Nogle eksempler inkluderer:"; - -/* No comment provided by engineer. */ -"IOS FOCUS MODES" = "iOS-FOKUSTILSTANDE"; - -/* The title text for the issue report cell */ -"Issue Report" = "Fejlrapport"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Det ser ud til, at du måske ikke har indtastet et måltid, du har spist. Tryk for at logge det nu."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Stort måltid indtastet"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Åbner CGM app’en"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Lær mere"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Mindre end 1 minut tilbage"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Indlæser..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Log dosis"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Logget insulindosis"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop er crashet"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop-fejl"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop har opdaget et problem med dine Bluetooth-indstillinger, og fungerer ikke korrekt, før Bluetooth er aktiveret. Du vil ikke få blodsukkeraflæsninger eller være i stand til at give bolus."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop har opdaget et overset måltid og vurderet dets størrelse. Rediger mængden af kulhydrater, så den svarer til mængden af kulhydrater, du har spist."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop har ikke kørt korrekt i %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop vil automatisk give bolus, når insulinbehov er over planlagt basal, og vil bruge midlertidige basalrater, når det er nødvendigt for at reducere insulinlevering under planlagt basal."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop vil ikke fungere, før Bluetooth er aktiveret. Du vil ikke modtage glukoseaflæsninger eller være i stand til at give bolus."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop vil fastsætte midlertidige basalrater for at øge og reducere insulinafgivelse."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Lav glukose"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Administrer tilladelser i Indstillinger"; - -/* View title for how mute alerts work */ -"Managing Alerts" = "Administration af advarsler"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Manuel dosis: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Maksimal basalrate pr. time"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maksimal bolus"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Maksimal bolus overskredet"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Måltidsbolus"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Meddelelser om glemt måltid"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Manglende data: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Manglende maksimalt tilladt bolus i indstillingerne"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentumeffekter"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Mere Info"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Slå alle alarmer fra"; - -/* Title for mute alert duration selection action sheet */ -"Mute All Alerts Temporarily" = "Slå lyden fra for alle advarsler midlertidigt"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Handling påkrævet"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Negativ varighed ikke tilladt"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Message for mute alert duration selection action sheet */ -"No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Ingen advarsler eller alarmer lyder, mens lyden er slået fra. Vælg, hvor længe du vil slå lyden fra."; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Ingen bolus anbefalet"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Ingen tilsluttede enheder eller fejl under forbindelse til enhed"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Ingen maksimal bolus konfigureret"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Ingen pumpe konfigureret"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Ingen nyere glukose"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Ingen nylige glukosedata"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Ingen nyere pumpedata"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Nej, indstil mængde"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Notifikationsindstillinger"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "Notifikationer er indstillet til et Planlagt resumé i telefonens indstillinger.\n\nFor at undgå forsinkelser ved modtagelse af notifikarioner fra %1$@ anbefaler vi, at notifikationslevering er indstillet til øjeblikkelig levering."; - -/* Notifications Status text */ -"Notifications" = "Notifikationer"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Notifikationer forsinkede"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Meddelelser giver dig vigtige oplysninger om %1$@-appen uden at du behøver at åbne appen."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Meddelelser giver dig vigtige oplysninger om %1$@-appen, uden at du behøver at åbne appen.\n\nLad dem være aktiveret i telefonens indstillinger for at sikre, at du modtager %1$@-meddelelser, kritiske advarsler og tidsfølsomme meddelelser."; - -/* Notification Setting Status is Off */ -"Off" = "Slukket"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Åh nej! Loop gik ned under dosering, og insulinjusteringer er blevet sat på pause, indtil denne dialogboks er lukket. Doseringshistorikken er muligvis ikke nøjagtig. Gennemgå venligst insulintilførsindstillinger og overvåg dit blodsukker omhyggeligt."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Tændt"; - -/* The title text for the override presets */ -"Override Presets" = "Override forudindstillinger"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Muligt glemt måltid"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Før-måltid Mål"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Forventet glukose ved %1$@ er %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Den forventede glukose er inden for intervallet."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Det forventede glukoseindhold på %1$@ er under din indstilling af glukose-sikkerhedsgrænsen."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Forventet glukose på %1$@ er under din indstilling for suspenderingstærskel."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Forventet: %1$@\nFaktisk: %2$@ (%3$@)"; - -/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "prediction-description-integral-retrospective-correction"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Forbereder kritiske begivenhedslogs"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Profiludløb"; - -/* Time that profile expires */ -"Profile expires " = "Profil udløber "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profilen udløber snart"; - -/* The title of the pump section in settings */ -"Pump" = "Pumpe"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pumpebatteri lav"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pumpedata er %1$@ gammel"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pumpe-hændelse"; - -/* No comment provided by engineer. */ -"Pump Expired" = "Pumpen er udløbet"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pumpemanager"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Fejl i pumpemanager: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pumpereservoir tomt"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pumpereservoir lavt"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pumpe Pauset"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pumpen er suspenderet. Automatisk dosering er deaktiveret."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Hurtigt-virkende (Rapid) – Voksne"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Hurtigt-virkende (Rapid) – Børn"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Forslag udløbet: %1$@ gamle"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Anbefalet basal"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Anbefalet bolus"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Anbefalet bolus overstiger maksimal bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Foreslået bolus: %@ Enheder"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Fjernindtastning af bolus: %@ E"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Fjernindtastning af kulhydrater: %d gram"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* No comment provided by engineer. */ -"Reservoir Empty" = "Reservoir tomt"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Tilbagevirkende korrektion"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Forsøg igen"; - -/* No comment provided by engineer. */ -"Save" = "Gem"; - -/* No comment provided by engineer. */ -"Save as favorite food" = "Gem som favoritmad"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Gem uden at give bolus"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Planlagt"; - -/* No comment provided by engineer. */ -"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Hvis du vælger en favoritmad i kulhydratindtastningsskærmen, udfyldes felterne for kulhydratmængde, madtype og absorptionstid automatisk! Tryk på tilføj-knappen nedenfor for at oprette din første favoritmad!"; - -/* No comment provided by engineer. */ -"Sensor Failed" = "Sensorfejl"; - -/* The title of the services section in settings */ -"Services" = "Services"; - -/* The label of the settings button */ -"Settings" = "Indstillinger"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Opsætning ufuldstændig"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Viser sidste Loop-fejl"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Simpel bolusberegner"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Simpel måltidsberegner"; - -/* Format fragment for a start time */ -"since %@" = "siden %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Side-URL"; - -/* Software update button link text */ -"Software Update" = "Software-opdatering"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Starttidspunktet er uden for området: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "starter ved %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Starter bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Support"; - -/* The title text in settings */ -"Suspend Threshold" = "Pause grænseværdi"; - -/* Title of the prediction input effect for suspension of insulin delivery */ -"Suspension of Insulin Delivery" = "Afbryd insulintilførsel"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Tryk her for at konfigurere en CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Tryk her for at tilføje en pumpe"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Tryk her for at konfigurere en tjeneste"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Tryk for at tilføje"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Tryk for at Fortsætte"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Tryk for at stoppe"; - -/* Label for button to unmute all alerts */ -"Tap to Unmute Alerts" = "Tryk for at slå alarmer til"; - -/* The alert body for unmute alert confirmation */ -"Tap Unmute to resume sound for your alerts and alarms." = "Tryk på Slå lyden til for at genoptage lyden for dine alarmer og alarmer."; - -/* Settings app TestFlight section */ -"TestFlight" = "TestFlight"; - -/* Settings TestFlight expiration view */ -"TestFlight Expiration" = "TestFlight Udløber"; - -/* Time that build expires */ -"TestFlight expires " = "TestFlight udløber "; - -/* The title for notification of upcoming TestFlight expiration */ -"TestFlight Expires Soon" = "TestFlight udløber snart"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Den indtastede bolusmængde er mindre end den mindste leverbare mængde."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Bolusdoseringsalgoritmen bruger et mere konservativt skøn over det forventede blodsukker end det, der bruges til at justere din basalhastighed.\n\nSom følge heraf kan dit forventede blodglukose efter en bolus stadig være højere end dit målområde."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Bolusanbefalingen er opdateret. Bekræft venligst bolus."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Ældre model, der bruges af Loop, og som gør det muligt at tilpasse insulinens varighed."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "Den maksimalt tilladte mængde er %@ gram."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "Den maksimale tilladte mængde er %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Den maksimale bolus er %@ enheder."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Den maksimale bolusmængde er %@ enheder"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Maksimal bolus skal konfigureres, før en bolus kan leveres."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Behandlingsindstillinger"; - -/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Denne mulighed gælder kun, når Loops doseringsstrategi er indstillet til Automatisk bolus."; - -/* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Tidsfølsomme advarsler"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Tidsfølsomme meddelelser"; - -/* No comment provided by engineer. */ -"Transmitter Low Battery" = "Sender lavt batteri"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Prøv igen"; - -/* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Sluk for lydstyrken på din iOS-enhed eller føj %1$@ som en tilladt app til hver fokustilstand. Tidsfølsomme og kritiske advarsler lyder stadig, men ikke-kritiske advarsler slås fra."; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Slå bluetooth til for at modtage advarsler, alarmer eller blodsukkermålinger."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Kan ikke rydde en advarsel"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Kan ikke få kontakt til pumpen"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Kan ikke gemme kulhydrat indtastningen"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Det manuelt indtastet blodsukker kan ikke gemmes"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Kan ikke stoppe igangværende bolus. Flyt din iPhone tættere på pumpen og prøv igen. Tjek din historik for insulinafgivelse for detaljer og overvåg nøje dit blodsukkerniveau."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Ukendt"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Ukendt fejl: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Ukendt forudindstilling: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Ukendt tidspunkt"; - -/* The title of the action used to unmute alerts */ -"Unmute" = "Slå lyden til"; - -/* The alert title for unmute alert confirmation */ -"Unmute Alerts?" = "Slå alarmer til?"; - -/* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ -"Unsupported Notification Service: %1$@" = "Ikke-understøttet meddelelsestjeneste: %1$@"; - -/* The format for the description of a temporary override end date */ -"until %@" = "indtil %@"; - -/* indication of when alerts will be unmuted (1: time when alerts unmute) */ -"Until %1$@" = "Indtil %1$@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Indtil jeg indtaster kulhydrater"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Indtil jeg slukker"; - -/* No comment provided by engineer. */ -"Urgent Low" = "Kritisk lav"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Brug Før-måltid"; - -/* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Brug funktionen Mute Alerts. Den giver dig mulighed for midlertidigt at slå alle dine advarsler og alarmer fra via %1$@-appen, inklusive Kritiske advarsler og Tidsfølsomme advarsler."; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Anvend blodsukkermål for motion"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Brug forudindstillinger for motion"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Advarsel! Sikkerhedsmeddelelser er slået FRA"; - -/* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Hvad er eksempler på kritiske og tidsfølsomme alarmer?"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når den nuværende eller forventede blodsukker ligger under blodsukkersikkerhedsgrænsen, vil Loop ikke anbefale en bolus og vil altid anbefale en midlertidig basalrate på 0 enheder i timen."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når nuværende og forventet glukose er under suspenderingsgrænsen, vil Loop ikke anbefale en bolus, og vil altid anbefale en midlertidig basal rate på 0 enheder i timen."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Når aktiveret, kan Loop give dig besked, når den registrerer et måltid, som ikke er logget."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Når der ikke køres lukket Loop, bruger appen en forenklet bolusberegner som en typisk pumpe."; - -/* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Mens lydløse advarsler er slået til, vises alle advarsler fra din %1$@ app inklusive kritiske og tidsfølsomme advarsler midlertidigt uden lyde og vil kun vibrere."; - -/* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Mens lydløs alarm er slået til, kan din insulinpumpe og CGM-hardware stadig afgive lyd."; - -/* Format string for message of reset loop alert. (1: App name) (2: error description) */ -"While trying to restart %1$@ an error occured.\n\n%2$@" = "Under forsøg på at genstarte %1$@ opstod der en fejl.\n\n%2$@"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Motion Mål"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Træning Temp Adjust har været tændt i mere end 24 timer. Sørg for, at du stadig vil have den aktiveret, eller slå den fra i appen."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Træning Temp Justere stadig på"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Ja"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Du får muligvis ikke lyd-, visuelle eller vibrationsadvarsler om vigtige sikkerhedsoplysninger.\n\nFor at løse problemet skal du trykke på \"Indstillinger\" og sikre dig, at Meddelelser, Kritiske advarsler og Tidsfølsomme meddelelser er slået til."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Din %1$@'s tid er blevet ændret. %2$@ har brug for nøjagtige tidsregistreringer for at kunne forudsige din glukose og justere din insulin i overensstemmelse hermed.\n\nTjek i dine %1$@-indstillinger (Generelt / Dato og tid), og kontrollér, at \"Indstilles automatisk\" er slået til. Hvis dette ikke løses, kan det føre til alvorlig under- eller overlevering af insulin."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Dit glukose er under %1$@. Er du sikker på, at du ønsker at give bolus?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Dit blodsukker er under eller forventes at ligge under din blodsukkersikkerhedsgrænse, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Dit blodsukker ligger under din blodsukkersikkerhedsgrænse, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Dit glukose er lavt. Spis kulhydrater, og overvej at vente med at give bolus, indtil dit glukoseniveau er i et sikkert område."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Din glukose er lav. Spis kulhydrater og overvåg nøje."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Din maksimale bolusmængde er %1$@."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Dine pumpedata er forældede. %1$@ kan ikke anbefale en bolusmængde."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Din pumpe leverer en manuel midlertidig basalrate."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Din anbefalede bolus overstiger din maksimale bolusmængde på %1$@."; - diff --git a/Loop/da.lproj/Main.strings b/Loop/da.lproj/Main.strings deleted file mode 100644 index 37729a42db..0000000000 --- a/Loop/da.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 E/time @ 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Forventet"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detalje"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etiket"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Blodsukkerændring"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Total"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Fremtidige blodsukre er beregnet ved at kombinere effekterne af mange inputs. Brug dette værktøj til at vælge mellem forskellige inputs, for at se hvordan de passer med den endelige forudsigelse."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etiket"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "Med tiden 5 mmol/L"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observeret"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 E/time @ 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Kulhydrateffekter"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "De observerede ændringer i glukose, fratrukket de ændringer, der er modelleret ud fra insulintilførslen, kan bruges til at estimere kulhydratabsorptionen."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detalje"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Anbefalet basal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etiket"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etiket"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Forventet blodsukker"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "Med tiden 5 mmol/L"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g aktive kulhydrater"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glukose"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etiket"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Kulhydrater"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Anbefalet basal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Titel"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/de.lproj/InfoPlist.strings b/Loop/de.lproj/InfoPlist.strings deleted file mode 100644 index 7d35733c9b..0000000000 --- a/Loop/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth wird verwendet, um mit Insulinpumpen und kontinuierlichen Blutzuckermessgeräten zu kommunizieren."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth wird verwendet, um mit Insulinpumpen und kontinuierlichen Blutzuckermessgeräten zu kommunizieren."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Die Kamera wird verwendet, um Barcodes von Geräten zu scannen."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID wird benutzt, um einen Bolus zu authentifizieren."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Mahlzeit-Daten aus der HealthKit-Datenbank werden verwendet, um Blutzuckereffekte zu bestimmen. Blutzuckerdaten aus der HealthKit-Datenbank werden für die Grafik- und Momentumberechnung verwendet."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "In der App und auf der Uhr eingegebene Daten zu Kohlenhydratmahlzeiten werden in der HealthKit-Datenbank gespeichert. Vom CGM abgerufene Glukosedaten werden sicher in HealthKit-Datenbank gespeichert."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop verwendet Siri, damit Du Voreinstellungen mit Deiner Sprache ausführen kannst."; - diff --git a/Loop/de.lproj/Localizable.strings b/Loop/de.lproj/Localizable.strings deleted file mode 100755 index 63aff81a55..0000000000 --- a/Loop/de.lproj/Localizable.strings +++ /dev/null @@ -1,1157 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (stehen aus: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Voreinstellung zum Essen"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " verbleiben"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = "Sicherheitsbenachrichtigungen sind ausgeschaltet"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Zielbereichsänderung"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ resorbiert"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ verbleiben"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ IE gesamt"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ konnte Deine aktuelle temporäre Basalrate nicht abbrechen, da diese höher ist als die neue maximale Basalrate, die Du festgelegt hast. Dies kann zu einer höheren Insulinabgabe, als erwünscht führen.\n\nErwäge, die Insulinabgabe manuell zu unterbrechen und dann sofort wieder aufzunehmen, um die Basalabgabe mit dem neuen Grenzwert zu initiieren."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/IE"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ arbeitet mit geschlossenem Regelkreis in der AUS-Position. Deine Pumpe und CGM funktionieren weiter, aber die App passt die Dosierung nicht automatisch an."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ kann die Benachrichtigung nicht von Deinem Gerät löschen"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ kann nicht mit Deiner Insulinpumpe kommunizieren. Die App versucht weiterhin, Deine Pumpe zu erreichen, aber die Informationen zur Insulinabgabe können nicht aktualisiert werden und die Automatisierung kann nicht fortgesetzt werden.\nDu kannst einige Minuten warten, um zu sehen, ob das Problem behoben ist, oder auf die Schaltfläche unten tippen, um mehr über andere Optionen zu erfahren."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Zeiteinstellungen erfordern Aufmerksamkeit"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ IE"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ IE verbleibend"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ IE verbleibend: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ IE/h @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ funktioniert nicht mehr in %2$@. Du musst vor Ablauf mit einem neuen Bereitstellungsprofil aktualisieren."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 Minuten Blutzucker-Regressionskoeffizient (b₁), fortgesetzt mit Abfall über 30 min"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30-minütiger Vergleich der Blutzuckerprognose gegenüber dem tatsächlichen Blutzucker, Fortsetzung mit Abfall über 60 min"; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Ein paar Sekunden verbleiben"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Der manuelle Blutzucker muss zwischen %1$@ und %2$@ liegen"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Der manuelle Blutzucker muss zwischen %1$@ und %2$@ liegen."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Ein Modell basierend auf der veröffentlichten Resorption von Fiasp-Insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Ein Modell auf der Grundlage der veröffentlichten Resorption von Humalog, Novolog und Apidra Insulin bei Erwachsenen."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Eine neue Version von %@ ist verfügbar und es wird empfohlen, die App weiterhin zu verwenden."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Eine neue Version von %@ ist verfügbar."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Eine Pumpe muss konfiguriert werden, bevor ein Bolus abgegeben werden kann."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "Akzeptiere empfohlenen Bolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktive Kohlenhydrate"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktive Kohlenhydrate: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktive KH"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktives Insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktives Insulin: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "KH hinzufügen"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "CGM hinzufügen"; - -/* The label of the meal button */ -"Add Meal" = "Mahlzeit hinzufügen"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Pumpe hinzufügen"; - -/* Title text for button to set up a service */ -"Add Service" = "Service hinzufügen"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Angepasst für"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Alarm-Einstellungen"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Benachrichtigungsberechtigungen"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algorithmus-Einstellungen"; - -/* Label for when mute alert will end */ -"All alerts muted until" = "Alle Alarme stummgeschaltet bis"; - -/* No comment provided by engineer. */ -"All Favorites" = "Alle Favoriten"; - -/* Label for carb quantity entry row on carb entry screen */ -"Amount Consumed" = "KH-Menge gegessen"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Eine aktive Voreinstellung verändert Dein Kohlenhydratverhältnis und Deine Insulinempfindlichkeit. Wenn Du nicht möchtest, dass sich dies auf Deine Bolusberechnung und Deinen prognostizierten Blutzucker auswirkt, solltest Du die Voreinstellung deaktivieren."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Beim Speichern Deiner Eingabe der Kohlenhydrate ist ein Fehler aufgetreten."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Beim Speichern Deines manuell eingegebenen Blutzuckers ist ein Fehler aufgetreten."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Ein unerwarteter Fehlerstatus beim Onboarding ist aufgetreten."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Eine aktualisierte Bolusempfehlung ist verfügbar."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Settings app profile section */ -"App Profile" = "App-Profil"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Möchtest Du wirklich alle Verlaufseinträge löschen?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Möchtest Du wirklich alle protokollierten Dosis Einträge löschen?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Möchtest Du wirklich alle Reservoirwerte löschen?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Möchtest Du wirklich alle %@-Daten löschen?\n(Diese Aktion kann nicht rückgängig gemacht werden)"; - -/* Confirmation message for deleting a CGM */ -"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. */ -"Are you sure you want to delete this food?" = "Bist Du sicher, dass Du diesen Favoriten löschen möchtest?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Bist Du sicher, dass Du diesen Dienst löschen möchtest?"; - -/* Format fragment for a specific time */ -"at %@" = "um %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Bolusabgabe von %@ IE bestätigen"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Authentifiziere Dich, um %@ Einheiten zu protokollieren."; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basalraten-Plan"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basalrate"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Basierend auf Deinem vorhergesagten Blutzucker wird kein Bolus empfohlen."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth aus"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth nicht verfügbar"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Bluetooth-Aus Warnung"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Bluetooth nicht Verfügbar-Warnung"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Bolus Problem"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Aktualisierte Bolusempfehlung"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolus Zusammenfassung"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus zu gering"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "%1$@ von %2$@ verabreicht"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolusabgabe %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Abbrechen"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Bolus abbrechen"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Kohlenhydrat-Wirkungen"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "KH-Eintrag"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Zeitplan für das Kohlenhydratverhältnis"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "KH-Verhältnis"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Kohlenhydrate hinzufügen"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "KH-Eintrag zu groß"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Kohlenhydrate"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Resorbierte Kohlenhydrate (g) ÷ Kohlenhydratfaktor (g/IE) × Insulinempfindlichkeit (%1$@/IE)"; - -/* No comment provided by engineer. */ -"Caution" = "Achtung"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Wechsel sofort die Pumpenbatterie"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Wechsel jetzt das Pumpenreservoir"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Überprüfe die Einstellungen."; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Stelle sicher, dass sich Deine Pumpe in Reichweite befindet."; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Überprüfe Deine CGM-Datenquelle."; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Überprüfe die Uhrzeit deines Geräts und/oder entferne alle ungültigen Daten aus Apple Health."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Wähle eine längere Resorptionsdauer für größere Mahlzeiten oder welche die viel Fett und Proteine beinhalten. Dies ist eine Unterstützung für den Algorithmus und muss nicht genau sein."; - -/* No comment provided by engineer. */ -"Choose Favorite:" = "Wähle Favorit:"; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Schließen"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Closed Loop"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Closed Loop AUS"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Closed Loop erfordert eine aktive CGM-Sensorsitzung"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Closed Loop erfordert, dass die Einrichtung abgeschlossen ist"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "um %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "seit %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Einstellungen abschließen"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfiguration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Konfigurationsfehler: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Weiter"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Kontinuierliche Blutzuckermessung"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Korrekturbereich"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritische Warnungen"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Kritisches Ereignisprotokoll bereit"; - -/* Critical event log export title */ -"Critical Event Logs" = "Kritische Ereignisprotokolle"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Kritische Ereignisprotokolle konnten nicht exportiert werden."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Aktueller Blutzucker"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Der aktuelle Blutzucker von %1$@ liegt unter dem Korrekturbereich."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Benutzerdefinierter Override"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Voreinstellung"; - -/* Date picker label */ -"Date" = "Datum"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Löschen"; - -/* No comment provided by engineer. */ -"Delete “%@”?" = "„ %@ “ löschen?"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Konto löschen"; - -/* Button title to delete all objects */ -"Delete All" = "Alle löschen"; - -/* Button title to delete CGM */ -"Delete CGM" = "CGM löschen"; - -/* No comment provided by engineer. */ -"Delete Food" = "Essen löschen"; - -/* Button title to delete a service */ -"Delete Service" = "Dienst löschen"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "CGM-Test-Daten löschen"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Test-Daten löschen"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Pumpen-Test-Daten löschen"; - -/* Button text to deliver a bolus */ -"Deliver" = "Abgeben"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Abgabelimits"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diabetes-Behandlung"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Wolltest Du %1$@ Gramm an Kohlenhydraten für diese Mahlzeit eingeben?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Deaktivieren"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Schließen"; - -/* No comment provided by engineer. */ -"Done" = "Fertig"; - -/* Title for card to log dose */ -"Dose Summary" = "Dosisübersicht"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Dosierungsstrategie"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Dauer überschritten: %1$.1f Stunden"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Bluetooth einschalten"; - -/* Title for Glucose Based Partial Application toggle */ -"Enable Glucose Based Partial Application" = "Glucose Based Partial Application aktivieren"; - -/* Title for Integral Retrospective Correction toggle */ -"Enable Integral Retrospective Correction" = "Integral Retrospective Correction aktivieren"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Aktivieren"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Gib einen Blutzuckerwert von einem Messgerät ein, um eine Bolusempfehlung zu bekommen."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Bolus eingeben"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Blutzucker eingeben"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Glukosesicherheitsgrenze eingeben"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Grenzwert für Hypo-Abschaltung eingeben"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Fehler beim Abbrechen des Bolus"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Fehler beim Exportieren des Protokolls"; - -/* The alert title for a resume error */ -"Error Resuming" = "Fehler beim Fortfahren"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Ereignisverlauf"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Voraussichtlich %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Überschreitet den maximal zulässigen Bolus in den Einstellungen"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Überschreitet die maximal zulässigen Kohlenhydrate"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Überschreitet den maximalen Bolus"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Protokolle kritischer Ereignisse exportieren"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Export-%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Wiederaufnahme der Insulinabgabe fehlgeschlagen"; - -/* No comment provided by engineer. */ -"FAVORITE FOODS" = "Favorisiertes Essen"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Blutzucker"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Behebe dies jetzt, indem Du Benachrichtigungen, kritische Alarme und zeitkritische Benachrichtigungen einschaltest."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Für %1$@"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Der prognostizierte Blutzucker kann immer noch über dem Zielbereich liegen."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Prognostizierte Blutzucker"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Hol Dir Hilfe zu den Benachrichtigungsberechtigungen"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Blutzucker"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Blutzuckerdaten sind %1$@ alt"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Blutzuckerdaten nicht verfügbar"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Blutzucker jetzt verfügbar"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Blutzucker-Eingabe außerhalb des Bereichs"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Blutzucker-Momentum"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Zeitplan für den Blutzucker-Zielbereich"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Wie man aktualisiert (LoopDocs)"; - -/* Immediate Delivery status text */ -"Immediate" = "Sofort"; - -/* Algorithm Experiments description second paragraph. */ -"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "In zukünftigen Versionen von Loop können sich diese Experimente ändern, als Standardbestandteile des Loop-Algorithmus enden oder vollständig aus Loop entfernt werden. Bitte folgen Sie dem Loop Zulip-Chat, um über mögliche Änderungen dieser Funktionen auf dem Laufenden zu bleiben."; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Unbegrenzt"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Resorbiertes Insulin (IE) × Insulinempfindlichkeit (%1$@/IE)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Die Insulinanpassung wurde deaktiviert!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulinabgabe"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulinwirkungen"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulin-Modell"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Insulinpumpe"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulinempfindlichkeit"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Insulinempfindlichkeit Plan"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insulinabgabe unterbrochen"; - -/* Insulin type label */ -"Insulin Type" = "Insulintyp"; - -/* Title for integral retrospective correction experiment description -Title of integral retrospective correction experiment */ -"Integral Retrospective Correction" = "Integrale retrospektive Korrektur"; - -/* Description of Integral Retrospective Correction toggle. */ -"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Integral Retrospective Correction (IRC) ist eine Erweiterung der standardmäßigen Retrospective Correction (RC)-Algorithmuskomponente in Loop, die die Prognose basierend auf der Historie der Abweichungen zwischen vorhergesagten und tatsächlichen Glukosewerten anpasst. \n\nIm Gegensatz zu RC, das die Abweichungen der letzten 30 Minuten betrachtet, summiert sich bei IRC der Verlauf der Abweichungen im Laufe der Zeit. Daher führen anhaltende positive Abweichungen im Laufe der Zeit zu einer erhöhten Dosierung. Wenn die Abweichungen im Laufe der Zeit negativ sind, reduziert Loop die Dosierung weiter."; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "%1$@ unterbrochen: %2$@ von %3$@ %4$@"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Ungültige Bolusmenge"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Ungültige Kohlenhydratmenge"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Ungültige Daten: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Ungültige zukünftige Blutzuckerwerte"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Ungültiger Blutzuckermesswert mit einem Zeitstempel, der %1$@ in der Zukunft liegt"; - -/* The title text for the issue report cell */ -"Issue Report" = "Problembericht"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Es sieht so aus, als ob du vergessen hast eine Mahlzeit einzugeben. Tippe um sie nun einzutragen."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Große Mahlzeit eingegeben"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Öffnet die CGM-App"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Mehr erfahren"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Weniger als eine Minute verbleiben"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Laden…"; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Dosis speichern"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Gespeicherte Insulindosis"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop ist abgestürzt"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop fehlgeschlagen"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop hat ein Problem mit Deinen Bluetooth-Einstellungen festgestellt und funktioniert nicht, bis Bluetooth aktiviert ist. Du erhältst keine Blutzucker-Werte und es kann kein Bolus abgeben werden."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop hat eine vergessene Mahlzeit erkannt und deren Größe geschätzt. Passe die KH auf die Menge an, die Du wahrscheinlich gegessen hast."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop wurde nicht erfolgreich abgeschlossen seit %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop gibt automatisch einen Bolus ab, wenn der Insulinbedarf über der geplanten Basalrate liegt, und verwendet temporäre Basalraten, wenn dies erforderlich ist, um die Insulinabgabe unter die geplante Basalrate zu reduzieren."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop funktioniert nicht, bis Bluetooth aktiviert ist. Du erhältst keine Blutzuckerwerte und es kann kein Bolus abgeben werden."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop stellt temporäre Basalraten ein, um die Insulinabgabe zu erhöhen oder zu verringern."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Niedriger Blutzucker"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Berechtigungen in den Einstellungen verwalten"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Manuelle Dosis: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Maximale Basalte pro Stunde"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maximaler Bolus"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Maximaler Bolus überschritten"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Mahlzeiten Bolus"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Verpasste Mahlzeit Benachrichtigung"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Fehlende Daten: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Maximal erlaubter Bolus in den Einstellungen fehlt"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentum-Effekte"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Weitere Info"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Alle Alarme stummschalten"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Erfordert Aufmerksamkeit"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Eine negative Dauer ist nicht erlaubt"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Kein Bolus empfohlen"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Keine verbundenen Geräte oder Fehler während der Geräteverbindung"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Kein maximaler Bolus konfiguriert"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Keine Pumpe konfiguriert"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Kein aktueller Blutzucker "; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Kein aktueller Blutzucker "; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Keine Pumpendaten"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Nein, Menge bearbeiten"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Benachrichtigungszustellung"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "Die Benachrichtigungszustellung ist in den Einstellungen Deines Telefons auf geplante Zusammenfassung eingestellt.\n\nUm Verzögerungen beim Erhalt von Benachrichtigungen von %1$@ zu vermeiden, empfehlen wir, die Benachrichtigungszustellung auf sofortige Zustellung einzustellen."; - -/* Notifications Status text */ -"Notifications" = "Benachrichtigungen"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Benachrichtigungsverzögerung"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Benachrichtigungen geben Dir wichtige %1$@-App-Informationen, ohne dass Du die App öffnen musst."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Benachrichtigungen geben Dir wichtige %1$@ App-Informationen, ohne dass Du die App öffnen musst.\n\nLass diese in den Einstellungen Deines Telefons aktiviert, um sicherzustellen, dass Du %1$@ Benachrichtigungen, kritische Warnungen und zeitkritische Benachrichtigungen erhältst."; - -/* Notification Setting Status is Off */ -"Off" = "Aus"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh nein! Loop ist während des Bolus abgestürzt und die Insulinanpassungen wurden angehalten, bis dieser Dialog geschlossen wird. Der Dosierung-Verlauf ist möglicherweise nicht korrekt. Bitte prüfe die Tabellen zur Insulinabgabe und überwache Deinen Blutzucker sorgfältig."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "An"; - -/* The title text for the override presets */ -"Override Presets" = "Voreinstellungen"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Wahrscheinlich eine Mahlzeit vergessen"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Ziel vor dem Essen"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Vorhergesagte Glukose um %1$@ ist %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Der vorhergesagte Blutzucker liegt im Zielbereich."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Der vorhergesagte Blutzucker von %1$@ liegt unter der Sicherheitsgrenze."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Der vorhergesagte Blutzucker von %1$@ liegt unter dem Grenzwert für die Hypo-Abschaltung."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Vorhergesagt: %1$@\nAktuell: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Vorbereiten der kritischen Ereignis-Protokolle"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Ablauf des Profils"; - -/* Time that profile expires */ -"Profile expires " = "Profil läuft ab "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profil läuft in Kürze ab"; - -/* The title of the pump section in settings */ -"Pump" = "Pumpe"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pumpenbatterie schwach"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pumpendaten sind %1$@ alt"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pumpen-Ereignis"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pumpenmanager"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Pumpen-Fehler: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pumpenreservoir leer"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pumpenreservoir niedrig"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pumpe unterbrochen"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pumpe unterbrochen. Die automatische Dosierung ist deaktiviert."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Schnell wirkend – Erwachsene"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Schnell wirkend – Kinder"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Empfehlung abgelaufen: %1$@ alt"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Empfohlene Basalrate"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Empfohlener Bolus"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Der empfohlene Bolus überschreitet den maximalen Bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Empfohlener Bolus: %@ IE"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Entfernte Boluseingabe: %@ IE"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Ferneingabe von Kohlenhydraten: %d g"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Nachträgliche Korrektur"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Wiederholen"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Speichern ohne Bolusgabe"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Geplant"; - -/* The title of the services section in settings */ -"Services" = "Dienste"; - -/* The label of the settings button */ -"Settings" = "Einstellungen"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Einrichtung unvollständig"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Zeigt den letzten Loop-Fehler an"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Einfacher Bolusrechner"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Einfacher Mahlzeitenrechner"; - -/* Format fragment for a start time */ -"since %@" = "seit %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Webseiten URL"; - -/* Software update button link text */ -"Software Update" = "Software-Aktualisierung"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Startzeit liegt außerhalb des Bereichs: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "Beginnt um %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Starte Bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Unterstützung"; - -/* The title text in settings */ -"Suspend Threshold" = "Grenzwert für Hypo-Abschaltung"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Tippe hier, um ein CGM einzurichten"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Tippe hier, um eine Pumpe einzurichten"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Tippe hier, um einen Dienst einzurichten"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Hinzufügen"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Fortsetzen"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Stoppen"; - -/* The alert body for unmute alert confirmation */ -"Tap Unmute to resume sound for your alerts and alarms." = "Tippe auf Stummschaltung aufheben, um den Ton für Deine Warnungen und Alarme wieder aufzunehmen."; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Die eingegebene Bolusmenge ist kleiner als die Mindestabgabemenge."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Der Bolusdosierungsalgorithmus verwendet eine konservativere Schätzung des prognostizierten Blutzuckers als die zur Anpassung Deiner Basalrate.\n\nDaher kann Dein prognostizierter Blutzucker nach einem Bolus immer noch über Deinem Zielbereich liegen."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Die Bolusempfehlung wurde aktualisiert. Bitte bestätige die Bolusmenge erneut."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Das von Loop verwendete Legacy-Modell, das die Anpassung der Aktivitätsdauer ermöglicht."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "Die maximal zulässige Menge beträgt %@ Gramm."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "Der maximal zulässige Wert ist %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Die maximale Bolusmenge beträgt %@ IE."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Die maximale Bolus beträgt %@ IE"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Die Boluseinstellungen müssen konfiguriert werden, bevor ein Bolus abgegeben werden kann."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Therapieeinstellungen"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Zeitkritische Benachrichtigungen"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Nochmals versuchen"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Schalte Bluetooth ein, um Warnungen, Alarme oder Gewebeglukosewerte zu erhalten."; - -/* The short unit display string for international units of insulin */ -"U" = "IE"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Benachrichtigung kann nicht gelöscht werden"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Pumpe kann nicht erreicht werden"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "KH-Eintrag kann nicht gespeichert werden"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Manuelle Glukose-Eingaben kann nicht gespeichert werden"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Der laufende Bolus kann nicht gestoppt werden. Bewegen Dein iPhone näher an die Pumpe und versuche es erneut. Überprüfe den Verlauf der Insulinabgabe auf Einzelheiten und überwache Deinen Blutzucker genau."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Unbekannt"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Unbekannter Fehler: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Unbekannte Voreinstellung: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Unbekannte Zeit"; - -/* The format for the description of a temporary override end date */ -"until %@" = "Endet um %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Bis ich KH eingebe"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Bis ich ausschalte"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Voreinstellung „Vor dem Essen“ verwenden"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Zielbereich für Sport verwenden"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Trainingsvoreinstellung verwenden"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Warnung! Sicherheitsbenachrichtigungen sind AUSGESCHALTET"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Wenn der aktuelle oder prognostizierte Glukosewert unter dem Glukosesicherheitsgrenzwert liegt, empfiehlt Loop keinen Bolus und immer eine temporäre Basalrate von 0 Einheiten pro Stunde."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Wenn der aktuelle oder prognostizierte Blutzucker unter dem Schwellenwert für die Hypo-Abschaltung liegt, empfiehlt Loop keinen Bolus, sondern immer eine temporäre Basalrate von 0 IE/h."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Wenn aktiviert, kann Loop Dich benachrichtigen, wenn es eine Mahlzeit erkennt, die nicht protokolliert wurde."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Ist der Loop-Modus ausgeschaltet, dann verwendet die App einen vereinfachten Bolusrechner wie eine typische Pumpe."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Zielbereich für Sport"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Zielbereichsänderung ist seit mehr als 24 Stunden eingeschaltet. Stelle sicher, dass Du es weiterhin aktiviert haben möchtest, oder schalte es aus."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Zielbereichsänderung ist noch an"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Ja"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Möglicherweise erhältst Du keine akustischen, optischen oder Vibrationswarnungen zu wichtigen Sicherheitsinformationen.\n\nUm das Problem zu beheben, tippe auf „Einstellungen“ und vergewissere Dich, dass „Benachrichtigungen“, „Dringende Warnungen“ und „Zeitkritische Benachrichtigungen“ aktiviert sind."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Deine Zeit %1$@ wurde geändert. %2$@ benötigt genaue Zeitaufzeichnungen, um Vorhersagen über Deinen Blutzuckerwert zu treffen und Dein Insulin entsprechend anzupassen.\n\nÜberprüfe %1$@ Einstellungen (Allgemein / Datum & Uhrzeit) und vergewissere Dich, dass „Automatisch einstellen“ aktiviert ist. Wird dies nicht behoben, kann dies zu einer schwerwiegenden Unter- oder Über-Abgabe von Insulin führen."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Dein Blutzucker liegt unter %1$@. Bist Du sicher, dass Du einen Bolus abgeben möchtest?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Dein Blutzucker liegt unter Deiner Sicherheitsgrenze %@ oder wird voraussichtlich unter diese fallen."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Dein Blutzucker liegt unter Deiner Sicherheitsgrenze von %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Dein Blutzucker ist niedrig. Iss Kohlenhydrate und erwäge, mit dem Bolus zu warten, bis Dein Blutzucker in einem sicheren Bereich liegt."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Dein Blutzucker ist niedrig. Kohlenhydrate essen und genau beobachten."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Deine maximale Bolusmenge beträgt %1$@."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Deine Pumpendaten sind veraltet. %1$@ kann keine Bolusmenge empfehlen."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Deine Pumpe liefert eine manuelle temporäre Basalrate."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Der empfohlene Bolus übersteigt die maximale Bolus von %1$@."; - diff --git a/Loop/de.lproj/Main.strings b/Loop/de.lproj/Main.strings deleted file mode 100644 index 973b4f0889..0000000000 --- a/Loop/de.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 IE/h @ 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Vorhergesagt"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Beschriftung"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Blutzucker-Änderung"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g insgesamt"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Der Blutzuckerverlauf wird vorhergesagt, indem die Effekte mehrerer Eingaben kombiniert werden. Verwende dieses Tool, um verschiedene Eingaben ein- und auszuschalten, um zu sehen, wie sie die Vorhersage beeinflussen."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Beschriftung"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "voraussichtlich 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Beobachtet"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3,5 IE/h @ 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Kohlenhydrat-Effekte"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Die beobachtete Blutzuckerveränderung abzüglich der modellbasierten Veränderung kann verwendet werden, um die Kohlenhydratresorption abzuschätzen."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Empfohlene Basalrate"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Beschriftung"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Beschriftung"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Vorhergesagter Blutzucker"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "voraussichtlich 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g aktive Kohlenhydrate"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Blutzucker"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Beschriftung"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Kohlenhydrate"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Empfohlene Basalrate"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Titel"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/en.lproj/InfoPlist.strings b/Loop/en.lproj/InfoPlist.strings deleted file mode 100644 index 4fb6012aee..0000000000 --- a/Loop/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID is used to authenticate insulin bolus."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Meal data from the Health database is used to determine glucose effects. Glucose data from the Health database is used for graphing and momentum calculation. Sleep data from the Health database is used to optimize delivery of Apple Watch complication updates during the time you are awake."; - diff --git a/Loop/en.lproj/Localizable.strings b/Loop/en.lproj/Localizable.strings deleted file mode 100644 index 54d0ee5724..0000000000 --- a/Loop/en.lproj/Localizable.strings +++ /dev/null @@ -1,392 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (pending: %@)"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U left"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U left: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/hour @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbed"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min glucose regression coefficient (b₁), continued with decay over 30 min"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min comparison of glucose prediction vs actual, continued with decay over 60 min"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "A model based on the published absorption of Fiasp insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Active Carbohydrates"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Active Carbohydrates: %@"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Active Insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Active Insulin: %@"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Add CGM"; - -/* The label of the meal button */ -"Add Meal" = "Add Meal"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Add Pump"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?"; - -/* Format fragment for a specific time */ -"at %@" = "at %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Authenticate to Bolus %@ Units"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basal Rate Schedule"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basal Rates"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolused %1$@ of %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolusing %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Cancel"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Canceling Bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Carb effects"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Carb Ratios"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carbohydrates"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Change the pump battery immediately"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Change the pump reservoir now"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Check settings"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Check that your pump is in range"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Check your CGM data source"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Closed Loop"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Configuration Error: %1$@"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Continuous Glucose Monitor"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Correction Range"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Current glucose of %1$@ is below correction range."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Custom Override"; - -/* Button title to delete CGM */ -"Delete CGM" = "Delete CGM"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Delivery Limits"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Disables"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Enables"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Enter suspend threshold"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Error Canceling Bolus"; - -/* The alert title for a resume error */ -"Error Resuming" = "Error Resuming"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Eventually %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Exceeds Maximum Bolus"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "For %1$@"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glucose"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Glucose data is %1$@ old"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Glucose data not available"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glucose Momentum"; - -/* The placeholder text for the nightscout site URL credential */ -"https://mysite.herokuapp.com" = "https://mysite.herokuapp.com"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indefinitely"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulin Delivery"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulin effects"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulin Model"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulin Sensitivities"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Invalid data: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Issue Report"; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"prediction-description-retrospective-correction" = "Predicted: %1$@\nActual: %2$@ (%3$@)"; - -/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "Integral effect: %1$@\nTotal glucose effect: %2$@"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Launches CGM app"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Loading..."; - -/* The title of the loggly service */ -"Loggly" = "Loggly"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop Failure"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop has not completed successfully in %@"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Missing data: %1$@"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentum effects"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "No connected devices, or failure during device connection"; - -/* The title text for the override presets */ -"Override Presets" = "Override Presets"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Pre-Meal Targets"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Predicted glucose at %1$@ is %2$@."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Predicted glucose of %1$@ is below your suspend threshold setting."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Predicted: %1$@\nActual: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "Pump"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pump Battery Low"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pump data is %1$@ old"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pump Manager"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pump Reservoir Empty"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pump Reservoir Low"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pump Suspended"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Rapid-Acting – Adults"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Rapid-Acting – Children"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Recommendation expired: %1$@ old"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Recommended Basal"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Recommended Bolus: %@ Units"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Retrospective Correction"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Retry"; - -/* The title of the services section in settings */ -"Services" = "Services"; - -/* The label of the settings button */ -"Settings" = "Settings"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Shows last loop error"; - -/* Format fragment for a start time */ -"since %@" = "since %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Site URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "starting at %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Starting Bolus"; - -/* The title text in settings */ -"Suspend Threshold" = "Suspend Threshold"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Tap to Resume"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "The legacy model used by Loop, allowing customization of action duration."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "The maximum bolus amount is %@ Units"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The format for the description of a temporary override end date */ -"until %@" = "until %@"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Use Workout Glucose Targets"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Workout Targets"; - diff --git a/Loop/en.lproj/Main.strings b/Loop/en.lproj/Main.strings deleted file mode 100644 index 032954b583..0000000000 --- a/Loop/en.lproj/Main.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g COB"; - diff --git a/Loop/es.lproj/InfoPlist.strings b/Loop/es.lproj/InfoPlist.strings deleted file mode 100644 index ae97a23392..0000000000 --- a/Loop/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "El bluetooth se utiliza para las comunicaciones con la bomba de insulina y los dispositivos de monitoreo continuo de glucosa."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "El bluetooth se utiliza para las comunicaciones con la bomba de insulina y los dispositivos de monitoreo continuo de glucosa."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "La cámara se utiliza para escanear los códigos de barras de los dispositivos."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Se utiliza reconocimiento facial para autenticar el bolo de insulina."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Datos de alimentos de la base de datos de Salud se utiliza para determinar los efectos en el nivel de glucosa. Datos de glucosa de la bsase de datos de Salud se utilizan para graficar y determinar cálculos de momento."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Datos de alimentos ingresados en la aplicación y en el reloj son almacenados en la base de datos de Salud. Los datos de glucosa extraídos del monitor continuo de glucosa se almacenan de manera segura en HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop utiliza Siri para permitirte activar ajustes preestablecidos con tu voz."; - diff --git a/Loop/es.lproj/Localizable.strings b/Loop/es.lproj/Localizable.strings deleted file mode 100644 index fb81785753..0000000000 --- a/Loop/es.lproj/Localizable.strings +++ /dev/null @@ -1,1081 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (pendiente: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Pre-Comida Preestablecida"; - -/* remaining time in setting's profile expiration section */ -" remaining" = "restantes"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = " Notificaciones de seguridad desactivadas"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Ejercicio Preestablecido"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbido"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ restante"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Totales"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ no pudo cancelar su basal temporal actual, que es más alta que el nuevo límite basal máximo que ha establecido. Esto puede resultar en una administración de insulina superior a la deseada. \n\n Considere suspender la administración de insulina manualmente y luego reanudarla de inmediato para activar la administración basal con el nuevo límite establecido."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ está funcionando con Circuito Cerrado en la posición APAGADO. Su bomba y CGM seguirán funcionando, pero la aplicación no ajustará la dosis automáticamente."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ no puede borrar la alerta de su dispositivo"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ no puede comunicarse con tu bomba de insulina. La aplicación continuará intentando llegar a tu bomba, pero la información de entrega de insulina no se puede actualizar y ninguna automatización puede continuar.\nPuedes esperar varios minutos para ver si el problema resuelve o pulsa el botón de abajo para saber más sobre otras opciones."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ La configuración de la hora necesita atención"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ U"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U restantes"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U restantes: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/hora @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ dejará de funcionar en %2$@ . Deberá actualizar antes de eso, con un nuevo perfil de aprovisionamiento."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "Coeficiente de regresión de glucosa de 15 minutos (b₁), continuado con decaimiento durante 30 minutos"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "Comparación de glucosa actual contra la proyectada en 30 minutos, continuada con decaimiento durante 60 minutos."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Quedan unos segundos"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Una entrada de glucosa manual debe estar entre %1$@ y %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Una entrada de glucosa manual debe estar entre %1$@ y %2$@ ."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Un modelo basado en la publicación de la absorción de insulina Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Un modelo basado en la publicación de la absorción de insulina Humalog, Novolog y Apidra en adultos."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Hay una nueva versión de %@ disponible y se recomienda continuar usando la aplicación."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Hay una nueva versión de %@ disponible."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Una microinfusadora debe ser configurada antes de que un bolo pueda ser entregado."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AceptarBoloRecomendado"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Carbohidratos Activos"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Carbohidratos Activos: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Carbohidratos Activos"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Insulina activa"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Insulina Activa: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Agregar Entrada de Carb"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Agregar MCG"; - -/* The label of the meal button */ -"Add Meal" = "Agregar Alimento"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Agregar Microinfusora"; - -/* Title text for button to set up a service */ -"Add Service" = "Add Service"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Ajustado para"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Gestión de Alertas"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Permisos de Alertas"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Ajustes de Algoritmo"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Un Ajuste Temporal activo modifica la proporción de carbohidratos y la sensibilidad a la insulina. Si no deseas que esto afecte el cálculo del bolo y la glucosa proyectada, considera desactivar el Ajuste Temporal."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Se produjo un error al intentar guardar la entrada de carbohidratos."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Se produjo un error al intentar guardar la entrada manual de glucosa."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Se ha producido un error inesperado"; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Hay una recomendación actualizada de bolo."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "Clave secreta API"; - -/* Settings app profile section */ -"App Profile" = "Perfil de la aplicación"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "¿Estás seguro de querer eliminar todos las entradas históricas?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "¿Estás seguro de que quieres borrar todas las entradas de dosis registradas?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "¿Estás seguro de querer eliminar todos los datos del reservorio?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "¿Estás seguro de que quieres eliminar todos tus datos de %@ ?\n (Esta acción no es reversible)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "¿Está seguro de que quiere eliminar este MCG?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "¿Está seguro de que desea eliminar este servicio?"; - -/* Format fragment for a specific time */ -"at %@" = "en %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Autenticar para Bolo %@ Unidades"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Autenticarse para registrar %@ Unidades"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Perfil Basal"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Tasas basales"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Basándose en su glucosa proyectada, no se recomienda ningún bolo."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth\nApagado"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth \nNo Disponible"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Alerta de Bluetooth apagado"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Alerta de Bluetooth no disponible"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolo"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Problema con el bolo"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Recomendación de bolo fue actualicada"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Resumen del bolo"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolo demasiado pequeño"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Administró bolo %1$@ de %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Administrando bolo de %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Cancelar"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Cancelando bolo"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Efectos de carbohidratos"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Entrada de Carbohidratos"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Calendario de ratio de carbohidratos"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Ratios de carbohidratos"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Agregar Entrada de Carb"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Entrada de carbohidratos demasiado grande"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carbohidratos"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carbohidratos absorbidos (gr) ÷ Relación de Carbohidratos (gr/U) x Sensibilidad a Insulina (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Cambie la batería de la bomba de inmediato"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Cambie el depósito de la bomba ahora"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Verificar ajustes"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Verifique que su microinfusora esté dentro del rango"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Verifique su fuente de datos CGM"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Compruebe la hora de su dispositivo y/o elimine cualquier dato no válido de Apple Health."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Elija un tiempo de absorción más largo para comidas más grandes, o aquellas que contienen grasas y proteínas. Esta es solo una guía para el algoritmo y no necesita ser exacta."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Cerrar"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Circuito Cerrado"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Asa cerrada APAGADA"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "La asa cerrada requiere una sesión de sensor CGM activa"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "El Circuito Cerrado requiere que la configuración esté completa"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "en %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "desde %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Completa la Configuración"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuración"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Error de Configuración: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Continuar"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Monitor de glucosa continuo"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Rango de Corrección"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Alertas críticas"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Registro de eventos críticos listo"; - -/* Critical event log export title */ -"Critical Event Logs" = "Registros de eventos críticos"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "No se han podido exportar los registros de eventos críticos."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Glucosa actual"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Glucosa actual de %1$@ está por debajo del rango de corrección."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Sobreescritura personalizada"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Ajuste Preestablecido personalizado"; - -/* Date picker label */ -"Date" = "Fecha"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Eliminar"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Eliminar Cuenta"; - -/* Button title to delete all objects */ -"Delete All" = "Eliminar Todos"; - -/* Button title to delete CGM */ -"Delete CGM" = "Eliminar MCG"; - -/* Button title to delete a service */ -"Delete Service" = "Eliminar servicio"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Eliminar prueba de datos CGM"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Eliminar datos de prueba"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Borrar los datos de prueba de la bomba"; - -/* Button text to deliver a bolus */ -"Deliver" = "Entregar"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Límites de Administración de Insulina"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Tratamiento de la diabetes"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "¿Quería introducir %1$@ gramos como cantidad de hidratos de carbono para esta comida?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Desactivar"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Ignorar"; - -/* No comment provided by engineer. */ -"Done" = "Completado"; - -/* Title for card to log dose */ -"Dose Summary" = "Resumen de dosis"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Estrategia de dosificación"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Activar \nBluetooth"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Permitir"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Ingrese una glucosa en sangre de un medidor por una cantidad recomendada de bolo."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Introducir bolo"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Ingrese la glucosa de punción en el dedo"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Introduzca el límite de seguridad de glucosa"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Ingrese nivel de suspensión"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Error de cancelación de bolo"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Error al exportar registros"; - -/* The alert title for a resume error */ -"Error Resuming" = "Error Reanudando"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Historial de Eventos"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Eventualmente %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Excede el bolo máximo permitido en la configuración"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Supera el máximo permitido de carbohidratos definido en la configuración"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Excede bolo máximo"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Exportar registros de eventos críticos"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Exportar- %1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "No se pudo reanudar la administración de insulina"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Glucosa de punción en el dedo"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Soluciónalo ahora activando Notificaciones, Alertas Críticas y Notificaciones Sensibles al Tiempo."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Por %1$@"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "La glucosa en sangre pronosticada aún puede estar por encima del rango objetivo."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Glucosa pronosticada"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Ayuda con los Permisos de Alerta"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glucosa"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Los datos de glucosa son de hace %1$@ "; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Los datos de glucosa no están disponibles"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Datos de glucosa ahora disponibles"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Entrada de glucosa fuera de rango"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Momento de Glucosa"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Horario para el objetivo de glucosa"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Cómo actualizar (LoopDocs)"; - -/* Immediate Delivery status text */ -"Immediate" = "Inmediato"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indefinidamente"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulina"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulina Absorbida (U) x Sensibilidad a Insulina (%1$@/U)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "¡Se han deshabilitado los ajustes de insulina!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Administración de Insulina"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Efectos de la insulina"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Modelo de Insulina"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Microinfusadora de insulina"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Sensibilidad a la insulina"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Horario de la sensibilidad a la insulina"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insulina Suspendida"; - -/* Insulin type label */ -"Insulin Type" = "Tipo de Insulina"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "%1$@ interrumpido: %2$@ de %3$@ %4$@"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Cantidad de carbohidratos no válida"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Datos no válidos: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Glucosa futura no válida"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lectura de glucosa no válida de %1$@ en el futuro"; - -/* The title text for the issue report cell */ -"Issue Report" = "Informe de Errores"; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Comida grande ingresada"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Lanza app MCG"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Más información"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Queda menos de un minuto"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Cargando..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Registrar dosis"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Dosis de insulina registrada"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Falla del Loop"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Falla del Loop"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop ha detectado un problema con la configuración de Bluetooth, y no funcionará correctamente hasta que el Bluetooth esté activado. No recibirás lecturas de glucosa, ni podrás dar los bolos."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop no ha terminado correctamente en %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop administrará bolos automáticamente cuando las necesidades de insulina estén por encima del basal programado y utilizará ajustes temporales de basal cuando sea necesario para reducir la administración de insulina por debajo del basal programado."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop no funcionará correctamente hasta que el Bluetooth esté habilitado. No recibirá lecturas de glucosa ni podrá administrar bolus."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop establecerá basal temporales para aumentar y disminuir la administración de insulina."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Glucosa baja"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Administrar permisos en Configuración"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Dosis manual: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Tasa basal máxima por hora"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Bolo Máximo"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Bolo máximo excedido"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Bolo de Comida"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Faltan Datos: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Falta el bolo máximo permitido en la configuración"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Efectos de Momento"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Más Info"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Silenciar todas las alertas"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Necesita Atención"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "No hay bolo recomendado"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "No hay dispositivos conectados o falla durante conexión de dispositivo"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "No hay bolo máximo configurado"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "No hay microinfusadora configurada"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Sin glucosa reciente"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Sin datos de glucosa recientes"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Sin datos de microinfusora recientes"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "No, editar cantidad"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Entrega de notificaciones"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "El envío de notificaciones está configurado como Resumen Programado en los ajustes del teléfono.\n\nPara evitar retrasos en la recepción de notificaciones de %1$@, le recomendamos que configure el envío de notificaciones como Entrega inmediata."; - -/* Notifications Status text */ -"Notifications" = "Notificaciones"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Retraso en las notificaciones"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Las notificaciones te proporcionan información importante sobre la aplicación %1$@ sin que tengas que abrirla."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Las notificaciones te proporcionan información importante sobre la aplicación %1$@ sin que tengas que abrirla.\n\nManten estas activadas en los ajustes del teléfono para recibir notificaciones %1$@, alertas críticas y notificaciones sensibles al tiempo cuando se entregan."; - -/* Notification Setting Status is Off */ -"Off" = "Apagado"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "¡Oh, no! Loop falló durante la dosificación y los ajustes de insulina se pausaron hasta que se cierre este cuadro de diálogo. El historial de dosificación puede no ser exacto. Revise los gráficos de administración de insulina y controle cuidadosamente su nivel de glucosa en sangre."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Encendido"; - -/* The title text for the override presets */ -"Override Presets" = "Sobreescrituras preestablecidas"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Objetivos Pre-Comida"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Glucosa proyectada a las %1$@ es %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "La glucosa proyectada está en rango"; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Glucosa proyectada de %1$@ se encuentra por debajo de tu nivel de suspensión."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Glucosa proyectada de %1$@ se encuentra por debajo de su nivel de suspensión."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Predicción: %1$@\nActual: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Preparando registros de eventos críticos"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Caducidad del perfil"; - -/* Time that profile expires */ -"Profile expires " = "El perfil caduca"; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "El perfil caduca pronto"; - -/* The title of the pump section in settings */ -"Pump" = "Microinfusadora"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Batería de la bomba baja"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Los datos de la microinfusora son %1$@ viejos"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Evento de microinfusadora"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Administratión de Microinfusora"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Error del administrador de bomba: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Reserva de bomba vacía"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Reserva de bomba baja"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Microinfusora Suspendida"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Microinfusora suspendida. La dosificación automática está desactivada."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Acción Rápida — Adultos"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Acción Rápida — Niños"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Recomendación expiró hace: %1$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Basal Recomendada"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Bolo recomendado"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "El bolo recomendado supera al bolo máximo"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolo Recomendado: %@ Unidades"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Entrada remota de bolo: %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Entrada remota de carbohidratos: %d gr"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservorio"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Corrección Retrospectiva"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Reintentar"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Guardar sin Entregar Bolo"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Programado"; - -/* The title of the services section in settings */ -"Services" = "Servicios"; - -/* The label of the settings button */ -"Settings" = "Ajustes"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Configuración incompleta"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Muestra último error de Loop"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Calculadora simple de bolo"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Calculadora simple de comida"; - -/* Format fragment for a start time */ -"since %@" = "desde %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL de Sitio"; - -/* Software update button link text */ -"Software Update" = "Actualización de software"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "comenzando a las %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Comenzando Bolo"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Ayuda"; - -/* The title text in settings */ -"Suspend Threshold" = "Nivel de Suspensión"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Pulsa aquí para configurar un CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Pulsa aquí para configurar una microinfusadora"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Pulsa aquí para configurar un Servicio"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Pulsa para añadir"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Toque para reanudar"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Pulsa para detener"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "La cantidad de bolo ingresada es menor que el mínimo que se puede administrar."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "El algoritmo de dosificación de bolo utiliza una estimación más conservadora de la glucosa en sangre pronosticada que la que se usa para ajustar su basal. \n\n Como resultado, su glucosa en sangre pronosticada después de un bolo aún puede ser más alta que su rango objetivo."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "La recomendación de bolo ha sido updatada. Reconfirme el bolo."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "El modelo heredado utilizado por Loop, que permite personalizar la duración de la acción de la insulina."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "La cantidad máxima permitida es %@ gr."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "La cantidad máxima permitida es %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Bolo máximo es %@ Unidades."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Bolo máximo es %@ Unidades"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "El ajuste de bolo máximo debe configurarse antes de que se pueda administrar un bolo."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Ajustes de la Terapia"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Notificaciones sensibles al tiempo"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Inténtalo de nuevo"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Activa Bluetooth para recibir alertas, alarmas o medidas de glucosa del sensor."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "No se puede borrar la alerta"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "No se puede contactar con la bomba"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "No se puede guardar la entrada de carbohidratos"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "No se puede guardar la entrada manual de glucosa"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "No se puede detener el bolo en progreso. Mueve tu iPhone más cerca de la microinfusora e inténtalo de nuevo. Revisa tu historial de entrega de insulina para más detalles y supervisa tu glucosa."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Desconocido"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Error desconocido: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Tiempo desconocido"; - -/* The format for the description of a temporary override end date */ -"until %@" = "hasta las %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Hasta que registre carbohidratos"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Hasta que lo desactive"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Usar Pre-Comida"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Usar Objetivos de Glucosa de Ejercicio"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Usar Ejercicio"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Atención Las notificaciones de seguridad están desactivadas"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Cuando la glucosa actual o proyectada se encuentre debajo del nivel de suspensión, Loop no recomendará un bolo y siempre recomendará un basal temporal de 0 unidades por hora."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Cuando la glucosa actual o proyectada se encuentre debajo del nivel de suspensión, Loop no recomendará un bolo y siempre recomendará un basal temporal de 0 unidades por hora."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Cuando está fuera del modo Closed Loop, la aplicación utiliza una calculadora de bolo simplificada como una microinfusadora típica."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Objetivos de Ejercicio"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "El Ajuste Temporal por Ejercicio se ha activado durante más de 24 horas. Asegúrate de que todavía quieres que esté habilitado o desactívalo en la aplicación."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Ajuste Temporal por Ejercicio todavía encendido"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Sí"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Es posible que no reciba alertas sonoras, visuales o por vibración relativas a información de seguridad crítica.\n\nPara solucionar el problema, toque \"Ajustes\" y asegúrese de que las notificaciones, las alertas críticas y las notificaciones sensibles al tiempo están activadas."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Se ha cambiado la hora de su %1$@. %2$@ necesita registros horarios precisos para hacer predicciones sobre su glucosa y ajustar su insulina.\n\nCompruebe en su %1$@ Ajustes (General / Fecha y Hora) y verifique que 'Ajustar automáticamente' está activado. Si no se resuelve, podría producirse un grave suministro insuficiente o excesivo de insulina."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Tu glucosa está por debajo de %1$@. ¿Estás seguro de que deseas administrar un bolo?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Tu nivel de glucosa está por debajo o se prevé que vaya a estar por debajo de tu límite de seguridad de glucosa, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Tu glucosa está por debajo del límite de seguridad de glucosa, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Tu glucosa está baja. Come carbohidratos y considera esperar para administrar el bolo hasta que tu glucosa esté en un rango seguro."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Tienes la glucosa baja. Come carbohidratos y vigílalo de cerca."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Su cantidad máxima de bolo es %1$@ ."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Los datos de su bomba están obsoletos. %1$@ no puede recomendar una cantidad de bolo."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Su bomba está suministrando una tasa basal temporal manual."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Su bolo recomendado excede su cantidad máxima de bolo de %1$@."; - diff --git a/Loop/es.lproj/Main.strings b/Loop/es.lproj/Main.strings deleted file mode 100644 index 5d735107f0..0000000000 --- a/Loop/es.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Estado"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/hora @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Proyectada"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detalle"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etiqueta"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Cambio de Glucosa"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "gr Totales"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "La glucosa futura se predice combinando los efectos de diversos datos de entrada. Utiliza esta herramienta para cambiar datos de entrada y ver como varía la predicción final."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etiqueta"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "eventualmente 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observado"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/hora @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Efecto de Carbohidratos"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Los cambios observados en glucosa sustrayendo los cambios modelados para la entrega de insulina pueden ser utilizados para estimar la absorción de carbohidratos."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detalle"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Basal Recomendada"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etiqueta"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etiqueta"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Glucosa Proyectada"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "eventualmente 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "gr Carbohidratos Activos"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glucosa"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etiqueta"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Carbohidratos"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Basal Recomendada"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Título"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/fi.lproj/InfoPlist.strings b/Loop/fi.lproj/InfoPlist.strings deleted file mode 100644 index 153e9f4d6f..0000000000 --- a/Loop/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,21 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetoothin avulla kommunikoidaan insuliinipumpun ja glukoosinseurantalaitteen kanssa."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetoothin avulla kommunikoidaan insuliinipumpun ja glukoosinseurantalaitteen kanssa."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID:tä käytetään annettavan boluksen vahvistamiseen."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Terveys-sovelluksen ateriatietoja käytetään glukoosivaikutusten määrittämiseen. Terveys-sovelluksen glukoositietoja käytetään graafeissa ja laskelmissa. Unitietoja käytetään Apple Watch -komplikaation toiminnan optimointiin hereillä olon aikana."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Sovelluksen ja kellon kautta tallennetut hiilihydraattitiedot tallennetaan Terveys-sovellukseen. Glukoosiseurannan kautta saadut glukoositiedot tallennetaan turvallisesti HealthKitiin."; - diff --git a/Loop/fi.lproj/Localizable.strings b/Loop/fi.lproj/Localizable.strings deleted file mode 100644 index a74f3d7af6..0000000000 --- a/Loop/fi.lproj/Localizable.strings +++ /dev/null @@ -1,817 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = "(odot.: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Ennen ateriaa -esiasetus"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Liikuntatila"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ imeytynyt"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ jäljellä"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U yhteensä"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ ei pysty kommunikoimaan insuliinipumpun kanssa. Sovellus yrittää edelleen yhdistää pumppuun, mutta insuliininannostelun tiedot eivät päivity, eikä automatiikka ole päällä.\nVoit odottaa muutaman minuutin nähdäksesi ratkeaako ongelma, tai voit napauttaa alla olevaa painiketta saadaksesi lisätietoja muista vaihtoehdoista."; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ U"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U jäljellä"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U jäljellä: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/h klo %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min glukoosin regressiokerroin (b₁), hiipuen 30 min kuluessa"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min vertailu ennustetun ja todellisen glukoosin välillä, hiipuen 60 min kuluessa"; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Muutama sekunti jäljellä"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Syötetyn glukoosiarvon on oltava välillä %1$@ – %2$@"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Perustuu Fiasp-insuliinin julkaistuun imeytymismalliin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Perustuu Humalog-, Novorapid- ja Apidra-insuliinien julkaistuun imeytymismalliin aikuisilla."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Pumppu on määritettävä, ennen kuin bolus voidaan annostella."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "HyväksySuositeltuBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktiivinen hiilihydraatti"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktiivinen hiilihydraatti: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Akt. hiilari"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Akt. insuliini"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktiivinen insuliini: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Lisää hiilihydraatteja"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Lisää CGM"; - -/* The label of the meal button */ -"Add Meal" = "Lisää ateria"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Lisää pumppu"; - -/* Title text for button to set up a service */ -"Add Service" = "Lisää palvelu"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Mukautettu"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Hälytysten käyttöoikeudet"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algoritmin asetukset"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Virhe hiilihydraattien tallennuksessa."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Virhe glukoosiarvon tallennuksessa."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Päivitetty bolussuositus on saatavilla."; - -/* The title of the amplitude API key credential */ -"API Key" = "API-avain"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API-salasana"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Haluatko varmasti poistaa kaikki historiatiedot?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Haluatko varmasti poistaa kaikki kirjatut annostelutiedot?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Haluatko varmasti poistaa kaikki säiliön arvot?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Haluatko varmasti poistaa kaikki %@ tietosi?\n(Tämä toiminto ei ole palautettavissa)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Haluatko varmasti poistaa CGM:n?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Haluatko varmasti poistaa tämän palvelun?"; - -/* Format fragment for a specific time */ -"at %@" = "klo %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Vahvista bolus %@ yksikköä"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Vahvista kirjaus %@ yksikköä"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basaaliohjelma"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basaalitasot"; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth ei ole käytössä"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth ei ole käytettävissä"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Bluetooth ei ole käytössä -hälytys"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Bluetooth ei ole käytettävissä -hälytys"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Bolussuositus päivitetty"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolusyhteenveto"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolus %1$@ / %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Annetaan bolus %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Kumoa"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Kumotaan bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Hiilihydraattivaikutus"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Hiilihydraatit"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Hiilihydraattisuhteet"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Lisää hiilihydraatteja"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Hiilihydraatit"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Imeytyneet hiilihydraatit (g) ÷ Hiilihydraattisuhde (g/U) × Insuliiniherkkyys (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Vaihda pumpun paristo välittömästi"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Vaihda pumpun säiliö"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Tarkista asetukset"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Tarkista, että pumppu on riittävän lähellä"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Tarkista CGM-tietolähde"; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Valitse pidempi imeytymisaika isoille tai paljon rasvaa ja proteiineja sisältäville aterioille. Tämä on suuntaa antava ohje, eikä sen tarvitse olla tarkka."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Sulje"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Suljettu säätö"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Suljettu säätö pois päältä"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Suljettu säätö vaatii aktiivisen glukoosisensorin"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "klo %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "%1$@ jälkeen"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Määritykset"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Määritysvirhe: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Jatka"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Glukoosinseuranta (CGM)"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Korjausalue"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Tärkeiden tapahtumien loki valmis"; - -/* Critical event log export title */ -"Critical Event Logs" = "Tärkeiden tapahtumien loki"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Tärkeiden tapahtumien lokia ei voitu viedä."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Nykyinen glukoosi"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Nykyinen glukoosi %1$@ on korjausalueen alapuolella."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Mukautettu tilapäisasetus"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Mukautettu esiasetus"; - -/* Date picker label */ -"Date" = "Aika"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Poista"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Poista tili"; - -/* Button title to delete all objects */ -"Delete All" = "Poista kaikki"; - -/* Button title to delete CGM */ -"Delete CGM" = "Poista CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Poista palvelu"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Poista testi-CGM:n tiedot"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Poista testitiedot"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Poista testipumpun tiedot"; - -/* Button text to deliver a bolus */ -"Deliver" = "Annostele"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Annostelurajat"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diabeteshoito"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Poistaa käytöstä"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Ohita"; - -/* No comment provided by engineer. */ -"Done" = "Valmis"; - -/* Title for card to log dose */ -"Dose Summary" = "Annoksen yhteenveto"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Annostelutapa"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Ota Bluetooth käyttöön"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Ottaa käyttöön"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Syötä sormenpäästä mitattu glukoosiarvo saadaksesi suositellun bolusmäärän."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Syötä bolus"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Syötä mitattu glukoosiarvo"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Aseta glukoosin turvaraja"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Aseta pysäytysraja"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Virhe boluksen kumoamisessa"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Virhe lokin viennissä"; - -/* The alert title for a resume error */ -"Error Resuming" = "Virhe jatkamisessa"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Tapahtumahistoria"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Ennuste %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Ylittää maksimiboluksen"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Vie tärkeiden tapahtumien loki"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Vienti-%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Annostelun jatkaminen epäonnistui"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Mitattu glukoosi"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "%1$@ ajaksi"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glukoosi"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Glukoositieto on %1$@ vanha"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Glukoositietoja ei saatavilla"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Glukoositiedot nyt saatavilla"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Glukoosiarvo alueen ulkopuolella"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glukoosin liike"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Toistaiseksi"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insuliini"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Imeytynyt insuliini (U) × Insuliiniherkkyys (%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insuliinin annostelu"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insuliinivaikutus"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insuliinimalli"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Insuliinipumppu"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insuliiniherkkyydet"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insuliini pysäytetty"; - -/* Insulin type label */ -"Insulin Type" = "Insuliinityyppi"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Keskeytetty %1$@: %2$@ / %3$@ %4$@"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Virheellinen tieto: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Ongelmaraportti"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Avaa CGM-sovelluksen"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Lue lisää"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Alle minuutti jäljellä"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Ladataan..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Kirjaa annos"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Kirjattu insuliiniannos"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loopin häiriö"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop on havainnut Bluetooth-asetuksissa ongelman, eikä se toimi oikein ennen kuin Bluetooth on otettu käyttöön. Et saa glukoosilukemia, etkä voi antaa bolusta."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Häiriö Loopin toiminnassa %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop annostelee automaattisen boluksen kun insuliinitarve ylittää ohjelmoidun basaalin, ja käyttää tilapäisiä alhaisempia basaalitasoja kun tarvitaan vähemmän insuliinia."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop käyttää tilapäisiä basaalitasoja lisätäkseen tai vähentääkseen insuliinin annostelua."; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Suurin sallittu bolus"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Ateriabolus"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Tiedot puuttuvat: %1$@"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Liikevaikutukset (momentum)"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Lisätietoa"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Tarvitsee huomiota"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Bolusta ei suositella"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Ei yhdistettyjä laitteita tai häiriö laiteyhteydessä"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Maksimibolusta ei ole määritetty"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Pumppua ei ole määritetty"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Ei viimeaikaisia glukoositietoja"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Ei viimeaikaisia glukoositietoja"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Ei viimeaikaisia pumpun tietoja"; - -/* Notification Setting Status is Off */ -"Off" = "Pois päältä"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Päällä"; - -/* The title text for the override presets */ -"Override Presets" = "Tilapäisasetukset"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Ennen ateriaa -tavoite"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Ennustettu glukoosi klo %1$@ on %2$@."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Ennustettu glukoosi %1$@ on turvarajan alapuolella."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Ennustettu glukoosi %1$@ on pysäytysrajan alapuolella."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Ennustettu: %1$@\nTodellinen: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Valmistellaan tärkeiden tapahtumien lokia"; - -/* The title of the pump section in settings */ -"Pump" = "Pumppu"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pumpun paristo vähissä"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pumpputieto on %1$@ vanha"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pumpputapahtuma"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pumpun hallinta"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pumpun säiliö tyhjä"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pumpun säiliö vähissä"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pumppu pysäytetty"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pumppu pysäytetty. Automaattinen annostelu ei ole käytössä."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Nopeavaikutteinen – aikuiset"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Nopeavaikutteinen – lapset"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Suositus vanhentunut: %1$@ vanha"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Suositeltu basaali"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Suositeltu bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Suositeltu bolus: %@ yksikköä"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Säiliö"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Retrospektiivinen korjaus"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Yritä uudelleen"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Tallenna ilman bolusta"; - -/* The title of the services section in settings */ -"Services" = "Palvelut"; - -/* The label of the settings button */ -"Settings" = "Asetukset"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Näyttää Loopin viimeisimmän virheen"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Yksinkertainen boluslaskuri"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Yksinkertainen aterialaskuri"; - -/* Format fragment for a start time */ -"since %@" = "%@ jälkeen"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "alkaa %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Aloitetaan bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Tuki"; - -/* The title text in settings */ -"Suspend Threshold" = "Pysäytysraja"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Määritä CGM napauttamalla tästä"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Määritä pumppu napauttamalla tästä"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Määritä palvelu napauttamalla tästä"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Lisää napauttamalla"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Jatka annostelua"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Pysäytä"; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Bolussuositus on päivittynyt. Vahvista bolus uudelleen."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Loopin vanha insuliinimalli, jossa voi muokata insuliinin vaikutusaikaa."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Suurin sallittu bolus on %@ U."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Suurin sallittu bolus on %@ yksikköä"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Suurin sallittu bolus -asetus täytyy määrittää ennen kuin bolus voidaan annostella."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Hoitoasetukset"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Yritä uudelleen"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Ota Bluetooth käyttöön saadaksesi hälytyksiä tai sensorin glukoosilukemia."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Pumppuun ei voitu yhdistää"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Hiilihydraatteja ei voitu tallentaa"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Glukoosiarvoa ei voitu tallentaa"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Käynnissä olevaa bolusta ei voitu pysäyttää. Siirrä iPhone lähemmäksi pumppua ja yritä uudelleen. Tarkista tiedot insuliinin annosteluhistoriasta ja seuraa glukoosia tarkasti."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Tuntematon"; - -/* The format for the description of a temporary override end date */ -"until %@" = "%@ asti"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Kunnes syötän hiilihydraatteja"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Kunnes laitan pois päältä"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Käytä Ennen ateriaa -esiasetusta"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Käytä liikuntatilan glukoositavoitetteita"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Käytä liikuntatilaa"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Kun nykyinen tai ennustettu glukoosi on glukoosin turvarajan alapuolella, Loop ei suosittele bolusta ja suosittelee aina tilapäiseksi basaaliksi 0 yksikköä tunnissa."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Kun nykyinen tai ennustettu glukoosi on pysäytysrajan alapuolella, Loop ei suosittele bolusta ja suosittelee aina tilapäiseksi basaaliksi 0 yksikköä tunnissa."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Kun suljettu säätö ei ole päällä, sovellus käyttää yksinkertaista boluslaskuria, kuten tavallisessa pumpussa."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Liikuntatavoitteet"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Liikuntatila on ollut käytössä yli 24 tuntia. Varmista, että haluat sen olevan edelleen käytössä, tai poista se käytöstä sovelluksessa."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Liikuntatila on yhä päällä"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Glukoosi on alle tai sen ennustetaan alittavan glukoosin turvarajan %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Glukoosi on alle glukoosin turvarajan %1$@."; - diff --git a/Loop/fi.lproj/Main.strings b/Loop/fi.lproj/Main.strings deleted file mode 100644 index da8746bbdf..0000000000 --- a/Loop/fi.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Tila"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/h @ 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Ennustettu"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Nimiö"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Glukoosin muutos"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g yhteensä"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Tulevia glukoosiarvoja ennustetaan yhdistämällä useiden eri tekijöiden vaikutuksia. Tämän työkalun avulla voit havainnoida, kuinka ne vaikuttavat lopulliseen ennusteeseen laittamalla niitä päälle/pois."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Nimiö"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "ennuste 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Havaittu"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/h @ 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Hiilihydraattivaikutus"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Havaittua glukoosin muutosta, josta on vähennetty insuliinin mallinnettu vaikutus, voidaan käyttää hiilihydraattien imeytymisen arviointiin."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Suositeltu basaali"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Nimiö"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Nimiö"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Ennustettu glukoosi"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "ennuste 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Active Carbs"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glukoosi"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Nimiö"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Hiilihydraatit"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Suositeltu basaali"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/fr.lproj/InfoPlist.strings b/Loop/fr.lproj/InfoPlist.strings deleted file mode 100644 index 159de0fb7a..0000000000 --- a/Loop/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth est utilisé pour communiquer avec la pompe à insuline et les dispositifs de surveillance continue du glucose."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth est utilisé pour communiquer avec la pompe à insuline et les dispositifs de surveillance continue du glucose."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "La caméra est utilisée pour scanner les codes-barres des appareils."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID est utilisé pour authentifier le bolus d'insuline et sauvegarder les changements dans les réglages de thérapie."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Les données sur les repas provenant de la base de données Health sont utilisées pour déterminer les effets du glucose. Les données sur la glycémie de la base de données Health sont utilisées pour le calcul graphique et le calcul du momentum. Les données de sommeil provenant de la base de données Health sont utilisées pour améliorer les cadrans Apple Watch."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Les données de glucides des repas entrées dans l'application ou la montre sont enregistrées dans la base de donnée Santé. Les données de taux de glucose provenant du CGM sont enregistrées de manière sécurisée dans HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop utilise Siri pour vous permettre d’activer des préréglages avec votre voix."; - diff --git a/Loop/fr.lproj/Localizable.strings b/Loop/fr.lproj/Localizable.strings deleted file mode 100644 index 2ceefdadd7..0000000000 --- a/Loop/fr.lproj/Localizable.strings +++ /dev/null @@ -1,1208 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (en attente : %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Préréglage Pré-repas"; - -/* remaining time in setting's profile expiration section */ -" remaining" = "restant(s)"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = "Notifications de sécurité sont DÉSACTIVÉES"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Préréglage exercice"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "-"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbé(s)"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ restant"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ n'a pas pu annuler votre débit basal temporaire actuel, qui est supérieur à la nouvelle limite basale max que vous avez définie. Cela peut entraîner une administration d'insuline plus élevée que souhaitée. \n\nEnvisagez de suspendre l'administration d'insuline manuellement, puis de reprendre immédiatement l'administration basale avec la nouvelle limite en place."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ fonctionne avec la boucle fermée en position ARRÊT. Votre pompe et votre CGM continueront de fonctionner, mais l'application n'ajustera pas automatiquement le dosage."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ ne parvient pas à supprimer l'alerte de votre dispositif."; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ ne parvient pas à communiquer avec votre pompe à insuline. L’application continuera d’essayer d’atteindre votre pompe, mais les informations sur l’administration d’insuline ne peuvent pas être mises à jour et aucune automatisation ne peut continuer.\nVous pouvez attendre quelques minutes pour voir si le problème est résolu ou appuyer sur le bouton ci-dessous pour en savoir plus sur les autres options."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Paramètres d'heure requierent une attention"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ U"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U restantes"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U restantes: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/heure @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ cessera de fonctionner dans %2$@ . Vous devrez mettre à jour avant cela, avec un nouveau profil de provisioning."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "Coefficient de régression du glucose de 15 minutes (b1), décroissance poursuivie au-delà de 30 min."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "Comparaison sur 30 min de la glycémie prévue par rapport à celle réelle, suivie d'une décroissance (decay) sur 60 min."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Quelques secondes restantes"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Une saisie manuelle de la glycémie doit être comprise entre %1$@ et %2$@."; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Une saisie manuelle de la glycémie doit être comprise entre %1$@ et %2$@."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Un modèle basé sur l’absorption de l’insuline FIASP (telle que publiée)."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Un modèle basé sur les absorptions de l’Humalog, Novolog (Novorapid), et Apidra chez l’adulte (telles que publiées)."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Une nouvelle version de %@ est disponible et est recommandée pour continuer à utiliser l'application."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Une nouvelle version de %@ est disponible."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Une pompe doit être configurée avant qu'un bolus puisse être administré."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Glucides actifs"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Glucides actifs: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Glucides actifs"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Insuline active"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Insuline active: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Ajouter des glucides"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Ajouter un CGM"; - -/* The label of the meal button */ -"Add Meal" = "Entrer un repas"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Ajouter une pompe"; - -/* Title text for button to set up a service */ -"Add Service" = "Ajouter un service"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Ajusté(e) pour"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Gestion des alertes"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Autorisations d'alerte"; - -/* Navigation title for algorithms experiments screen -The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Essais d'algorithmes"; - -/* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Les essais d'algorithme sont des modifications optionnelles de l'algorithme Loop. Ces modifications sont moins testées que l'algorithme Loop standard, alors veuillez les utiliser avec précaution."; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Paramètres de l'algorithme"; - -/* Label for carb quantity entry row on carb entry screen */ -"Amount Consumed" = "Quantité consommée"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Un ajustement actif modifie votre ratio de glucides et votre sensibilité à l'insuline. Si vous ne voulez pas que cela affecte le calcul du bolus et votre glycémie projetée, envisagez de désactiver l'ajustement."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Une erreur est survenue lors de l'enregistrement de votre saisie manuelle de glucides."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Une erreur est survenue lors de l'enregistrement de votre saisie manuelle de glycémie."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Un état d'erreur innatendu a eu lieu durant le processus d'intégration"; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Une recommandation de bolus mise à jour est disponible."; - -/* The title of the amplitude API key credential */ -"API Key" = "Clé API"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "Secret API"; - -/* Settings app profile section */ -"App Profile" = "Profil de l'application"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Voulez-vous vraiment supprimer toutes les entrées de l’historique?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Voulez-vous vraiment supprimer toutes les entrées de dose enregistrées?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Voulez-vous vraiment supprimer toutes les valeurs de réservoir?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Voulez-vous vraiment effacer toutes vos valeurs de %@?\n(Cette action n'est pas réversible)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Voulez-vous vraiment supprimer ce CGM?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Voulez-vous vraiment supprimer ce service?"; - -/* Format fragment for a specific time */ -"at %@" = "à %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Authentifiez-vous pour faire un bolus de %@ Unités"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Authentifier pour enregistrer %@ unités"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Programme débit basal"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Débits basaux"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Sur la base de votre glycémie prévue, aucun bolus n’est recommandé."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth désactivé"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth\nIndisponible"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Bluetooth désactivé"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Bluetooth indisponible"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Problème avec le bolus"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Recommandation de Bolus modifiée"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Résumé du bolus"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus trop petit"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolus délivré %1$@ sur %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolus en cours %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Annuler"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Annulation du Bolus en cours"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Effets des glucides"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Entrée de glucides"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Programme des ratios Insuline-Glucides"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Ratios Insuline-Glucides"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Ajouter des glucides"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Les glucides saisis sont trop important"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Glucides"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Glucides Absorbés (g) ÷ Ratio Glucides (g/U) x Sensibilité à l'insuline (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Changer immédiatement la pile de la pompe"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Changer maintenant le réservoir de la pompe"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Vérifier les paramètres"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Vérifier que votre pompe est à portée"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Vérifier votre source de données CGM"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Vérifiez l'heure de votre appareil et/ou supprimez toute donnée invalide d'Apple Health."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choisissez un temps d’absorption plus long pour les gros repas ou ceux contenant des graisses et des protéines. Ceci est seulement un guide pour l'algorithme et n'a pas besoin d'être exact."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Fermer"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Boucle Fermé"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Boucle Ouverte"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Loop en boucle fermée requiert une session de capteur CGM active."; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Loop en boucle fermée nécessite une configuration complète"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "à %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "depuis %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Terminer la configuration"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Erreur de Configuration: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Continuer"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Lecteur de glycémie en continu"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Plage de correction"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Alertes critiques"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Journal des événements critiques prêt"; - -/* Critical event log export title */ -"Critical Event Logs" = "Journaux des événements critiques"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Les journaux d'événements critiques n'ont pas pu être exportés."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Glycémie actuelle"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Glycémie actuelle de %1$@ est en dessous de la plage de correction."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Ajustement personnalisé"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Préréglage personnalisé"; - -/* Date picker label */ -"Date" = "Date"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Supprimer"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Supprimer le compte"; - -/* Button title to delete all objects */ -"Delete All" = "Supprimer tout"; - -/* Button title to delete CGM */ -"Delete CGM" = "Supprimer le CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Supprimer le service"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Effacer les données de test du CGM"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Supprimer les données de Test"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Supprimer les données de la Pompe de test"; - -/* Button text to deliver a bolus */ -"Deliver" = "Administrer"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limites d'Administration"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Traitement du diabète"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Aviez-vous l'intention d'entrer %1$@ grammes comme quantité de glucides pour ce repas?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Désactive"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Fermer"; - -/* No comment provided by engineer. */ -"Done" = "Terminé"; - -/* Title for card to log dose */ -"Dose Summary" = "Résumé de la dose"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Stratégie de Dosage"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "La durée dépasse : %1$.1f heures"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Activer \nbluetooth"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Active"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Entrez la glycémie à partir d'un mesure manuelle pour le calcul du bolus."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Entrer un Bolus"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Entrez la Glycémie capillaire"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Entrez la limite de sécurité du taux de glucose"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Entrez le seuil de suspension"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Erreur lors de l’annulation du Bolus"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Erreur lors de l'exportation des journaux"; - -/* The alert title for a resume error */ -"Error Resuming" = "Erreur lors de la reprise"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Historique des événements"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Finalement %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Dépasse le bolus maximal défini dans les paramètres"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Dépasse le nombre de glucides maximal accepté"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Dépasse le bolus maximal"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Exporter les journaux d'événements critiques"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Export-%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Échec de la reprise de l’administration d’insuline"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Glucose capilaire"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Corrigez-le maintenant en activant les notifications, les alertes critiques et les notifications urgentes."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Pendant %1$@"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Le taux de glucose sanguin prévu pourrait quand-même être plus élevé que la plage cible."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Glycémie prévue"; - -/* Label for link to see frequently asked questions */ -"Frequently asked questions about alerts" = "Foire aux questions sur les alertes"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Obtenir de l'aide avec les autorisations d'alerte"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glycémie"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Les dernières données de glucose remontent à %1$@"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Les données de glucose ne sont pas disponibles"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Les données de glycémie sont maintenant disponibles"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "La glycémie saisie est hors de la plage."; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Momentum de glucose"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Horaire de la plage cible de glycémie"; - -/* No comment provided by engineer. */ -"HARDWARE SOUNDS" = "SONS MATÉRIELS"; - -/* No comment provided by engineer. */ -"High Glucose" = "Glycémie élevée"; - -/* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Comment puis-je désactiver temporairement tous les sons de l'application %1$@?"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Comment mettre à jour (LoopDocs)"; - -/* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Si le mode Concentration d'iOS est activé et que les Alertes Muettes sont désactivées, les Alertes Critiques seront toujours livrées et les Alertes non Critiques seront silencieuses jusqu'à ce que %1$@ soit ajouté à chaque mode Concentration en tant qu'application autorisée."; - -/* Immediate Delivery status text */ -"Immediate" = "Immédiat"; - -/* Algorithm Experiments description second paragraph. */ -"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "Dans les futures versions de Loop, ces essais peuvent changer, devenir des parties standard de l'algorithme Loop, ou être complètement retirées de Loop. Veuillez suivre le chat Zulip de Loop pour rester informé des éventuels changements sur ces fonctionnalités."; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indéfiniment"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insuline"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insuline Absorbée (U) × Sensibilité à l'Insuline (%1$@/U)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Les ajustements d’insuline ont été désactivés!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Administration de l'insuline"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Effets de l'insuline"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Modèle d'insuline"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Pompe à insuline"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Facteurs de sensibilité à l'insuline"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Horaire de facteur de sensibilité à l'insuline"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insuline suspendue"; - -/* Insulin type label */ -"Insulin Type" = "Type d'insuline"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Interrompu %1$@: %2$@ de %3$@ %4$@"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Quantité de bolus invalide"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Quantité de glucides invalide"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Données Incorrectes: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Glycémie future invalide"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lecture de glucose non valide avec un horodatage situé à %1$@ dans le futur"; - -/* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Les alertes critiques iOS et les alertes urgentes sont des types de notifications Apple. Elles sont utilisées pour des événements de haute priorité. Voici quelques exemples :"; - -/* No comment provided by engineer. */ -"IOS FOCUS MODES" = "MODES DE CONCENTRATION IOS"; - -/* The title text for the issue report cell */ -"Issue Report" = "Créer un rapport"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Il semble que vous n'ayez pas enregistré un repas que vous avez pris. Appuyez pour l'enregistrer maintenant."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Grand repas entré"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Lance l'application CGM"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "En savoir plus"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Moins d'une minute restante"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Chargement..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Enregistrer la dose"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Dose d'insuline enregistrée"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Panne de Loop"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Echec de Loop"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop a détecté un problème avec vos paramètres Bluetooth, et ne fonctionnera pas correctement tant que le Bluetooth ne sera pas activé. Vous ne pourrez pas recevoir de lectures de glucose, ni être en mesure de faire un bolus."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop a détecté un repas manqué et a estimé sa taille. Modifiez la quantité de glucides pour qu'elle corresponde à la quantité de glucides que vous avez peut-être mangée."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop n'a pas bouclé avec succès depuis %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop effectue automatiquement des bolus lorsque les besoins en insuline sont supérieurs au débit de base programmé, et utilise des débits basaux temporaires si nécessaire pour réduire l'administration d'insuline en dessous du débit de base programmé."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop ne fonctionnera pas correctement tant que le Bluetooth ne sera pas activé. Vous ne pourrez pas recevoir de lectures de glucose, ni être en mesure de faire un bolus."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop permet de définir des débits de base temporaires pour augmenter et diminuer l'administration d'insuline."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Glycémie basse"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Gérer les permissions dans les paramètres"; - -/* View title for how mute alerts work */ -"Managing Alerts" = "Gestion des Alertes"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Dosage manuel : %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Débit Basal Maximum par heure"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Bolus Maximum"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Bolus Maximum atteint"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Bolus de repas"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Notifications de repas manqués"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Données manquantes: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Bolus maximal autorisé manquant dans les paramètres"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Effets de momentum"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Plus d'informations"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Enlever le son de toutes les alertes"; - -/* Title for mute alert duration selection action sheet */ -"Mute All Alerts Temporarily" = "Désactiver temporairement toutes les alertes"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Demande votre attention"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Durée négative non autorisée"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Aucun Bolus Recommandé"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Pas d'appareil connecté, ou échec durant la connexion à l'appareil"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Aucun Bolus Maximum configuré"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Pas de pompe configurée"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Pas de Glycémie récente"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Pas de Glycémie récente"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Aucune donnée de pompe récente"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Non, modifier la quantité"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Notification de l'administration"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "L'envoi des notifications est réglé sur \"Résumé programmé\" dans les paramètres de votre téléphone.\n\nPour éviter tout retard dans la réception des notifications de %1$@, nous vous recommandons de régler l'envoi des notifications sur \"Envoi immédiat\"."; - -/* Notifications Status text */ -"Notifications" = "Notifications"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Notifications retardées"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Les notifications vous donnent des informations importantes sur l'application %1$@ sans avoir à l'ouvrir."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Les notifications vous donnent des informations importantes sur l’application %1$@ sans que vous ayez à ouvrir l’application.\n\nGardez-les activées dans les paramètres de votre téléphone pour vous assurer de recevoir Notifications, Alertes critiques et Notifications urgentes de %1$@."; - -/* Notification Setting Status is Off */ -"Off" = "Désactivé"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh non ! La boucle s'est arrêtée pendant le dosage, et les ajustements d'insuline ont été mis en pause jusqu'à ce que ce dialogue soit fermé. L'historique des dosages peut ne pas être exact. Veuillez revoir les tableaux d'administration d'insuline et surveiller attentivement votre glycémie."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Activé"; - -/* The title text for the override presets */ -"Override Presets" = "Préréglages ajustement"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Repas manqué possible"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Objectif de Pré-Repas"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Glycémie prévue à %1$@ est %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "La glycémie prévue est dans la plage."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "La glycémie estimée à %1$@ est sous le seuil de suspension."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Prédiction de la glycémie à %1$@ sous le seuil de suspension défini."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Prédit : %1$@\nRéel : %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Préparation des journaux d’événements critiques"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Expiration du profil"; - -/* Time that profile expires */ -"Profile expires " = "Le profil expire le "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Le profil expire bientôt"; - -/* The title of the pump section in settings */ -"Pump" = "Pompe"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Batterie de la pompe faible"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Les données de la pompe remontent à %1$@"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Événement pompe"; - -/* No comment provided by engineer. */ -"Pump Expired" = "Pompe Expirée"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Gestionnaire de pompe"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Erreur du gestionnaire de pompe : %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Réservoir de la pompe vide"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Réservoir de la pompe bas"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pompe suspendue"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pompe suspendue. Le dosage automatique est désactivé."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Action rapide - Adulte"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Action rapide - Enfant"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Recommandation expirée, remonte à %1$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Recommandation basal"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Basal Recommandé"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Le bolus recommandé dépasse le bolus maximal"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolus recommandé : %@ unités"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Entrée du bolus à distance : %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Entrée de glucides à distance : %d grammes"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Réservoir"; - -/* No comment provided by engineer. */ -"Reservoir Empty" = "Réservoir vide"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Correction rétrospective"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Réessayer"; - -/* No comment provided by engineer. */ -"Save" = "Sauvegarder"; - -/* No comment provided by engineer. */ -"Save as favorite food" = "Enregistrer comme aliment préféré"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Enregister sans Bolus"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Programmé"; - -/* No comment provided by engineer. */ -"Sensor Failed" = "Capteur\nDéfaillant"; - -/* The title of the services section in settings */ -"Services" = "Services"; - -/* The label of the settings button */ -"Settings" = "Paramètres"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Configuration incomplète"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Affiche la dernière erreur de Loop"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Calculateur Simplifié de Bolus"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Calculateur Simplifié de Repas"; - -/* Format fragment for a start time */ -"since %@" = "depuis %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL du site"; - -/* Software update button link text */ -"Software Update" = "Mise à jour logicielle"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Le temps de début est hors de la zone définie : %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "commence à %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Début du bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Support"; - -/* The title text in settings */ -"Suspend Threshold" = "Seuil de suspension"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Appuyez ici pour configurer un CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Appuyez ici pour paramétrer une pompe"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Appuyez ici pour configurer un service"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Ajout"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Appuyez pour reprendre"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Stop"; - -/* Settings app TestFlight section */ -"TestFlight" = "TestFlight"; - -/* Settings TestFlight expiration view */ -"TestFlight Expiration" = "Expiration de TestFlight"; - -/* Time that build expires */ -"TestFlight expires " = "TestFlight expire le "; - -/* The title for notification of upcoming TestFlight expiration */ -"TestFlight Expires Soon" = "TestFlight expire bientôt"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "La quantité de bolus saisie est inférieure au minimum délivrable."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "L'algorithme de dosage bolus utilise une estimation plus prudente de la glycémie prévue que celle utilisée pour ajuster votre débit basal. \n\nPar conséquent, votre glycémie prévue après un bolus peut rester supérieure à votre plage cible."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "La recommandation du bolus a changé. Veuillez reconfirmer la quantité du bolus"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Le modèle original utilisé par Loop, permettant de gérer la durée d'action de l'insuline."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "La quantité maximale autorisée est de %@ grammes"; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "La quantité maximum autorisée est de %@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "La quantité maximum du bolus est de %@ U."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Le bolus maximal est de %@ unités"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Le réglage de bolus maximum doit être configuré avant qu’un bolus puisse être effectué."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Réglages Thérapeutique"; - -/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Cette option ne s’applique que lorsque la stratégie de dosage de Loop est réglée sur Bolus automatique."; - -/* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Alertes Urgentes"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Notifications urgentes"; - -/* No comment provided by engineer. */ -"Transmitter Low Battery" = "Batterie faible de l'émetteur"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Réessayer"; - -/* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Désactivez le volume sur votre appareil iOS ou ajoutez %1$@ comme application autorisée à chaque mode Concentration. Les Alertes urgentes et critiques sonneront toujours, mais les Alertes non critiques seront silencieuses."; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Activez le Bluetooth pour recevoir des alertes, alarmes ou les données de capteurs de glycémie."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Impossible d'effacer l'alerte"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Impossible de contacter la pompe"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Impossible d'enregistrer la saisie des Glucides"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Impossible d’enregistrer la glycémie saisie"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Impossible d'arrêter le bolus en cours. Déplacez votre iPhone plus près de la pompe et réessayez. Vérifiez votre historique de distribution d'insuline pour plus de détails et surveillez votre glycémie de près."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Inconnu"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Erreur inconnue : %1$03d"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Préréglage inconnu : %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Temps inconnu"; - -/* The format for the description of a temporary override end date */ -"until %@" = "jusqu’à %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Jusqu'à l'apport de glucides"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Jusqu'à ce que je désactive"; - -/* No comment provided by engineer. */ -"Urgent Low" = "Urgent bas"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Utiliser le préréglage Pré-repas"; - -/* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Utilisez la fonction Muet Alertes. Elle vous permet de mettre temporairement en silence toutes vos alertes et alarmes via l'application %1$@, y compris les Alertes Critiques et les Alertes Urgentes."; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Utiliser les objectifs exercice"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Utiliser le préréglage exercice"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Attention! Les notifications de sécurité sont DÉSACTIVÉES"; - -/* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Quels sont des exemples d'alertes critiques et urgentes?"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Lorsque la glycémie actuelle ou prévue est inférieure au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Lorsque le glucose actuel ou prévu est inférieur au seuil de suspension, Loop ne recommandera pas de bolus et recommandera toujours un débit basal temporaire de 0 unité par heure."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Lorsqu'il est activé, Loop peut vous avertir lorsqu'il détecte un repas qui n'a pas été enregistré."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "En dehors du mode Boucle fermée, l'application utilise un calcul de bolus simplifié comme pour une pompe classique."; - -/* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Tant que les alertes muettes sont activées, toutes les alertes de votre application %1$@, y compris les alertes critiques et urgentes, s'afficheront temporairement sans son et vibreront uniquement."; - -/* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Lorsque les alertes sont en mode muettes, votre pompe à insuline et le matériel CGM peuvent toujours émettre des sons."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Objectifs d'exercice"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Le réglage de la température d'entraînement est activé depuis plus de 24 heures. Vérifiez que vous souhaitez toujours l'activer ou désactivez-le dans l'application. Vérifiez que vous souhaitez toujours le garder actif ou désactivez-le dans l'application."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Le préréglage exercice temporaire est encore actif"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Oui"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Il se peut que vous ne receviez pas d'alertes sonores, visuelles ou vibratoires concernant des informations de sécurité critiques. \n\n Pour résoudre le problème, appuyez sur \"Paramètres\" et assurez-vous que les notifications, les alertes critiques et les notifications exigeant une intervention rapide sont activées."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "L'heure de votre %1$@ a été modifiée. %2$@ a besoin d'enregistrements de temps précis pour établir des prédictions sur votre glycémie et ajuster votre insuline en conséquence. \n\nEnregistrez vos paramètres %1$@ (Général / Date et heure) et vérifiez que \"Régler automatiquement\" est activé. L'absence de résolution pourrait entraîner une sous-administration ou une sur-administration grave d'insuline."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Votre glycémie est inférieure à %1$@. Êtes-vous sûr de vouloir administrer un bolus?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Votre glycémie est en-dessous ou prévue pour aller en dessous de votre limite de sécurité de glycémie, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Votre glycémie est inférieure au seuil de suspension, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Votre glycémie est basse. Mangez des glucides et envisagez d'attendre pour le bolus jusqu'à ce que votre glycémie se situe dans une plage sûre."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Votre glycémie est basse. Mangez des glucides et surveillez de près."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "La quantité maximum de votre bolus est de %1$@ U."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Les données de votre pompe ne pas sont à jour. %1$@ ne peut pas faire de recommandation de bolus."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Votre pompe délivre un débit basal temporaire manuel."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Votre bolus recommandé dépasse votre bolus maximum de %1$@."; - diff --git a/Loop/fr.lproj/Main.strings b/Loop/fr.lproj/Main.strings deleted file mode 100644 index 497bc399f7..0000000000 --- a/Loop/fr.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Statut"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/heure @ 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Prédit"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Détail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Label"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Variation de la glycémie"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g total"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "La glycémie future est prédite en combinant les effets de plusieurs entrées. Utilisez cet outil pour basculer entre différentes entrées et comparer leur valeur à la prédiction finale."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Label"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "finalement 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observé"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/heure @ 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Effets des glucides"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Les variations observées dans la glycémie, soustrayant les variations modélisées d'administration d'insuline peuvent être utilisées pour estimer l'absorption des glucides."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Détail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Recommandation basal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Label"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Prédiction de glycémie"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "finalement 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g glucides actifs"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glycémie"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Label"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Glucides"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Recommandation basal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Titre"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/he.lproj/InfoPlist.strings b/Loop/he.lproj/InfoPlist.strings deleted file mode 100644 index 943e8b6cdc..0000000000 --- a/Loop/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth משמש לתקשורת עם משאבת אינסולין, חיישנים ומכשירים נוספים."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth משמש לתקשורת עם משאבת אינסולין, חיישנים ומכשירים נוספים."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "המצלמה משמשת לסריקת ברקודים של מכשירים."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID ישמש לאימות הזרקת בולוס ואישור שינויים בתוכנית הטיפול."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "נתוני ארוחות ממאגר Health משמשים לקביעת השפעות הגלוקוז. נתוני הגלוקוז ממסד Health הבריאות משמשים לגרפים ולחישוב מגמה. נתוני שינה ממסד Health משפרים את הנראות ב-Apple Watch."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "נתוני ארוחות הפחמימות המוזנים באפליקציה ובשעון נשמרים במסד Health. נתוני הגלוקוז שאוחזרו מה-CGM מאוחסנים בצורה מאובטחת ב-HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop משתמש ב-Siri כדי לאפשר לך להפעיל פקודות קוליות."; - diff --git a/Loop/he.lproj/Localizable.strings b/Loop/he.lproj/Localizable.strings deleted file mode 100644 index d0073e7dd5..0000000000 --- a/Loop/he.lproj/Localizable.strings +++ /dev/null @@ -1,883 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (pending: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "קדם-ארוחה"; - -/* remaining time in setting's profile expiration section */ -" remaining" = "נותר"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "פעילות גופנית"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "-"; - -/* No comment provided by engineer. */ -"– –" = "--"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbed"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U left"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U left: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/hour @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min glucose regression coefficient (b₁), continued with decay over 30 min"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min comparison of glucose prediction vs actual, continued with decay over 60 min"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "A model based on the published absorption of Fiasp insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Active Carbohydrates"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Active Carbohydrates: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Active Carbs"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Active Insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Active Insulin: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Add Carb Entry"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "הוסף חיישן"; - -/* The label of the meal button */ -"Add Meal" = "Add Meal"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Add Pump"; - -/* Title text for button to set up a service */ -"Add Service" = "Add Service"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algorithm Settings"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Settings app profile section */ -"App Profile" = "פרופיל אפליקציה"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "בטוח שברצונך למחוק את כל ערכי ההיסטוריה?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "בטוח שברצונך למחוק את כל ערכי המנות?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "בטוח שברצונך למחוק את כל ערכי המאגר?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "בטוח שברצונך למחוק את כל מידע %@?\n(פעולה זו בלתי הפיכה)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "בטוח שברצונך למחוק את חיישן זה?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "בטוח שברצונך למחוק את שירות זה?"; - -/* Format fragment for a specific time */ -"at %@" = "ב-%@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Authenticate to Bolus %@ Units"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basal Rate Schedule"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basal Rates"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "בהתבסס על הגלוקוז החזוי שלך, לא מומלץ שום בולוס."; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "המלצת בולוס התעדכנה"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "סיכום"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "בולוס קטן מדי"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolused %1$@ of %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolusing %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Cancel"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Canceling Bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Carb effects"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "פחמימות"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Carb Ratios"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "הוספת רשומת פחמימות"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "כמות פחמימות גדולה מדי"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carbohydrates"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Change the pump battery immediately"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Change the pump reservoir now"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Check settings"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Check that your pump is in range"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "בדוק את מקור המידע שלך בחיישן"; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact."; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Closed Loop"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "ב-%1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "מאז %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "אישור"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Configuration Error: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Continue"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Continuous Glucose Monitor"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Correction Range"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Current glucose of %1$@ is below correction range."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Custom Override"; - -/* Date picker label */ -"Date" = "תאריך"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "מחק"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "מחק חשבון"; - -/* Button title to delete all objects */ -"Delete All" = "מחק הכל"; - -/* Button title to delete CGM */ -"Delete CGM" = "מחק חיישן"; - -/* Button title to delete a service */ -"Delete Service" = "מחק שירות"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "מחק נתוני בדיקת חיישן"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "מחק נתוני בדיקה"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "מחק נתוני בדיקת משאבה"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Delivery Limits"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Disables"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "בטל"; - -/* No comment provided by engineer. */ -"Done" = "בוצע"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "משך זמן חורג: %1$.1f שעות"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Enables"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "הכנס קריאת מד סוכר כדי לקבל המלצה לכמות בולוס."; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "הכנס קריאת מד סוכר"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "הגדרת בטיחות"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Enter suspend threshold"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Error Canceling Bolus"; - -/* The alert title for a resume error */ -"Error Resuming" = "Error Resuming"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Event History"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Eventually %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Exceeds Maximum Bolus"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "קריאת מד סוכר"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "תקן כעת ע״י הפעלת התראות, התראות קריטיות והודעות רגישות לזמן"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "For %1$@"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "רמת הסוכר הצפויה עשויה עדיין להיות גבוהה מטווח היעד."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "סוכר צפוי"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glucose"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Glucose data is %1$@ old"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Glucose data not available"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glucose Momentum"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "כיצד לעדכן (LoopDocs)"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indefinitely"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulin Delivery"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulin effects"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulin Model"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulin Sensitivities"; - -/* Insulin type label */ -"Insulin Type" = "סוג האינסולין"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "כמות בולוס לא תקינה"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "כמות פחמימות לא תקינה"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Invalid data: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Issue Report"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "ייתכן ולא הזנת ארוחה שאכלת. לחץ כדי להזין אותה כעת."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "ארוחה גדולה נרשמה"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "מפעיל אפליקציית חיישן"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "מידע נוסף"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "נותרה פחות מדקה"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Loading..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop Failure"; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop זיהה ארוחה שלא הוזנה והעריך את גודלה. ערוך את מספר הפחמימות כדי להתאים אותו לזה שאכלת."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop has not completed successfully in %@"; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop לא תעבוד עד הפעלת Bluetooth. לא תוכל לקבל נתוני גלוקוז או להזריק בולוס."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop תגדיר בזאלי זמני כדי להגדיל ולהקטין מתן אינסולין."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "גלוקוז נמוך"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "קבע הרשאות בהגדרות"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "כמות ידנית: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "בזאלי מקסימלי לשעה"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "בולוס מקסימלי"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "חריגה מבולוס מקסימלי"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "בולוס לכיסוי ארוחה"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "התראה על ארוחות שלא הוזנו"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "נתונים חסרים: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "בולוס מקסימלי חסר בהגדרות"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "השפעות מומנטום"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "מידע נוסף"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "השתק את כל ההתראות"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "דורש תשומת לב"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "משך זמן שלילי לא מותר"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "אין המלצה לבולוס"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "אין מכשירים מחוברים, או שישנה שגיאת התחברות."; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "לא הוגדר בולוס מקסימלי"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "לא הוגדרה משאבה"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "אין גלוקוז לאחרונה"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "אין נתוני גלוקוז אחרונים"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "אין נתוני משאבה אחרונים"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "לא, ערוך כמות"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "משלוח הודעות"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "משלוח התראות מוגדר לסיכום מתוזמן בהגדרות הטלפון שלך. \n\n כדי למנוע עיכוב בקבלת התראות מ- %1$@ , אנו ממליצים להגדיר את משלוח ההתראות למשלוח מיידי."; - -/* Notifications Status text */ -"Notifications" = "התראות"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "התראות מתעכבות"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "התראות מעבירות לך מידע חשוב על האפליקציה %1$@ מבלי לדרוש ממך לפתוח את האפליקציה."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "התראות מעניקות לך מידע חשוב על %1$@ מבלי לדרוש ממך לפתוח את האפליקציה.\n\nכדי להבטיח שתקבל התראות %1$@, התראות קריטיות והתראות רגישות לזמן, וודא שהן מופעלות."; - -/* Notification Setting Status is Off */ -"Off" = "כבוי"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "אוי לא! Loop קרסה בזמן הזרקה והתאמות אינסולין נעצרו עד שתסגור חלון זה. ייתכן שהיסטוריות ההזרקות לא תהיה מדוייקת. עיין בגרף מתן האינסולין ועקוב אחר הגלוקוז שלך מקרוב."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "אישור"; - -/* Notification Setting Status is On */ -"On" = "מופעל"; - -/* The title text for the override presets */ -"Override Presets" = "עקוף הגדרות מוגדרות מראש"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "ייתכן שארוחה לא הוזנה"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "יעדים לפני הארוחה"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "הגלוקוז החזוי ב- %1$@ הוא %2$@ ."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "הגלוקוז החזוי נמצא בטווח."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "הגלוקוז החזוי %1$@ נמוך מגבול הבטיחות שהגדרת."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "הגלוקוז החזוי %1$@ נמוך מסך ההשהייה שהגדרת."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "חזוי: %1$@\nבפועל: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "מכין יומן שגיאות קריטיות"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "תפוגת פרופיל"; - -/* Time that profile expires */ -"Profile expires " = "פרופיל יפוג"; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "פרופיל פג בקרוב"; - -/* The title of the pump section in settings */ -"Pump" = "משאבה"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "סוללת משאבה חלשה"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "מידע משאבה: לפני %1$@"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "אירוע משאבה"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "מנהל משאבה"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "שגיאה במנהל שאבה: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "מאגר משאבה ריק"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "מאגר משאבה נמוך"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "משאבה מושהית"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "משאבה מושהית. מינון אוטומטי מושבת."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "אינסולין מהיר - מבוגרים"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "אינסולין מהיר - ילדים"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "המלצה פגה: לפני %1$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "בזאלי מומלץ"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "בולוס מומלץ"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "בולוס מומלץ גבוה מבולוס מקסימלי"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "בולוס מומלץ: %@ יחידות"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "הזרקת בולוס מרחוק: %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "הזנת פחמימות מרחוק: %d גרם"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "מאגר"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "תיקון לאחור"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "נסה שוב"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "שמור ללא הזרקת בולוס"; - -/* Scheduled Delivery status text */ -"Scheduled" = "מתוזמן"; - -/* The title of the services section in settings */ -"Services" = "שירותים"; - -/* The label of the settings button */ -"Settings" = "הגדרות"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "הגדרה לא הושלמה"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Shows last loop error"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "מחשבון בולוס פשוט"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "מחשבון ארוחה פשוט"; - -/* Format fragment for a start time */ -"since %@" = "מאז %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "כתובת האתר"; - -/* Software update button link text */ -"Software Update" = "עדכון תוכנה"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "זמן התחלה מחוץ לטווח: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "מתחיל ב-%@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "מתחיל בולוס"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "תמיכה"; - -/* The title text in settings */ -"Suspend Threshold" = "סף השהייה"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "לחץ כאן להגדיר חיישן"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "לחץ כאן להגדיר משאבה"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "לחץ כאן להגדיר שירות"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "לחץ להוסיף"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "לחץ להמשך"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "לחץ לעצור"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "כמות הבולוס שהכנסת נמוכה מהכמות המינימלית."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "אלגוריתם מינון הבולוס משתמש באומדן שמרני יותר של צפי הגלוקוז ממה שמשמש כדי להתאים את הקצב הבזאל שלך.\n\nכתוצאה מכך, הגלוקוז הצפוי לאחר בולוס עדיין עשוי להיות גבוה מטווח היעד שלך."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "המלצת הבולוס עודכנה. אשר מחדש את כמות הבולוס."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "מודל מדור קודם בשימוש Loop, מאפשר שינוי משך זמן פעולה."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "כמות מקסימלית מותרת היא: %@ גרם."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "כמות מקסימלית מותרת היא: %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "בולוס מקסימלי הוא %@ U."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "בולוס מקסימלי הוא %@ יחידות."; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "יש לקבוע הגדרת בולוס מקסימלי לפני מתן בולוס."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "תכנית טיפול"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "הודעות רגישות לזמן"; - -/* Critical event log export error alert try again button */ -"Try Again" = "נסה שוב"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "הפעל את Bluetooth כדי לקבל תזכורות, התראות או קריאות גלוקוז."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "לא ניתן לבטל התראה"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "לא ניתן לתקשר עם המשאבה"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "לא ניתן לשמור ערך פחמימות"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "לא ניתן לשמור ערך גלוקוז ידני"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "לא ניתן להפסיק את הבולוס בתהליך. קרב את האייפון שלך למשאבה ונסה שוב. בדוק את היסטוריית מתן האינסולין שלך, ועקוב מקרוב אחר הגלוקוז שלך."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "לא ידוע"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "תקלה לא ידועה %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "הגדרה לא ידועה: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "זמן לא ידוע"; - -/* The format for the description of a temporary override end date */ -"until %@" = "עד %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "עד שאזין פחמימות"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "עד שאכבה"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "השתמש בהגדרת טרום-ארוחה"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "השתמש בטווחי גלוקוז לאימון"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "השתמש בהגדרת אימון"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "אזהרה! התראות בטיחות כבויות"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "כאשר גלוקוז נוכחי או צפוי קטן מגבול הבטיחות, Loop לא תמליץ על בולוס, ותמיד תמליץ על קצב בזאלי זמני של 0 יחידות לשעה."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "כאשר גלוקוז נוכחי או צפוי קטן מסף ההשהיה, Loop לא תמליץ על בולוס, ותמיד תמליץ על בזאלי זמני של 0 יחידות לשעה."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "בהפעלה, Loop יכול להודיע לך כשהוא מזהה ארוחה שלא הוזנה."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "ב-Loop פתוח האפליקציה תחשב ערכי בולוס בצורה פשוטה, כמו משאבה רגילה."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "טווחים באימון"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "התאמה זמנית באימון מופעלת במשך יותר מ-24 שעות. ודא שאתה עדיין רוצה שהיא תופעל, או כבה אותה באפליקציה."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "התאמה זמנית באימון עדיין מופעלת"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "כן"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "ייתכן שלא תקבל התראות קוליות, חזותיות או רטט בנוגע למידע בטיחותי קריטי.\n\nכדי לתקן את הבעיה, הקש על 'הגדרות' וודא שהתראות, התראות קריטיות והודעות רגישות לזמן מופעלות."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "הזמן של %1$@ השתנה. %2$@ צריך זמן מדויק כדי לחזות את הגלוקוז שלך ולאזן את מתן האינסולין.\n\nבדוק את הגדרות הזמן ב-%1$@ כדי לוודא שהוא מכוון אוטומטית, אחרת ייתכנו השפעות רציניות על מתן נמוך או גבוה מדי של אינסולין."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "הגלוקוז שלך נמוך מ-%1$@. בטוח שברצונך להזריק בולוס?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "הגלוקוז שלך נמוך או חזוי להיות נמוך מגבול הביטחון, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "הגלוקוז שלך נמוך מגבול הביטחון %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "הגלוקוז שלך נמוך. אכול פחמימות ושקול להמתין עם הבולוס עד שהגלוקוז יגיע לטווח בטוח."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "הגלוקוז שלך נמוך. אכול פחמימות ועקוב מקרוב."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "כמות הבולוס המקסימלית שלך היא %1$@."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "מידע מהמשאבה שלך מיושן. %1$@ לא יכול להמליץ על כמות בולוס."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "המשאבה שלך מזליפה בזאלי ידני זמני."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "הבולוס המומלץ עבורך גבוה מכמות הבולוס המקסימלית של %1$@."; - diff --git a/Loop/he.lproj/Main.strings b/Loop/he.lproj/Main.strings deleted file mode 100644 index 5a322ca08f..0000000000 --- a/Loop/he.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "מצב"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/hour @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Predicted"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Label"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Glucose Change"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Total"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Label"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "eventually 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observed"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/hour @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Carbohydrate Effects"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Recommended Basal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Label"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Predicted Glucose"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "eventually 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Active Carbs"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glucose"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Label"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Carbohydrates"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Recommended Basal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/hi.lproj/Localizable.strings b/Loop/hi.lproj/Localizable.strings deleted file mode 100644 index a2dff39148..0000000000 --- a/Loop/hi.lproj/Localizable.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "एपीआई पास्वर्ड"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "निरस्त"; - -/* Default alert dismissal */ -"Continue" = "जारी"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "शुगर"; - diff --git a/Loop/hi.lproj/Main.strings b/Loop/hi.lproj/Main.strings deleted file mode 100644 index 82a5ef7956..0000000000 --- a/Loop/hi.lproj/Main.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "शुगर"; - diff --git a/Loop/it.lproj/InfoPlist.strings b/Loop/it.lproj/InfoPlist.strings deleted file mode 100644 index 9e803ffc85..0000000000 --- a/Loop/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - NFC Scan Usage Description */ -"NFCReaderUsageDescription" = "L'app utilizza NFC per l'abbinamento con i dispositivi per il diabete."; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Il Bluetooth viene utilizzato per comunicare con le pompe d'insulina e con i dispositivi di monitoraggio continuo della glicemia."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Il Bluetooth viene utilizzato per comunicare con le pompe d'insulina e con i dispositivi di monitoraggio continuo della glicemia."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "La fotocamera è utilizzata per scansionare i codici a barre dei tuoi dispositivi."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID viene utilizzato per autenticare il bolo d'insulina e per salvare le modifiche alle impostazioni della terapia."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "I dati sui pasti dal database Salute vengono utilizzati per determinare gli effetti del glucosio. I dati del glucosio del database Salute vengono utilizzati per il calcolo del grafico della glicemia."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop utilizza Siri per permettere l'attivazione dei Preset con la tua voce."; - diff --git a/Loop/it.lproj/Localizable.strings b/Loop/it.lproj/Localizable.strings deleted file mode 100644 index fbd96204d6..0000000000 --- a/Loop/it.lproj/Localizable.strings +++ /dev/null @@ -1,1318 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (in attesa: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Preset pre-pasto"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " rimanenti"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = " Le notifiche di sicurezza sono disattivate"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Preset allenamento"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ assorbiti"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ rimanenti"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Totali"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ non sono stati in grado di cancellare la tua attuale basale temporanea, che è più elevata di quella impostata come nuovo limite massimo di basale. Questo potrebbe comportare una maggiore infusione d'insulina di quanto desiderato. \n\nConsidera di sospendere manualmente l'erogazione d'insulina e quindi di riattivarla immediatamente per attivare l'erogazione d'insulina basale con il corretto limite impostato."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* App sounds title text (1: app name) */ -"%1$@ APP SOUNDS" = "%1$@ SUONI DELL'APP"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ è in funzione con Loop chiuso disattivato. La pompa e il CGM continueranno a funzionare, ma l'applicazione non regolerà automaticamente il dosaggio."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ non è in grado di cancellare l'avviso dal tuo dispositivo"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ non riesce a comunicare con la pompa. L'app continuerà a provare a contattare la pompa, ma le informazioni sull'erogazione dell'insulina non possono essere aggiornate e l'automazione non può proseguire. \nPuoi attendere alcuni minuti per vedere se il problema si risolve oppure toccare il pulsante qui sotto per saperne di più sulle altre opzioni."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Le impostazioni dell'orario richiedono attenzione"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ U"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U rimaste"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U rimaste: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/ora @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario ricostruirlo."; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ smetterà di funzionare tra %2$@. Prima di allora, sarà necessario effettuare l'aggiornamento con un nuovo profilo di provisioning."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "Coefficiente di regressione della glicemia a 15 minuti (b₁), continuato con decadimento per 30 minuti"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "Confronto di 30 minuti tra la previsione della glicemia e quella effettiva, continuato con decadimento per 60 minuti"; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Pochi secondi rimanenti"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Un inserimento manuale della glicemia deve essere compreso tra %1$@ e %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Un inserimento manuale della glicemia deve essere compreso tra %1$@ e %2$@."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Un modello basato sull'assorbimento pubblicato dell'insulina Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Un modello basato sull'assorbimento pubblicato dell'insulina Humalog, Novolog e Apidra negli adulti."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "È disponibile una nuova versione di %@ e si consiglia di continuare a utilizzare l'app."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "È disponibile una nuova versione di %@."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Prima di poter erogare un bolo, è necessario configurare una pompa."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Carboidrati attivi"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Carboidrati attivi: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Carboidrati attivi"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Insulina attiva"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Insulina attiva: %@"; - -/* No comment provided by engineer. */ -"Add a new favorite food" = "Aggiungi un nuovo cibo preferito"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Aggiungi inserimento carboidrati"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Aggiungi CGM"; - -/* The label of the meal button */ -"Add Meal" = "Aggiungi pasto"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Aggiungi pompa"; - -/* Title text for button to set up a service */ -"Add Service" = "Aggiungi servizio"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Regolato per"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Gestione avvisi"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Permessi di avviso"; - -/* Alert Permissions descriptive text */ -"Alert Permissions and Mute Alerts" = "Autorizzazioni avvisi e avvisi disattivati"; - -/* Navigation title for algorithms experiments screen -The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Esperimenti algoritmo"; - -/* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Gli esperimenti sull'algoritmo sono modifiche opzionali all'algoritmo di Loop. Queste modifiche sono meno testate rispetto all'algoritmo Loop standard, quindi utilizzale con attenzione."; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Impostazioni algoritmo"; - -/* Warning text for when alerts are muted */ -"All Alerts Muted" = "Tutti gli avvisi disattivati"; - -/* Label for when mute alert will end */ -"All alerts muted until" = "Tutti gli avvisi disattivati fino a"; - -/* No comment provided by engineer. */ -"All Favorites" = "Tutti i preferiti"; - -/* Label for carb quantity entry row on carb entry screen */ -"Amount Consumed" = "Quantità consumata"; - -/* The title of the Amplitude service */ -"Amplitude" = "Ampiezza"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Un Override attivo sta modificando il rapporto di carboidrati e la sensibilità insulina. Se non si vuole che questo influisca sul calcolo del bolo e sulla glicemia prevista, si consiglia di disattivare la funzione di Override."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Si è verificato un errore durante il tentativo di salvare l'inserimento dei carboidrati."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Si è verificato un errore durante il tentativo di salvare l'inserimento manuale della glicemia."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Si è verificato un errore di onboarding imprevisto."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "È disponibile una raccomandazione aggiornata sul bolo."; - -/* The title of the amplitude API key credential */ -"API Key" = "Chiave API"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "Chiave personale API"; - -/* Settings app profile section */ -"App Profile" = "Profilo app"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Sei sicuro di voler eliminare tutte le voci della cronologia?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Sei sicuro di voler eliminare tutte le dosi inserite?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Sei sicuro di voler eliminare tutti i valori del serbatoio?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Sei sicuro di voler eliminare tutti i tuoi dati %@ ?\n (Questa azione non è reversibile)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Sei sicuro di voler eliminare questo CGM?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete this food?" = "Sei sicuro di voler eliminare questo cibo?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Sei sicuro di voler eliminare questo servizio?"; - -/* Format fragment for a specific time */ -"at %@" = "a %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Esegui l'autenticazione per il bolo di %@ Unità"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Esegui l'autenticazione per registrare %@ Unità"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Tabella di velocità basale"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Velocità basali"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "In base alla glicemia prevista, non è consigliato alcun bolo."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth\nDisattivato"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth\nNon disponibile"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Avviso Bluetooth disattivato"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Avviso Bluetooth non disponibile"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolo"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Problema con il bolo"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Raccomandazioni sul bolo aggiornate"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Riepilogo bolo"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolo troppo piccolo"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolo %1$@ di %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolo in corso %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Annulla"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Annullamento bolo in corso"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Effetto carboidrati"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Carboidrati inseriti"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Tabella del rapporto carboidrati"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Rapporti carboidrati"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Aggiungi inserimento carboidrati"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Carboidrati inseriti troppo alti"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carboidrati"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carboidrati assorbiti ÷ Rapporto carboidrati (gr/U) × Sensibilità insulinica (%1$@/U)"; - -/* No comment provided by engineer. */ -"Caution" = "Attenzione"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Sostituisci immediatamente la batteria della pompa"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Cambia ora il serbatoio della pompa"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Controlla le impostazioni"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Controlla che la pompa sia nel raggio d'azione"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Controlla la sorgente dati del sensore"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Controlla l'orario del tuo dispositivo e/o rimuovi eventuali dati non validi da Apple Salute."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Scegli un periodo di assorbimento piu lungo per i pasti piu grandi o quelli contenenti grassi e proteine. Questa e solo una guida all’algoritmo e non e necessario che sia esatta."; - -/* No comment provided by engineer. */ -"Choose Favorite:" = "Scegli il preferito:"; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Chiudi"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Loop chiuso"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Loop chiuso disattivato"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Loop chiuso richiede almeno una sessione attiva del sensore CGM"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Loop chiuso richiede che la configurazione sia completata"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "a %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "da %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Completa configurazione"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configurazione"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Errore di configurazione: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Continua"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Monitoraggio continuo glicemia"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Intervallo di correzione"; - -/* Format string for title of reset loop alert. (1: App name) */ -"Could Not Restart %1$@" = "Impossibile riavviare %1$@"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Avvisi critici"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Registro eventi critici pronto"; - -/* Critical event log export title */ -"Critical Event Logs" = "Registri eventi critici"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Non è stato possibile esportare i registri degli eventi critici."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Glicemia attuale"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "La glicemia attuale di %1$@ è al di sotto dell'intervallo glicemico."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Override personalizzato"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Programmazione"; - -/* Date picker label */ -"Date" = "Data"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Elimina"; - -/* No comment provided by engineer. */ -"Delete “%@”?" = "Eliminare \"%@\" ?"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Elimina account"; - -/* Button title to delete all objects */ -"Delete All" = "Elimina tutto"; - -/* Button title to delete CGM */ -"Delete CGM" = "Elimina CGM"; - -/* No comment provided by engineer. */ -"Delete Food" = "Elimina cibo"; - -/* Button title to delete a service */ -"Delete Service" = "Elimina servizio"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Elimina dati test CGM"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Elimina dati test"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Elimina dati test della pompa"; - -/* Button text to deliver a bolus */ -"Deliver" = "Eroga"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limiti erogazione"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Terapia"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Intendevi inserire %1$@ grammi come quantità di carboidrati per questo pasto?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Disattiva"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "OK"; - -/* No comment provided by engineer. */ -"Done" = "Fine"; - -/* Title for card to log dose */ -"Dose Summary" = "Riepilogo della dose"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Strategia di dosaggio"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "La durata supera: %1$.1f ore"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Attiva\nBluetooth"; - -/* Title for Glucose Based Partial Application toggle */ -"Enable Glucose Based Partial Application" = "Attiva Applicazione parziale basata sulla glicemia (GBPA)"; - -/* Title for Integral Retrospective Correction toggle */ -"Enable Integral Retrospective Correction" = "Attiva Correzione retrospettiva integrale (IRC)"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Attiva"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Inserirsci la glicemia capillare per ottenere la quantità di bolo consigliata."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Inserisci bolo"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Inserirsci glicemia capillare"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Inserisci limite di sicurezza glicemia"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Inserisci soglia di sospensione"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Errore durante l'annullamento del bolo"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Errore durante l'esportazione dei registri"; - -/* The alert title for a resume error */ -"Error Resuming" = "Errore durante la ripresa"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Cronologia degli eventi"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Infine %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Supera il bolo massimo consentito nelle impostazioni"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Supera i carboidrati massimi consentiti"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Supera il bolo massimo"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Esporta registri eventi critici"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Esporta- %1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Impossibile riprendere l'erogazione dell'insulina"; - -/* No comment provided by engineer. */ -"FAVORITE FOODS" = "CIBI SALVATI"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Glicemia capillare"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Risolvilo ora attivando notifiche, avvisi critici e notifiche sensibili al tempo."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Per %1$@"; - -/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ -"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Per motivi di sicurezza, dovresti consentire gli avvisi critici, gli avvisi sensibili al tempo e le autorizzazioni di notifica (avvisi non critici) sul tuo dispositivo per continuare a utilizzare %1$@ e non puoi disattivare i singoli allarmi."; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "La glicemia prevista potrebbe essere più elevata di quella impostata come obiettivo."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Glicemia prevista"; - -/* Label for link to see frequently asked questions */ -"Frequently asked questions about alerts" = "Domande frequenti sugli avvisi"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Ottieni assistenza per le autorizzazioni"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glicemia"; - -/* Title for glucose based partial application experiment description -Title of glucose based partial application experiment */ -"Glucose Based Partial Application" = "Applicazione parziale basata sulla glicemia (GBPA)"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "I dati sulla glicemia sono vecchi di %1$@"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Dati sulla glicemia non disponibili"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Dati glicemia ora disponibili"; - -/* Description of the prediction input effect for suspension of insulin delivery */ -"Glucose effect of suspending insulin delivery" = "Effetto sulla glicemia della sospensione dell'erogazione d'insulina"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Glicemia inserita fuori intervallo"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Momento della glicemia"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Programma di intervalli target di glicemia"; - -/* No comment provided by engineer. */ -"HARDWARE SOUNDS" = "SUONI HARDWARE"; - -/* No comment provided by engineer. */ -"High Glucose" = "Glicemia alta"; - -/* No comment provided by engineer. */ -"How can I silence non-Critical Alerts?" = "Come posso silenziare gli avvisi non critici?"; - -/* No comment provided by engineer. */ -"How can I silence only Time Sensitive and Non-Critical alerts?" = "Come posso silenziare solo gli avvisi sensibili al tempo e non critici?"; - -/* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Come posso silenziare temporaneamente tutti i suoni dell'app %1$@ ?"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Come Aggiornare (LoopDocs)"; - -/* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Se la modalità Focus iOS è attiva e Disattiva avvisi è disattivata, gli avvisi critici verranno comunque inviati e gli avvisi non critici verranno silenziati finché %1$@ non verrà aggiunto a ciascuna modalità Focus come app consentita."; - -/* Immediate Delivery status text */ -"Immediate" = "Immediato"; - -/* Algorithm Experiments description second paragraph. */ -"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "Nelle versioni future di Loop questi esperimenti potrebbero cambiare, diventare parti standard dell'algoritmo Loop o essere rimossi completamente da Loop. Segui la chat di Loop Zulip per rimanere informato su possibili modifiche a queste funzionalità."; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indefinitamente"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulina"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulina assorbita (U) × Sensibilità insulinica (%1$@/U)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Le regolazioni dell'insulina sono state disattivate!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Erogazione insulina"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Effetto dell’insulina"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Modello di azione dell'Insulina"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Pompa"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Sensibilità insulinica"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Programma di sensibilità insulinica"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insulina sospesa"; - -/* Insulin type label */ -"Insulin Type" = "Tipo d'insulina"; - -/* Title for integral retrospective correction experiment description -Title of integral retrospective correction experiment */ -"Integral Retrospective Correction" = "Correzione retrospettiva integrale (IRC)"; - -/* Description of Integral Retrospective Correction toggle. */ -"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Correzione retrospettiva integrale (IRC) è un'estensione del componente standard dell'algoritmo di correzione retrospettiva (RC) in Loop, che regola la previsione in base alla cronologia delle discrepanze tra i livelli di glicemia previsti e quelli effettivi. \n\nA differenza di RC, che esamina le discrepanze negli ultimi 30 minuti, con IRC la cronologia delle discrepanze si accumula nel tempo. Pertanto, continue discrepanze positive nel tempo comporteranno un aumento del dosaggio. Se le discrepanze diventano negative nel tempo, Loop ridurrà ulteriormente il dosaggio."; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Interrotto %1$@: %2$@ di %3$@ %4$@"; - -/* Carb error description: invalid absorption time. (1: Input duration in hours). */ -"Invalid absorption time: %1$@ hours" = "Periodo di assorbimento non valido: %1$@ ore"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Quantità bolo non valida"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Quantità di carboidrati non valida"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Dati non validi: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Glicemia futura non valida"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Lettura della glicemia non valida con data e ora %1$@ nel futuro"; - -/* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "gli avvisi critici e gli avvisi sensibili al tempo di iOS sono tipi di notifiche Apple. Vengono utilizzati per eventi ad alta priorità. Alcuni esempi sono:"; - -/* No comment provided by engineer. */ -"IOS FOCUS MODES" = "MODALITÀ FOCUS IOS"; - -/* The title text for the issue report cell */ -"Issue Report" = "Report problemi"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Sembra che non sia stato registrato un pasto consumato. Tocca per registrarlo ora."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Pasto abbondante inserito"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Avvia l'app CGM"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Ulteriori informazioni"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Meno di un minuto rimanente"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Caricamento in corso..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Registra dose"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Dose d'insulina registrata"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop è crashato"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Malfunzionamento di Loop"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop ha rilevato un problema con le tue impostazioni Bluetooth e non funzionerà correttamente finché il Bluetooth non sarà attivato. Non riceverai letture glicemiche né potrai eseguire il bolo."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop ha rilevato un pasto saltato e ne ha stimato le dimensioni. Modifica la quantità di carboidrati in modo che corrisponda alla quantità di carboidrati che potresti aver mangiato."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop non ha funzionato correttamente per %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop eseguirà automaticamente il bolo quando il fabbisogno d'insulina è superiore alla basale programmata e utilizzerà velocità basali temporanee quando necessario per ridurre l'erogazione d'insulina al di sotto della basale programmata."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop non funzionerà correttamente fino a quando il Bluetooth non sarà attivato. Non riceverai letture glicemiche né potrai eseguire il bolo."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop imposterà velocità basali temporanee per aumentare e diminuire l'erogazione d'insulina."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Glicemia bassa"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Gestisci le autorizzazioni in Impostazioni"; - -/* View title for how mute alerts work */ -"Managing Alerts" = "Gestione degli avvisi"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Dose manuale: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Velocità basale massima all'ora"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Bolo massimo"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Bolo massimo superato"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Bolo pasto"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Notifiche di pasti mancati"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Dati mancanti: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Manca il bolo massimo consentito nelle impostazioni"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Effetti del momento"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Ulteriori informazioni"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Disattiva tutti gli avvisi"; - -/* Title for mute alert duration selection action sheet */ -"Mute All Alerts Temporarily" = "Disattiva temporaneamente tutti gli avvisi"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Richiede attenzione"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Durata negativa non consentita"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Message for mute alert duration selection action sheet */ -"No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Nessun avviso o allarme suonerà quando l'audio è disattivato. Seleziona per quanto tempo desideri disattivare l'audio."; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Nessun bolo consigliato"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Nessun dispositivo connesso o mancanza di segnale durante la connessione del dispositivo"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Nessun bolo massimo configurato"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Nessuna pompa configurata"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Nessuna glicemia recente"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Nessun dato recente sulla glicemia"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Nessun dato recente sulla pompa"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "No, modifica la quantità"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Invio delle notifiche"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "L'invio delle notifiche è impostato su Riepilogo pianificato nelle impostazioni del telefono. \n\nPer evitare ritardi nella ricezione delle notifiche da %1$@ , ti consigliamo di impostare l'invio delle notifiche su Consegna immediata."; - -/* Notifications Status text */ -"Notifications" = "Notifiche"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Notifiche ritardate"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Le notifiche ti forniscono informazioni importanti sull'app %1$@ senza che tu debba aprire l'app. \n\nTienile attive nelle impostazioni del tuo telefono per assicurarti di ricevere %1$@ notifiche, avvisi critici e notifiche sensibili al tempo."; - -/* Notification Setting Status is Off */ -"Off" = "Disattivato"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh No! Loop si è chiuso mentre stava eseguendo un bolo e il dosaggio d'insulina è stato messo in pausa, finchè la finestra sarà chiusa. L'elenco dell'infusione d'insulina potrebbe non essere accurato. Per favore rivedi con attenzione la tabella di infusione dell'insulina e sorveglia strettamente la tua glicemia"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Attivato"; - -/* The title text for the override presets */ -"Override Presets" = "Override"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Possibile pasto saltato"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Obiettivo pre-pasto"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "La glicemia prevista a %1$@ è di %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "La glicemia prevista è nell'intervallo"; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "La glicemia prevista da %1$@ è al di sotto del tuo limite glicemico di sicurezza."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "La glicemia prevista %1$@ è inferiore al valore soglia per la sospensione dell'erogazione."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Previsto: %1$@\nEffettivo: %2$@ (%3$@)"; - -/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "previsione-descrizione-integrale-correzione-retrospettiva"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Preparazione dei registri degli eventi critici in corso"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Scadenza profilo"; - -/* Time that profile expires */ -"Profile expires " = "Il profilo scade "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Il profilo scade a breve"; - -/* The title of the pump section in settings */ -"Pump" = "Pompa"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Batteria della pompa scarica"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "I dati forniti dalla pompa sono di %1$@ fa"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Evento pompa"; - -/* No comment provided by engineer. */ -"Pump Expired" = "Pompa scaduta"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pump Manager"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Errore Pump Manager: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Serbatoio della pompa vuoto"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Serbatoio della pompa scarico"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pompa sospesa"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pompa sospesa. Il dosaggio automatico è disattivato."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Insulina ultrarapida – Adulti"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Insulina ultrarapida – Bambini"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "La raccomandazione è scaduta: %1$@ fa"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Basale raccomandata"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Bolo raccomandato"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Il bolo raccomandato supera la quantità del bolo massimo."; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolo raccomandato: %@ Unità"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Inserimento bolo remoto: %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Inserimento remoto di carboidrati: %d grammi"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Serbatoio"; - -/* No comment provided by engineer. */ -"Reservoir Empty" = "Serbatoio vuoto"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Correzione retrospettiva"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Riprova"; - -/* No comment provided by engineer. */ -"Save" = "Salva"; - -/* No comment provided by engineer. */ -"Save as favorite food" = "Salva come cibo preferito"; - -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save Carbs & Deliver" = "Salva carboidrati ed eroga"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Salva senza erogare bolo"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Programmato"; - -/* No comment provided by engineer. */ -"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Selezionando un alimento preferito nella schermata di inserimento dei carboidrati, i campi relativi a quantità di carboidrati, tipo di alimento e tempo di assorbimento vengono compilati automaticamente! Tocca \"Aggiungi\" qui sotto per creare il tuo primo alimento preferito!"; - -/* No comment provided by engineer. */ -"Sensor Failed" = "Sensore guasto"; - -/* The title of the services section in settings */ -"Services" = "Servizi"; - -/* The label of the settings button */ -"Settings" = "Impostazioni"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Configurazione incompleta"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Mostra l'ultimo errore di Loop"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Calcolatore bolo semplice"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Calcolatore pasto semplice"; - -/* Format fragment for a start time */ -"since %@" = "da %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Sito URL"; - -/* Software update button link text */ -"Software Update" = "Aggiornamento software"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "L'orario di inizio non rientra nell'intervallo: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "a partire da %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Avvio bolo in corso"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Supporto"; - -/* The title text in settings */ -"Suspend Threshold" = "Soglia di sospensione"; - -/* Title of the prediction input effect for suspension of insulin delivery */ -"Suspension of Insulin Delivery" = "Sospensione dell'erogazione d'insulina"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Tocca per impostare un CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Tocca per impostare una pompa"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Tocca per configurare un servizio"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Tocca per aggiungere"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Tocca per riprendere"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Tocca per interrompere"; - -/* Label for button to unmute all alerts */ -"Tap to Unmute Alerts" = "Tocca per riattivare gli avvisi"; - -/* The alert body for unmute alert confirmation */ -"Tap Unmute to resume sound for your alerts and alarms." = "Tocca \"Riattiva\" audio per riattivare l'audio degli avvisi e delle sveglie."; - -/* Settings app TestFlight section */ -"TestFlight" = "TestFlight"; - -/* Settings TestFlight expiration view */ -"TestFlight Expiration" = "Scadenza di TestFlight"; - -/* Time that build expires */ -"TestFlight expires " = "TestFlight scade "; - -/* The title for notification of upcoming TestFlight expiration */ -"TestFlight Expires Soon" = "TestFlight scade a breve"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "La quantità di bolo immessa è inferiore alla quantità minima erogabile."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "L'algoritmo di dosaggio del bolo utilizza una stima più conservativa della glicemia prevista rispetto a quella utilizzata per regolare la velocità basale.\n\nDi conseguenza, la glicemia prevista dopo un bolo potrebbe essere superiore all'intervallo obiettivo."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "La raccomandazione del bolo è stata aggiornata. Si prega di riconfermare la quantità di bolo."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Il modello legacy utilizzato da Loop, che consente la personalizzazione della durata dell'azione."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "La quantità massima consentita è %@ grammi."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "La quantità massima consentita è %1$@ ."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "La quantità massima consentita del bolo è %@ U."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "La quantità massima consentita del bolo è %@ Unità"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "L'impostazione del bolo massimo deve essere configurata prima di poter erogare un bolo."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Impostazioni terapia"; - -/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Questa opzione si applica solo quando Strategia di dosaggio di Loop è impostata su Bolo automatico."; - -/* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Notifiche sensibili al tempo"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Notifiche sensibili al tempo"; - -/* No comment provided by engineer. */ -"Transmitter Low Battery" = "Batteria del trasmettitore scarica"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Riprova"; - -/* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Disattiva il volume sul tuo dispositivo iOS o aggiungi %1$@ come app consentita per ciascuna modalità Focus. Gli avvisi sensibili al tempo e critici continueranno a suonare, ma gli avvisi non critici verranno silenziati."; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Attiva il Bluetooth per ricevere avvisi, allarmi o letture glicemiche del sensore."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Impossibile cancellare l'avviso"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Impossibile contattare la pompa"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Impossibile salvare l'inserimento di carboidrati"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Impossibile salvare l'inserimento manuale delle glicemie"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Impossibile interrompere il bolo in corso. Avvicina l'iPhone alla pompa e riprova. Controlla la cronologia delle erogazioni d'insulina per maggiori dettagli e monitora attentamente la glicemia."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Sconosciuto"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Errore sconosciuto: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Preset sconosciuto: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Orario sconosciuto"; - -/* The title of the action used to unmute alerts */ -"Unmute" = "Riattiva"; - -/* The alert title for unmute alert confirmation */ -"Unmute Alerts?" = "Disattivare gli avvisi?"; - -/* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ -"Unsupported Notification Service: %1$@" = "Servizio di notifica non supportato: %1$@"; - -/* The format for the description of a temporary override end date */ -"until %@" = "fino a %@"; - -/* indication of when alerts will be unmuted (1: time when alerts unmute) */ -"Until %1$@" = "Fino a %1$@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Fino a quando non inserisco carboidrati"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Finché non disattivato"; - -/* No comment provided by engineer. */ -"Urgent Low" = "Ipo urgente"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Usa il Preset pre-pasto"; - -/* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Utilizza la funzione Disattiva avvisi. Consente di silenziare temporaneamente tutti gli avvisi e gli allarmi tramite l'app %1$@, compresi gli avvisi critici e gli avvisi sensibili al tempo."; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Utilizza i target glicemi per l'allenamento"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Usa il Preset allenamento"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Attenzione! Le notifiche di sicurezza sono disattivate"; - -/* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Quali sono alcuni esempi di avvisi critici e sensibili al tempo?"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando la glicemia attuale o prevista è inferiore al limite di sicurezza, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità all'ora."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando la glicemia attuale o prevista è sotto la soglia di sospensione, Loop non consiglia un bolo e raccomanda sempre una velocità basale temporanea di 0 unità per ora."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Se attivato, Loop può avvisarti quando rileva un pasto che non è stato registrato."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Quando non è in modalità Loop chiuso, l'applicazione utilizza un calcolatore di bolo semplificato come una tipica pompa."; - -/* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Quando Disattiva avvisi è attiva, tutti gli avvisi dell'app %1$@, compresi gli avvisi critici e quelli sensibili al tempo, vengono temporaneamente visualizzati senza suoni e solo con una vibrazione."; - -/* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Anche se gli avvisi sono disattivati, la pompa per insulina e l'hardware CGM potrebbero comunque emettere suoni."; - -/* Format string for message of reset loop alert. (1: App name) (2: error description) */ -"While trying to restart %1$@ an error occured.\n\n%2$@" = "Durante il tentativo di riavviare %1$@ si è verificato un errore.\n\n%2$@"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Obiettivi di allenamento"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "L'Override di allenamento è attivo da più di 24 ore. Assicurati di volerlo mantenere attivato oppure disattivalo nell'app."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "L'Override di allenamento è ancora attivo"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "SÌ"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Potresti non ricevere avvisi sonori, visivi o con vibrazione relativi a informazioni critiche sulla sicurezza. \n\nPer risolvere il problema, tocca Impostazioni e assicurati che notifiche, avvisi critici e notifiche sensibili al tempo siano attivate."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "L'orario di %1$@ è stato modificato. La %2$@ ha bisogno di registrazioni accurate dell'orario per fare previsioni sulle glicemie e regolare l'insulina di conseguenza.\n\nControlla in Impostazioni di %1$@ (Generale / Data e ora) e verifica che l'opzione Imposta automaticamente sia attivata. In caso contrario, l'insulina potrebbe essere erogata in quantità insufficiente o eccessiva."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "La glicemia è inferiore a %1$@. Sei sicuro di voler fare il bolo?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "La tua glicemia è inferiore o si prevede che scenderà al di sotto del limite di sicurezza della glicemia, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "La tua glicemia è al di sotto del limite di sicurezza, %1$@ ."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "La tua glicemia è bassa. Mangia carboidrati e valuta di aspettare il bolo finché la glicemia non torna a un intervallo sicuro."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "La tua glicemia è bassa. Mangia carboidrati e monitora attentamente."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "La quantità massima consentita del tuo bolo è %1$@."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "I dati della pompa sono obsoleti. %1$@ non può consigliare un bolo."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "La pompa sta erogando una velocità basale temporanea manuale."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Il bolo raccomandato supera la quantità del bolo massimo di %1$@."; - diff --git a/Loop/it.lproj/Main.strings b/Loop/it.lproj/Main.strings deleted file mode 100644 index 55e5e82db6..0000000000 --- a/Loop/it.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Stato"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/ora @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Previsto"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Dettaglio"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etichetta"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Modifica carboidrati"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Totali"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "La glicemia futura viene prevista combinando gli effetti di più input. Utilizza questo strumento per alternare diversi input e confrontarli con la previsione finale."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etichetta"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "alla fine 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Osservato"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/ora @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Effetti dei carboidrati"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Per valutare l'assorbimento dei carboidrati, è possibile utilizzare i cambiamenti osservati nella glicemia, sottraendo i cambiamenti modellati dall'erogazione d'insulina."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Dettaglio"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Basale raccomandata"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etichetta"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etichetta"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Glicemia prevista"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "alla fine 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g carboidrati attivi"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glicemia"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etichetta"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Carboidrati"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Basale raccomandata"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Titolo"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/ja.lproj/InfoPlist.strings b/Loop/ja.lproj/InfoPlist.strings deleted file mode 100644 index b3e1c6d3b4..0000000000 --- a/Loop/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,21 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "ループ"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "ブルートゥースは、インスリンポンプおよび連続グルコースモニタデバイスと通信するために使用されます"; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "ブルートゥースは、インスリンポンプおよび連続グルコースモニタデバイスと通信するために使用されます"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "フェイスIDはインスリンボーラスの認証に使用されます"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "アプリに入力された炭水化物の食事データは、健康データベースに保存されます。 グルコースデータはHealthKitに安全に保存されます"; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "健康データベースからの食事データは、グルコース効果を決定するために使用される。 グルコースデータはグラフ作成と解析のためにHealthKitから検索されます"; - diff --git a/Loop/ja.lproj/Localizable.strings b/Loop/ja.lproj/Localizable.strings deleted file mode 100644 index 1a7698f10c..0000000000 --- a/Loop/ja.lproj/Localizable.strings +++ /dev/null @@ -1,481 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (保留中: %@)"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "—"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ 吸収済"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "計 %@ 単位"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "残 %1$@単位"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "残 %1$@単位: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/時 @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15分 グルコース回帰係数 (b₁)、30分退化適用"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30分 グルコース予想値と実際値の比較、60分退化適用"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Fiaspインスリンの公表吸収率に基づいたモデル。"; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "大人使用時の Humalog、Novolog、Apidraインスリンの公表吸収率に基づいたモデル。"; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "推奨ボーラス値を使う"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "残存糖質"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "残存糖質: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "残存糖質"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "残存インスリン"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "残存インスリン: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "糖質の記入を追加"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "CGMを追加"; - -/* The label of the meal button */ -"Add Meal" = "食事を追加"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "ポンプを追加"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* The title of the amplitude API key credential */ -"API Key" = "API キー"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "APIシークレット"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "入力履歴をすべて削除しますか?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "リザーバの値をすべて削除しますか?"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "このCGMを削除しますか?"; - -/* Format fragment for a specific time */ -"at %@" = "%@ 時点"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "ボーラス %@単位 認証してください"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "基礎レートスケジュール"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "基礎レート"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "ボーラス"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "%2$@ のうち %1$@ ボーラス済"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "%1$@ ボーラス中"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "キャンセル"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "ボーラスをキャンセルします"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "糖質効果"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Carb Ratios"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "糖質の記入を追加"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "残存糖質"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "吸収済糖質(g) ÷ 糖質比 (g/U) × インスリン効果値(%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "すぐにポンプの電池を替えてください"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "ポンプのレザーバを替えてください"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "設定を確認する"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "ポンプが近くにあることを確認してください"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "CGM データソースを確認してください"; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "量の多い食事や脂質やたんぱく質を含んだ食事には長い吸収時間を選んでください。これはアルゴリズムのための参考で、厳密である必要はありません。"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "クローズドループ"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "%1$@ 時点"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "%1$@ より"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "コンフィグレーション"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "設定エラー: %1$@"; - -/* Default alert dismissal */ -"Continue" = "次へ"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "CGM"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "ターゲット範囲"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "現在の血糖値は %1$@ で補正範囲を下回っています。"; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "カスタムオーバーライド"; - -/* Date picker label */ -"Date" = "日付"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "アカウントを削除"; - -/* Button title to delete all objects */ -"Delete All" = "すべて削除"; - -/* Button title to delete CGM */ -"Delete CGM" = "CGMを削除"; - -/* Button title to delete a service */ -"Delete Service" = "Delete Service"; - -/* Title text for delivery limits */ -"Delivery Limits" = "注入限度"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "無効にする"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "閉じる"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "有効にする"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "一時停止値を入力"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "ボーラスのキャンセルにエラー"; - -/* The alert title for a resume error */ -"Error Resuming" = "再開エラー"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Event History"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "予想 %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "ボーラス最大値を超えています"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "%1$@につき"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "血糖値"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "血糖データは %1$@ 前のものです"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "グルコースデータがありません"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "グルコース モメンタム"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "無期限"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "インスリン"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "吸収済インスリン(U) × インスリン効果値(%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "インスリン放出"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "インスリン効果"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "インスリンモデル"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "インスリン効果値"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "無効データ: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "問題を報告"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "CGMアプリを起動"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "ロード中..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "ループの不良"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "ループが %@ の間クローズされていません"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "最大ボーラス"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "データがありません: %1$@"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "モメンタム効果"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "詳細"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "注意してください"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "機器が未接続、または接続に問題"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "オン"; - -/* The title text for the override presets */ -"Override Presets" = "オーバーライドプリセット"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "食前ターゲット"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "%1$@の予想グルコースは %2$@です。"; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "予想グルコースは %1$@ で一時停止値を下回ります。"; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Predicted: %1$@\nActual: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "ポンプ"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "ポンプの電池が不足"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "ポンプデータが %1$@前のものです"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "ポンプイベント"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "ポンプ設定"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "ポンプのリザーバが空です"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "ポンプのリザーバが低です"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "ポンプ一時停止中"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "超速攻型 - 大人"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "超速攻型 - 子供"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "推奨が %1$@ 経過したため失効"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "推奨基礎分泌量"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "推奨ボーラス: %@ 単位"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "レトロ補正"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "やり直す"; - -/* The title of the services section in settings */ -"Services" = "サービス"; - -/* The label of the settings button */ -"Settings" = "設定"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "前回のループエラー"; - -/* Format fragment for a start time */ -"since %@" = "%@ から"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "%@から開始"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "ボーラス注入を開始"; - -/* The title text in settings */ -"Suspend Threshold" = "一時停止値"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "タップして再開する"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "ループのレガシーモデルで、作用期間をカスタマイズできます。"; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "最大ボーラス量は %@単位です"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "不明"; - -/* The format for the description of a temporary override end date */ -"until %@" = "%@まで"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "運動時ターゲットを使用"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "現在または予測グルコースが一時停止値を下回るため、ループはボーラスを推奨しません。0単位/時の一時的基礎レートを推奨します。"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "運動時ターゲット"; - diff --git a/Loop/ja.lproj/Main.strings b/Loop/ja.lproj/Main.strings deleted file mode 100644 index a3f2d225c7..0000000000 --- a/Loop/ja.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "ステータス"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/時 @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "予想"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "ラベル"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "グルコース変動"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g 合計"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "予想グルコースは複数のインプットの効果を組み合わせて算出されます。このツールでは様々なインプットを切り替えて最終予想にどのように関わっているか見ることができます。"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "ラベル"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "予想 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "観察"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/時 @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "糖質効果"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "観察されたグルコース値の変動から、インスリン注入のモデルによる変動を引くことにより、糖質の吸収を推定することができます。"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "推奨基礎分泌量"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "ラベル"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "ラベル"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "予想グルコース"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "予想 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g 残存糖質"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "血糖値"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "ラベル"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "残存糖質"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "推奨基礎分泌量"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/mul.lproj/LaunchScreen.xcstrings b/Loop/mul.lproj/LaunchScreen.xcstrings new file mode 100644 index 0000000000..fa56d16199 --- /dev/null +++ b/Loop/mul.lproj/LaunchScreen.xcstrings @@ -0,0 +1,7 @@ +{ + "sourceLanguage" : "en", + "strings" : { + + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop/mul.lproj/Main.xcstrings b/Loop/mul.lproj/Main.xcstrings new file mode 100644 index 0000000000..2f5ada279b --- /dev/null +++ b/Loop/mul.lproj/Main.xcstrings @@ -0,0 +1,3659 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "3kU-n2-fha.title" : { + "comment" : "Class = \"UINavigationItem\"; title = \"Status\"; ObjectID = \"3kU-n2-fha\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الحالة" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Status" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tila" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Statut" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מצב" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ステータス" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Статус" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stav" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Status" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Durum" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tình trạng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "状态" + } + } + } + }, + "5gz-kZ-iF1.text" : { + "comment" : "Class = \"UILabel\"; text = \"3.5 U/hour @ 12:12 PM\"; ObjectID = \"5gz-kZ-iF1\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 وحدة/ساعة @ 12:12 مساء" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 E/time @ 12:12" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 IE/h @ 12:12" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "3.5 U/hour @ 12:12 PM" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hora @ 12:12 PM" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/h @ 12:12" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/heure @ 12:12" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hour @ 12:12 PM" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/ora @ 12:12 PM" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/時 @ 12:12 PM" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 E/time @ 12:12" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 E/uur @ 12:12 uur" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 J/godzinę @ 12:12 PM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hora @ 12:12 PM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/oră @ 12:12 PM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 ед./час @ 12:12 PM" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 i/hod o 12:12" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 E/h kl. 12:12" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 Ü/saat @ 12:12 PM" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hour @ 12:12 PM" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5u/小时 @ 12:12 PM" + } + } + } + }, + "87H-N1-0vJ.text" : { + "comment" : "Class = \"UILabel\"; text = \"Predicted\"; ObjectID = \"87H-N1-0vJ\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تنبأ" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorhergesagt" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Predicted" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Proyectada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prédit" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicted" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previsto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspeld" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywane" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prevista" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estimată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предсказываемый" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predpoklad" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Được dự đoán" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预计" + } + } + } + }, + "aCb-Qs-bpu.text" : { + "comment" : "Class = \"UILabel\"; text = \"Detail\"; ObjectID = \"aCb-Qs-bpu\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تفاصيل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalje" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Detail" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalle" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Détail" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dettaglio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalj" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detay" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "详细" + } + } + } + }, + "bIL-Ub-qYp.text" : { + "comment" : "Class = \"UILabel\"; text = \"Label\"; ObjectID = \"bIL-Ub-qYp\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + }, + "bq4-98-cQU.text" : { + "comment" : "Class = \"UILabel\"; text = \"Glucose Change\"; ObjectID = \"bq4-98-cQU\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تغير قراءات السكر" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukkerændring" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker-Änderung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Glucose Change" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cambio de Glucosa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosin muutos" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Variation de la glycémie" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose Change" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modifica carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "グルコース変動" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukker endring" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucoseverandering" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmiana poziomu glukozy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Variação de Glicose" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose Change" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Изменение глюкозы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zmena glykémie" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukosförändring" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "KŞ Değişimi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mức đường huyết thay đổi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "葡萄糖变化" + } + } + } + }, + "d3X-AN-tA5.text" : { + "comment" : "Class = \"UILabel\"; text = \"g Total\"; ObjectID = \"d3X-AN-tA5\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g المجموع" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Total" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g insgesamt" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "g Total" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr Totales" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g yhteensä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g total" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Total" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Totali" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g 合計" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Totalt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Totaal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g łącznie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Total" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g în total" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "всего грамм" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Celkom" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g totalt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr Toplam" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Tổng cộng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "克 总计" + } + } + } + }, + "D4C-I2-dhA.text" : { + "comment" : "Class = \"UILabel\"; text = \"Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction.\"; ObjectID = \"D4C-I2-dhA\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fremtidige blodsukre er beregnet ved at kombinere effekterne af mange inputs. Brug dette værktøj til at vælge mellem forskellige inputs, for at se hvordan de passer med den endelige forudsigelse." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Der Blutzuckerverlauf wird vorhergesagt, indem die Effekte mehrerer Eingaben kombiniert werden. Verwende dieses Tool, um verschiedene Eingaben ein- und auszuschalten, um zu sehen, wie sie die Vorhersage beeinflussen." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glucosa futura se predice combinando los efectos de diversos datos de entrada. Utiliza esta herramienta para cambiar datos de entrada y ver como varía la predicción final." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tulevia glukoosiarvoja ennustetaan yhdistämällä useiden eri tekijöiden vaikutuksia. Tämän työkalun avulla voit havainnoida, kuinka ne vaikuttavat lopulliseen ennusteeseen laittamalla niitä päälle/pois." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glycémie future est prédite en combinant les effets de plusieurs entrées. Utilisez cet outil pour basculer entre différentes entrées et comparer leur valeur à la prédiction finale." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "La glicemia futura viene prevista combinando gli effetti di più input. Utilizza questo strumento per alternare diversi input e confrontarli con la previsione finale." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想グルコースは複数のインプットの効果を組み合わせて算出されます。このツールでは様々なインプットを切り替えて最終予想にどのように関わっているか見ることができます。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fremtidig glukose er spådd ved å kombinere effekten av flere innganger. Bruk dette verktøyet til å veksle mellom ulike innganger for å se hvordan de er sammenlignet med den endelige prediksjonen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "De toekomstige glucosewaarde wordt voorspeld door de effecten van meerdere inputwaarden te combineren. Gebruik dit hulpmiddel om verschillende inputwaarden aan en uit te zetten om ze zo te kunnen vergelijken met de uiteindelijke voorspelde glucosewaarde." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Poziom glukozy jest przewidywany dzięki syntezie wielu wprowadzonych danych z różnych źródeł. Użyj tego narzędzia, aby przełączyć różne źródła i zobaczyć jak wpływają na ostateczny wynik." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "A glicose futura é prevista combinando os efeitos de múltiplas entradas. Use esta ferramenta para alternar várias entradas para ver como elas se comparam à previsão final." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia este estimată prin combinarea unui număr de date sursă. Folosiți acest instrument pentru a controla diverse surse de date și a felului în care influențează estimarea." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Будущие значения СК предсказываются на основе определения эффекта множественных факторов. Пользуйтесь этим инструментом для перехода между разными вводными чтобы увидеть как они сопоставимы с окончательным предсказанием" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Budúca glykémia sa predpovedá kombináciou účinkov viacerých vstupov. Pomocou tohto nástroja môžete prepínať rôzne vstupy, aby ste videli, ako vplývajú v porovnaní s konečnou predpoveďou." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat glukosvärde beräknas genom kombination av flera inmatningar. Använd det här verktyget för att jämföra hur de påverkar det förväntade resultatet." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gelecekteki KŞ, çoklu girdilerin etkilerini birleştirerek tahmin edilir. Son tahminle nasıl karşılaştırıldıklarını görmek üzere çeşitli girdiler arasında geçiş yapmak için bu aracı kullanın." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose trong tương lai được dự đoán bằng cách kết hợp các tác động của nhiều dữ liệu đầu vào. Sử dụng công cụ này để chuyển đổi các đầu vào khác nhau để xem cách chúng so sánh với dự đoán cuối cùng." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未来血糖根据您输入的多种参数计算,选中不同选项可以观察不同输入对最终血糖预测的影响" + } + } + } + }, + "d6m-qV-wWi.text" : { + "comment" : "Class = \"UILabel\"; text = \"Label\"; ObjectID = \"d6m-qV-wWi\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + }, + "E41-FN-nkk.text" : { + "comment" : "Class = \"UILabel\"; text = \"eventually 92 mg/dL\"; ObjectID = \"E41-FN-nkk\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "في النهاية 92 mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Med tiden 5 mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "voraussichtlich 92 mg/dL" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "eventually 92 mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "eventualmente 92 mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ennuste 92 mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "finalement 92 mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "eventually 92 mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "alla fine 92 mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想 92 mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "etterhvert 92 mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "uiteindelijk 5,1 mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "docelowo 92 mg/dL" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "eventualmente 92 mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "estimată să ajungă la 92 mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "в конечном итоге 92 мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "pravdepodobne 92mg/dl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat 5,1 mmol/l" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nihai KŞ 92 mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "kết quả là 92 mg/dL" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终血糖为92 毫克/分升" + } + } + } + }, + "EAn-Ja-S1d.text" : { + "comment" : "Class = \"UILabel\"; text = \"Observed\"; ObjectID = \"EAn-Ja-S1d\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مُلاحظ" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observeret" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beobachtet" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Observed" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Havaittu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observed" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Osservato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "観察" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Waargenomen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obserwowany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Наблюдается" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pozorované" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observerad" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gözlendi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Được quan sát" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "观察值" + } + } + } + }, + "fWV-jg-ICt.text" : { + "comment" : "Class = \"UILabel\"; text = \"3.5 U/hour @ 12:12 PM\"; ObjectID = \"fWV-jg-ICt\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 وحدة/ساعة @ 12:12 مساء" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 E/time @ 12:12" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 IE/h @ 12:12" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "3.5 U/hour @ 12:12 PM" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hora @ 12:12 PM" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/h @ 12:12" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/heure @ 12:12" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hour @ 12:12 PM" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/ora @ 12:12 PM" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/時 @ 12:12 PM" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 E/time @ 12:12" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 E/uur @ 12:12 uur" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 J/godzinę @ 12:12 PM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hora @ 12:12 PM" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/oră @ 12:12 PM" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 ед./час @ 12:12 PM" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "3,5 i/hod o 12:12" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 E/h kl. 12:12" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 Ü/saat @ 12:12 PM" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5 U/hour @ 12:12 PM" + } + } + } + }, + "hZZ-2S-lrd.title" : { + "comment" : "Class = \"UITableViewController\"; title = \"Carbohydrate Effects\"; ObjectID = \"hZZ-2S-lrd\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأثيرات الكربوهيدرات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydrateffekter" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kohlenhydrat-Effekte" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Carbohydrate Effects" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efecto de Carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraattivaikutus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effets des glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrate Effects" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Effetti dei carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "糖質効果" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydrat effekt" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraateffect" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efekty wywołane przez węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efeitos dos Carboidratos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efecte carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Действие углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Účinky sacharidov" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydrateffekter" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidrat Etkileri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrate Effects" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : " 碳水化合物的影响" + } + } + } + }, + "IxU-As-glo.text" : { + "comment" : "Class = \"UILabel\"; text = \"Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption.\"; ObjectID = \"IxU-As-glo\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التغيرات الملاحظة على سكر الدم وتغيرات الخصم المشكل من توصيل الأنسولين بالإمكان استخدامها لتقدير امتصاص الكربوهيدرات." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "De observerede ændringer i glukose, fratrukket de ændringer, der er modelleret ud fra insulintilførslen, kan bruges til at estimere kulhydratabsorptionen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die beobachtete Blutzuckerveränderung abzüglich der modellbasierten Veränderung kann verwendet werden, um die Kohlenhydratresorption abzuschätzen." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los cambios observados en glucosa sustrayendo los cambios modelados para la entrega de insulina pueden ser utilizados para estimar la absorción de carbohidratos." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Havaittua glukoosin muutosta, josta on vähennetty insuliinin mallinnettu vaikutus, voidaan käyttää hiilihydraattien imeytymisen arviointiin." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les variations observées dans la glycémie, soustrayant les variations modélisées d'administration d'insuline peuvent être utilisées pour estimer l'absorption des glucides." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Per valutare l'assorbimento dei carboidrati, è possibile utilizzare i cambiamenti osservati nella glicemia, sottraendo i cambiamenti modellati dall'erogazione d'insulina." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "観察されたグルコース値の変動から、インスリン注入のモデルによる変動を引くことにより、糖質の吸収を推定することができます。" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observerte endringer i glukose, subtrahering av endringer modellert fra insulintilførsel, kan brukes til å estimere karbohydratabsorpsjon." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Waargenomen glucoseveranderingen, minus de veranderingen die al door insulinetoediening hebben plaatsgevonden, kunnen worden gebruikt om de koolhydraatopname in te schatten." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obserwowane zmiany w poziomie glukozy i uwzględnianie zmian podaży insuliny mogą być użyte do oszacowania czasu absorpcji węglowodanów." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alterações observadas na glicose, subtraindo alterações modeladas da administração de insulina, podem ser usadas para estimar a absorção de carboidratos." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modificările observate ale glicemiei, eliminând modificările modelate din administrarea insulinei, pot fi folosite pentru a estima absorbția carbohidraților." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Наблюдаются изменения СК, вычитаются изменения смоделированные на подаваемом инсулине, могут использоваться для оценки усвоения углеводов" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Observerad glukosförändring, med borttagen förändring modellerad från insulindoser, kan användas för att uppskatta kolhydratabsorptionen." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İnsülin iletiminden modellenen değişiklikler çıkarılarak KŞ değerlerinde gözlemlenen değişiklikler, karbonhidrat emilimini tahmin etmek için kullanılabilir." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Những thay đổi quan sát được trong glucose, trừ đi những thay đổi được mô hình hóa từ việc cung cấp insulin, có thể được sử dụng để ước tính sự hấp thụ carbohydrate." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "观察到的葡萄糖变化,减去以胰岛素递送为模型的变化,可用于估计碳水化合物吸收。" + } + } + } + }, + "J7x-W5-gwo.text" : { + "comment" : "Class = \"UILabel\"; text = \"Detail\"; ObjectID = \"J7x-W5-gwo\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تفاصيل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalje" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Detail" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalle" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Détail" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dettaglio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detalj" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detay" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Detail" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "详情" + } + } + } + }, + "k3F-Na-7mn.text" : { + "comment" : "Class = \"UILabel\"; text = \"Recommended Basal\"; ObjectID = \"k3F-Na-7mn\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الضخ المستمر المقترح" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalet basal" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlene Basalrate" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Recommended Basal" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recomendada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suositeltu basaali" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandation basal" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended Basal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basale raccomandata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨基礎分泌量" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt Basal" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Basaal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zalecana baza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recomendada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bazala recomandată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый базал" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odporúčaný bazal" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommenderad basaldos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen Bazal" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khuyến nghị liều Basal" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐基础率" + } + } + } + }, + "Krd-Aa-ret.text" : { + "comment" : "Class = \"UILabel\"; text = \"Label\"; ObjectID = \"Krd-Aa-ret\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + }, + "OFA-qT-ZAg.text" : { + "comment" : "Class = \"UILabel\"; text = \"Label\"; ObjectID = \"OFA-qT-ZAg\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + }, + "PA3-sP-cWY.title" : { + "comment" : "Class = \"UITableViewController\"; title = \"Predicted Glucose\"; ObjectID = \"PA3-sP-cWY\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "سكر الدم المتوقع" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet blodsukker" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorhergesagter Blutzucker" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Predicted Glucose" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa Proyectada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu glukoosi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prédiction de glycémie" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicted Glucose" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia prevista" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想グルコース" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet Blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspelde bloedsuiker" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywany poziom cukru" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicose Prevista" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemie estimată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предсказываемый СК" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predpokladaná glykémia" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat glukosvärde" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini KŞ" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đường huyết được dự đoán" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测的血糖" + } + } + } + }, + "Rse-x8-amW.text" : { + "comment" : "Class = \"UILabel\"; text = \"eventually 92 mg/dL\"; ObjectID = \"Rse-x8-amW\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "في النهاية 92 mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Med tiden 5 mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "voraussichtlich 92 mg/dL" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "eventually 92 mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "eventualmente 92 mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "ennuste 92 mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "finalement 92 mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "eventually 92 mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "alla fine 92 mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "予想 92 mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "etterhvert 92 mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "uiteindelijk 5,1 mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "docelowo 92 mg/dL" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "eventualmente 92 mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "estimată să ajungă la 92 mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "в конечном итоге 92 мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "pravdepodobne 92mg/dl" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat 5,1 mmol/l" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nihai KŞ 92 mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "kết quả là 92 mg/dL" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终血糖为92 毫克/分升" + } + } + } + }, + "SQx-au-ZcM.text" : { + "comment" : "Class = \"UILabel\"; text = \"g Active Carbs\"; ObjectID = \"SQx-au-ZcM\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g كارب نشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g aktive kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g aktive Kohlenhydrate" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "g COB" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr Carbohidratos Activos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Active Carbs" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g glucides actifs" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Active Carbs" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g carboidrati attivi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g 残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Aktive karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Actieve Kh" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Aktywne węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Active Carbs" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g CLB" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "г активных углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Aktívne sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Active Carbs" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr Aktif Karb." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g Active Carbs" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物 克" + } + } + } + }, + "tuw-av-A3x.text" : { + "comment" : "Class = \"UILabel\"; text = \"Glucose\"; ObjectID = \"tuw-av-A3x\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "قراءات السكر" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukóza" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukose" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzucker" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Glucose" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucosa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoosi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glycémie" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "शुगर" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemia" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "血糖値" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blodsukker" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucose" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicose" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucoza" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Глюкоза" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glykémia" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan şekeri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đường huyết" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "葡萄糖" + } + } + } + }, + "ufi-Kj-33k.text" : { + "comment" : "Class = \"UILabel\"; text = \"Label\"; ObjectID = \"ufi-Kj-33k\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + }, + "Vpi-5b-bY5.title" : { + "comment" : "Class = \"UINavigationItem\"; title = \"Carbohydrates\"; ObjectID = \"Vpi-5b-bY5\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الكربوهيدرات" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kohlenhydrate" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Carbohydrates" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraatit" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrates" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbonhidratlar" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrates" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水化合物" + } + } + } + }, + "xhx-PI-bBI.text" : { + "comment" : "Class = \"UILabel\"; text = \"Recommended Basal\"; ObjectID = \"xhx-PI-bBI\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الضخ المستمر المقترح" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalet basal" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlene Basalrate" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Recommended Basal" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recomendada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suositeltu basaali" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandation basal" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommended Basal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basale raccomandata" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨基礎分泌量" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anbefalt Basal" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Basaal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zalecana baza" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal Recomendada" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bazala recomandată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендуемый базал" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odporúčaný bazal" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekommenderad basaldos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen Bazal" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khuyến nghị liều Basal" + } + } + } + }, + "yn7-2M-jZz.text" : { + "comment" : "Class = \"UILabel\"; text = \"0\"; ObjectID = \"yn7-2M-jZz\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "0" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + } + } + }, + "zbc-87-wxZ.text" : { + "comment" : "Class = \"UILabel\"; text = \"Title\"; ObjectID = \"zbc-87-wxZ\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "عنوان" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Titel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Titel" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Title" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Título" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Titre" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Titolo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tittel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Titel" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Názov" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Başlık" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Title" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标题" + } + } + } + }, + "zvZ-uf-zMX.text" : { + "comment" : "Class = \"UILabel\"; text = \"0\"; ObjectID = \"zvZ-uf-zMX\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "0" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "0" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/Loop/nb.lproj/InfoPlist.strings b/Loop/nb.lproj/InfoPlist.strings deleted file mode 100644 index 13ca15ffc2..0000000000 --- a/Loop/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - NFC Scan Usage Description */ -"NFCReaderUsageDescription" = "Appen bruker NFC til å koble seg sammen med diabetesenheter."; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth brukes til å kommunisere med insulinpumpe og kontinuerlige glukosemonitorer."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth brukes til å kommunisere med insulinpumpe og kontinuerlige glukosemonitorer."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Kamera brukes til å skanne strekkoder på enheter."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID brukes til å autentisere insulin bolus."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Matdata fra Health-databasen brukes til å bestemme blodsukkereffekt. Blodsukkerdata hentes fra HealthKit for opptegning og analyse."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Karbohydratmåltidsdata som legges inn i appen og på klokken lagres i Helsedatabasen. Glukosedata hentet fra CGM lagres sikkert i HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop bruker Siri slik at du kan bruke forhåndsinnstillinger med stemmen din."; - diff --git a/Loop/nb.lproj/Localizable.strings b/Loop/nb.lproj/Localizable.strings deleted file mode 100644 index 3e4377603c..0000000000 --- a/Loop/nb.lproj/Localizable.strings +++ /dev/null @@ -1,1318 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = "(venter: %@ )"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "Forhåndsinnstilling før måltid"; - -/* remaining time in setting's profile expiration section */ -" remaining" = "gjenstående"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = "Sikkerhetsvarsler er AV"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "Forhåndsinnstilling for trening"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbert"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ gjenstår"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ E Totalt"; - -/* Appends a full-stop to a statement */ -"%@." = "%@ ."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ kunne ikke avbryte den nåværende midlertidige basaldosen, som er høyere enn den nye maksimale basalgrensen du har angitt. Dette kan føre til høyere insulintilførsel enn ønsket. \n\n Vurder å avbryte insulintilførselen manuelt og deretter umiddelbart gjenoppta for å innføre basaltilførsel med den nye grensen på plass."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@ /E"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* App sounds title text (1: app name) */ -"%1$@ APP SOUNDS" = "%1$@ APP-LYDER"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ opererer med Lukket Loop i AV-posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ kan ikke fjerne varselet fra enheten din"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ kan ikke kommunisere med insulinpumpen. Appen vil fortsette å prøve å nå pumpen din, men insulintilførselsinformasjon kan ikke oppdateres og ingen automatisering kan fortsette.\n Du kan vente flere minutter for å se om problemet løser seg eller trykke på knappen nedenfor for å lære mer om andre alternativer."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Tidsinnstillinger trenger oppmerksomhet"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ E"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ E igjen"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ E gjenstår: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ E/timen @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ vil slutte å fungere i %2$@. Du må gjenoppbygge før det."; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ slutter å fungere om %2$@ . Du må oppdatere før det, med en ny klargjøringsprofil."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@ : %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@ : %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 minutters glukose-regresjonskoeffisient (b1), fortsatt med nedbrytning over 30 minutter."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min sammenligning av glukose-prediksjon vs faktisk, fortsatt med nedbrytning over 60 min."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Noen sekunder gjenstår"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "En manuell BS-registrering må være mellom %1$@ og %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "En manuell BS-registrering må være mellom %1$@ og %2$@ ."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "En modell basert på publisert absorpsjon av Fiasp-insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "En modell basert på publisert absorpsjon av Humalog, Novolog og Apidra insulin hos voksne."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "En ny versjon av %@ er tilgjengelig og anbefales for å fortsette å bruke appen."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "En ny versjon av %@ er tilgjengelig."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "En pumpe må konfigureres før en bolus kan tilføres."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AksepterAnbefaltBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktive karbohydrater"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktive karbohydrater: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktive karbohydrater"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktivt insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktivt insulin: %@"; - -/* No comment provided by engineer. */ -"Add a new favorite food" = "Legg til en ny favorittmat"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Legg til karbohydrater"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Legg til CGM"; - -/* The label of the meal button */ -"Add Meal" = "Legg til måltid"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Legg til pumpe"; - -/* Title text for button to set up a service */ -"Add Service" = "Legg til tjeneste"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Justert for"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Administrasjon av varsler"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Varslingsinnstillinger"; - -/* Alert Permissions descriptive text */ -"Alert Permissions and Mute Alerts" = "Varselstillatelser og demp varsler"; - -/* Navigation title for algorithms experiments screen -The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Algoritmeeksperimenter"; - -/* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Algoritmeeksperimenter er valgfrie modifikasjoner til Loop-algoritmen. Disse modifikasjonene er mindre testet enn standard Loop-algoritmen, så vær vennlig å bruke dem med forsiktighet."; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algoritmeinnstillinger"; - -/* Warning text for when alerts are muted */ -"All Alerts Muted" = "Alle varsler er dempet"; - -/* Label for when mute alert will end */ -"All alerts muted until" = "Alle varsler er dempet inntil"; - -/* No comment provided by engineer. */ -"All Favorites" = "Alle favoritter"; - -/* Label for carb quantity entry row on carb entry screen */ -"Amount Consumed" = "Mengde karbohydrater\n(Mengde inntatt)"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "En aktiv overstyring modifiserer ditt karbohydratforhold og insulinfølsomhet. Hvis du ikke vil at dette skal påvirke bolusberegningen og projisert blodsukker, bør du vurdere å slå av overstyringen."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Det oppstod en feil under forsøk på å lagre karbohydratregistreringen."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Det oppstod en feil under forsøk på å lagre den manuelle BS-registreringen."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "En uventet onboarding-feiltilstand oppstod."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "En oppdatert bolusanbefaling er tilgjengelig."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Nøkkel"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Hemmelighet"; - -/* Settings app profile section */ -"App Profile" = "App-profil"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Er du sikker på at du vil slette alle historieoppføringer?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Er du sikker på at du vil slette alle loggførte doseoppføringer?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Er du sikker på at du vil slette alle reservoarverdier?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Er du sikker på at du vil slette alle dine %@ Data?\n(Denne handlingen kan ikke angres)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Er du sikker på at du vil slette denne CGM?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete this food?" = "Er du sikker på at du vil slette denne maten?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Er du sikker på at du vil slette denne tjenesten?"; - -/* Format fragment for a specific time */ -"at %@" = "kl %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Autentiserer for å gi %@ Enheter i Bolus"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Autentiser for å logge %@ Enheter"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Tidsplan for basaldoser"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basal-satser"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Basert på ditt forventede blodsukker, anbefales ingen bolus."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Blåtann\nAv"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Blåtann\nUtilgjengelig"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Bluetooth Avslått-varsel"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Varsel om at Bluetooth er utilgjengelig"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Bolus feil"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Bolus anbefaling er oppdatert"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolus oppsummering"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus er for liten"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolus %1$@ av %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Gir bolus %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Avbryt"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Avbryter bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Karb effekter"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Legg til karbohydrater"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Tidsplan for karbohydratforhold"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Karb forhold"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Legg til karbohydrater"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Karbohydratinntaket er for stort"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Karbohydrater"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Absorberte karbohydrater (g) ÷ Karbforhold (g/E) × insulinfølsomhet ( %1$@ /E)"; - -/* No comment provided by engineer. */ -"Caution" = "Forsiktig"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Skift pumpebatteriet umiddelbart"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Bytt pumpereservoar nå"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Sjekk innstillinger"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Sjekk at pumpen din er innenfor rekkevidde"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Sjekk CGM"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Sjekk enhetens klokke og/ eller fjern eventuelle ugyldige data fra Apple Helse."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Velg lengre absorpsjonstid for større måltider, eller de som inneholder fett og proteiner. Dette er kun veiledning til algoritmen og trenger ikke være nøyaktig."; - -/* No comment provided by engineer. */ -"Choose Favorite:" = "Velg favoritt:"; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Lukk"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Lukket Loop"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Lukket Loop AV"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Lukket Loop krever en aktiv CGM sensorøkt"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Lukket Loop krever at installasjonen er fullført"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "kl. %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "siden %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Fullfør oppsett"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfigurasjon"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Konfigurasjonsfeil: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Fortsett"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Kontinuerlig glukosemonitor"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Korreksjonsområde"; - -/* Format string for title of reset loop alert. (1: App name) */ -"Could Not Restart %1$@" = "Kunne ikke starte %1$@ på nytt"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritiske varsler"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Kritisk hendelseslogg er klar"; - -/* Critical event log export title */ -"Critical Event Logs" = "Kritiske hendelseslogger"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Kritiske hendelseslogger kunne ikke eksporteres."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Nåværende blodsukker"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Gjeldende blodsukker på %1$@ er under korreksjonsområdet."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Tilpasset overstyring"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Egendefinert forhåndsinnstilling"; - -/* Date picker label */ -"Date" = "Dato"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Slett"; - -/* No comment provided by engineer. */ -"Delete “%@”?" = "Slette \"%@\"?"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Slett Konto"; - -/* Button title to delete all objects */ -"Delete All" = "Slett alle"; - -/* Button title to delete CGM */ -"Delete CGM" = "Slett CGM"; - -/* No comment provided by engineer. */ -"Delete Food" = "Slett mat"; - -/* Button title to delete a service */ -"Delete Service" = "Slett tjeneste"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Slett testdata for blodsukkermåler"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Slett testdata"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Slett data for testpumpe"; - -/* Button text to deliver a bolus */ -"Deliver" = "Gi bolus"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Leveringsgrenser"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diabetesbehandling"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Hadde du tenkt å angi %1$@ gram som mengde karbohydrater for dette måltidet?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Deaktiverer"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Avvis"; - -/* No comment provided by engineer. */ -"Done" = "Ferdig"; - -/* Title for card to log dose */ -"Dose Summary" = "Dose sammendrag"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Doseringsstrategi"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Varigheten overskrider: %1$.1f timer"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Aktiver blåtann"; - -/* Title for Glucose Based Partial Application toggle */ -"Enable Glucose Based Partial Application" = "Aktiver delvis anvendelse basert på glukose"; - -/* Title for Integral Retrospective Correction toggle */ -"Enable Integral Retrospective Correction" = "Aktivere integrert retrospektiv korrigering"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Aktiverer"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Legg inn blodsukkerverdi fra en måler for anbefalt bolusmengde."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Skriv inn bolus"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Legg inn blodsukkerverdi fra fingerstikk"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Angi sikkerhetsgrensen for blodsukker"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Angi suspenderingsgrense"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Kunne ikke avbryte bolus"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Feil ved eksport av logger"; - -/* The alert title for a resume error */ -"Error Resuming" = "Feil ved gjenopptagelse"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Hendelseshistorie"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Omsider %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Overskrider maksimalt tillatt bolus i innstillingene"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Overskrider maksimalt tillatte karbohydrater"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Overskrider maksimal bolus"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Eksporter kritiske hendelseslogger"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Eksporter- %1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Kunne ikke gjenoppta insulinlevering"; - -/* No comment provided by engineer. */ -"FAVORITE FOODS" = "FAVORITTMAT"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Blodsukkerverdi fra fingerstikk"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Fiks nå ved å slå PÅ varsler, kritiske varsler og tidssensitive varsler."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "For %1$@"; - -/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ -"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Av sikkerhetshensyn bør du tillate at kritiske varsler, tidssensitive varsler og varslingstillatelser (ikke-kritiske varsler) på enheten din fortsetter å bruke %1$@ og ikke kan slå av individuelle alarmer."; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Forventet blodsukker kan fortsatt være høyere enn målområdet."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Forventet blodsukker"; - -/* Label for link to see frequently asked questions */ -"Frequently asked questions about alerts" = "Ofte stilte spørsmål om varsler"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Få hjelp med varslingsinnstillinger"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Blodsukker"; - -/* Title for glucose based partial application experiment description -Title of glucose based partial application experiment */ -"Glucose Based Partial Application" = "Partiell anvendelse basert på glukosenivå"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Blodsukkerdata er %1$@ gammel"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Blodsukkerdata er utilgjengelig"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Blodsukkerdata er utilgjengelig"; - -/* Description of the prediction input effect for suspension of insulin delivery */ -"Glucose effect of suspending insulin delivery" = "Glukoseeffekt av å suspendere insulintilførsel"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Blodsukkerdata er utenfor intervallet"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glukose Momentum"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Tidsplan for blodsukker målområde"; - -/* No comment provided by engineer. */ -"HARDWARE SOUNDS" = "MASKINVARELYDER"; - -/* No comment provided by engineer. */ -"High Glucose" = "Høyt glukosenivå"; - -/* No comment provided by engineer. */ -"How can I silence non-Critical Alerts?" = "Hvordan kan jeg dempe ikke-kritiske varsler?"; - -/* No comment provided by engineer. */ -"How can I silence only Time Sensitive and Non-Critical alerts?" = "Hvordan kan jeg deaktivere kun tidssensitive og ikke-kritiske varsler?"; - -/* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Hvordan kan jeg midlertidig dempe alle %1$@-applydene?"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Hvordan oppdatere (LoopDocs)"; - -/* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Hvis iOS Focus Mode er PÅ og Mute Alerts er AV, vil kritiske varsler fortsatt bli levert og ikke-kritiske varsler vil bli dempet inntil %1$@ er lagt til i hver Focus Mode som en tillatt app."; - -/* Immediate Delivery status text */ -"Immediate" = "Umiddelbar"; - -/* Algorithm Experiments description second paragraph. */ -"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "I fremtidige versjoner av Loop kan disse eksperimentene endres, ende opp som standarddeler av Loop-algoritmen eller fjernes helt fra Loop. Følg med i Loop Zulip-chatten for å holde deg informert om eventuelle endringer i disse funksjonene."; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "På ubestemt tid"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulin absorbert (E) × insulinfølsomhet ( %1$@ /E)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Insulinjusteringer er deaktivert!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulinlevering"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulin effekt"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulin Modell"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Insulinpumpe"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulinfølsomhet"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Insulin følsomhet tidsplan"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insulintilførsel utsatt"; - -/* Insulin type label */ -"Insulin Type" = "Insulintype"; - -/* Title for integral retrospective correction experiment description -Title of integral retrospective correction experiment */ -"Integral Retrospective Correction" = "Integrert retrospektiv korreksjon"; - -/* Description of Integral Retrospective Correction toggle. */ -"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Integral Retrospective Correction (IRC) er en utvidelse av standardalgoritmekomponenten Retrospective Correction (RC) i Loop, som justerer prognosen basert på historikken for avvik mellom forventede og faktiske glukosenivåer.\n\nI motsetning til RC, som ser på avvik i løpet av de siste 30 minuttene, summerer IRC avvikene over tid. Fortsatte positive avvik over tid vil derfor føre til økt dosering. Hvis avvikene er negative over tid, vil Loop redusere doseringen ytterligere."; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Avbrutt %1$@: %2$@ av %3$@ %4$@"; - -/* Carb error description: invalid absorption time. (1: Input duration in hours). */ -"Invalid absorption time: %1$@ hours" = "Ugyldig absorpsjonstid: %1$@ timer"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Ugyldig bolusmengde"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Ugyldig karbohydratmengde"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Ugyldige data: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Ugyldig fremtidig blodsukker"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Ugyldig blodsukkermåling med et tidsstempel som er %1$@ i fremtiden"; - -/* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "iOS Critical Alerts og Time Sensitive Alerts er typer Apple-varsler. De brukes ved hendelser med høy prioritet. Noen eksempler er:"; - -/* No comment provided by engineer. */ -"IOS FOCUS MODES" = "IOS-FOKUSMODUSER"; - -/* The title text for the issue report cell */ -"Issue Report" = "Problem Rapport"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Det ser ut til at du kanskje ikke har logget et måltid du har spist. Trykk for å logge den nå."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Angitt Stort Måltid"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Laster inn CGM-appen"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Lære mer"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Mindre enn et minutt gjenstår"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Laster inn..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Logg Dose"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Logget insulindose"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop krasjet"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop-feil"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop har oppdaget et problem med Bluetooth-innstillingene dine, og vil ikke fungere før Bluetooth er aktivert. Du vil ikke motta blodsukkermålinger, eller være i stand til å gi bolus."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop har oppdaget et glemt måltid og estimert størrelsen. Rediger karbohydratmengden for å matche mengden av karbohydrater du måtte ha spist."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop har ikke fullført i %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Lopp vil sette bolus når insulinbehovet er over planlagt basal, og vil bruke midlertidige basale rater når det er nødvendig for å redusere insulintilførselen under planlagt basal"; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop vil ikke fungere før Bluetooth er aktivert. Du vil ikke motta blodsukkermålinger, eller være i stand til å gi bolus."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop vil sette midlertidige basal rater for å øke og redusere insulin levering."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Lavt blodsukker"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Behandle tillatelser i Innstillinger"; - -/* View title for how mute alerts work */ -"Managing Alerts" = "Administrere varsler"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Manuell dose: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Maksimal basaldose pr. time"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maks bolus"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Maksimal bolus overskredet"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Måltidsbolus"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Varsler om tapte måltider"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Manglende data: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Mangler maksimalt tillatt bolus i innstillingene"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentum effekter"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Mer info"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Demp alle varsler"; - -/* Title for mute alert duration selection action sheet */ -"Mute All Alerts Temporarily" = "Slå av alle varsler midlertidig"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Trenger tilsyn"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Negativ varighet ikke tillatt"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Message for mute alert duration selection action sheet */ -"No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Ingen varsler eller alarmer vil høres mens de er dempet. Velg hvor lenge du ønsker å dempe lyden."; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Ingen anbefalt bolus"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Ingen tilkoblede enheter, eller feil under enhetstilkobling"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Ingen maksimal bolus er konfigurert"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Ingen pumpe er konfigurert"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Ingen ny blodsukkermåling"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Ingen nye blodsukkerdata"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Mangler relevant pumpdata"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Nei, rediger mengde"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Varslingslevering"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "Varslingslevering er satt til Planlagt sammendrag i telefonens innstillinger. \n\n For å unngå forsinkelser i mottak av varsler fra %1$@ , anbefaler vi at varslingslevering settes til Umiddelbar levering."; - -/* Notifications Status text */ -"Notifications" = "Varsler"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Varsler forsinket"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Varslinger gir deg viktig %1$@ app informasjon uten at du behøver å åpne appen."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Varsler gir deg viktig %1$@ appinformasjon uten at du trenger å åpne appen. \n\n Hold disse slått PÅ i telefonens innstillinger for å sikre at du mottar %1$@ -varsler, kritiske varsler og tidssensitive varsler."; - -/* Notification Setting Status is Off */ -"Off" = "Av"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Å nei! Loop krasjet under dosering, og insulinjusteringer er satt på pause til denne dialogen er lukket. Doseringshistorikken er kanskje ikke nøyaktig. Vennligst sjekk diagrammer for insulin levering, og overvåk blodsukkeret nøye."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "På"; - -/* The title text for the override presets */ -"Override Presets" = "Overstyr forhåndsinnstillinger"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Mulig savnet måltid"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Målområde før måltid"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Forventet blodsukker kl %1$@ er %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Forventet blodsukker er innenfor målområdet."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Forventet blodsukker på %1$@ er lavere enn innstillingen for blodsukkersikkerhet."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Forventet blodsukker %1$@ er lavere enn innstilling for insulinstopp"; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Forventet: %1$@\nFaktisk: %2$@ ( %3$@ )"; - -/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "prediksjon-beskrivelse-integral-retrospektiv-korreksjon"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Forbereder logg av kritiske hendelser"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Profilens utløp"; - -/* Time that profile expires */ -"Profile expires " = "Profil utløper"; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profil utløper snart"; - -/* The title of the pump section in settings */ -"Pump" = "Pumpe"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pumpebatteri lavt"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pumpedata er %1$@ gammel"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pumpehendelse"; - -/* No comment provided by engineer. */ -"Pump Expired" = "Pumpen er utløpt"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pumpe manager"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Pump Manager-feil: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pumpereservoaret tomt"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pumpe reservoar lav"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pumpe suspendert"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pumpe suspendert. Automatisk dosing er deaktivert."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Hurtigvirkende – voksne"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Hurtigvirkende – barn"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Anbefaling utløpt: %1$@ gammelt"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Anbefalt Basal"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Anbefalt bolus"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Anbefalt bolus overskrider maksimal bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Anbefalt bolus: %@ enheter"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Ekstern bolusregistrering: %@ E"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Ekstern karbohydratregistrering: %d gram"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoar"; - -/* No comment provided by engineer. */ -"Reservoir Empty" = "Reservoaret er tomt"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Retrospektiv korreksjon"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Prøv på nytt"; - -/* No comment provided by engineer. */ -"Save" = "Lagre"; - -/* No comment provided by engineer. */ -"Save as favorite food" = "Lagre som favorittmat"; - -/* Button text to save carbs and/or manual glucose entry and deliver a bolus */ -"Save Carbs & Deliver" = "Lagre og gi bolus"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Lagre uten å sette bolus"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Planlagt"; - -/* No comment provided by engineer. */ -"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Når du velger en favorittmat i skjermbildet for innlegging av karbohydrater, fylles feltene for karbohydratmengde, matvaretype og opptakstid automatisk ut! Trykk på knappen Legg til nedenfor for å opprette din første favorittmat!"; - -/* No comment provided by engineer. */ -"Sensor Failed" = "Sensor mislyktes"; - -/* The title of the services section in settings */ -"Services" = "Tjenester"; - -/* The label of the settings button */ -"Settings" = "Innstillinger"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Ufullstendig oppsett"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Viser siste Loop-feil"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Enkel bolus-kalkulator"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Enkelt måltid kalkulator"; - -/* Format fragment for a start time */ -"since %@" = "siden %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Nettstedets URL"; - -/* Software update button link text */ -"Software Update" = "Programvare oppdatering"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Starttiden er utenfor området: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "starter på %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Starter Bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Brukerstøtte"; - -/* The title text in settings */ -"Suspend Threshold" = "Terskel for utsettelse"; - -/* Title of the prediction input effect for suspension of insulin delivery */ -"Suspension of Insulin Delivery" = "Suspensjon av insulintilførsel"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Trykk her for å sette opp en CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Trykk her for å sette opp en pumpe"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Trykk her for å sette opp en tjeneste"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Trykk for å legge til"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Trykk for å fortsette"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Trykk for å stoppe"; - -/* Label for button to unmute all alerts */ -"Tap to Unmute Alerts" = "Trykk for å dempe varsler"; - -/* The alert body for unmute alert confirmation */ -"Tap Unmute to resume sound for your alerts and alarms." = "Trykk på Slå av lyd for å gjenoppta lyden for varsler og alarmer."; - -/* Settings app TestFlight section */ -"TestFlight" = "TestFlight"; - -/* Settings TestFlight expiration view */ -"TestFlight Expiration" = "TestFlight-utløp"; - -/* Time that build expires */ -"TestFlight expires " = "TestFlight utløper "; - -/* The title for notification of upcoming TestFlight expiration */ -"TestFlight Expires Soon" = "TestFlight utløper snart"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Den angitte bolusmengden er mindre enn minimumsleveransen."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Bolusdoseringsalgoritmen bruker et mer konservativt estimat av anslått blodsukker enn det som brukes til å justere basalhastigheten. \n\n Som et resultat kan det anslåtte blodsukkeret ditt etter en bolus fortsatt være høyere enn målområdet ditt."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Bolus-anbefalingen er oppdatert. Bekreft bolusverdien på nytt."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Den eldre modellen brukt av Loop, som tillater tilpasning av handlingsvarigheten."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "Maksimalt tillatt mengde er %@ gram."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "Maksimal tillatt mengde er %1$@ ."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Maksimal bolus er satt til %@ E."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Maksimal bolusmengde er %@ enheter"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Innstillingen for maksimal bolus må konfigureres før bolus kan leveres."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Behandlingsinnstillinger"; - -/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Dette alternativet gjelder bare når Loops doseringsstrategi er satt til Automatisk bolus."; - -/* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Tidssensitive varsler"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Tidssensitive varsler"; - -/* No comment provided by engineer. */ -"Transmitter Low Battery" = "Svakt batteri i senderen"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Prøv på nytt"; - -/* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Slå av volumet på iOS-enheten eller legg til %1$@ som en tillatt app i hver fokusmodus. Tidssensitive og kritiske varsler vil fortsatt høres, men ikke-kritiske varsler blir dempet."; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Slå på Bluetooth for å motta varsler, alarmer eller avlesninger fra glukosesensor."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Kan ikke fjerne varsel"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Kommunikasjonsfeil"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Kunne ikke lagre karbohydrater"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Kan ikke lagre manuell blodsukkerregistrering"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Kan ikke stoppe bolusen som pågår. Flytt iPhone nærmere pumpen og prøv igjen. Sjekk insulinleveringshistorikken for detaljer, og overvåk glukosen nøye."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Ukjent"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Ukjent feil: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Ukjent forhåndsinnstilling: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Ukjent tid"; - -/* The title of the action used to unmute alerts */ -"Unmute" = "Oppheve demping"; - -/* The alert title for unmute alert confirmation */ -"Unmute Alerts?" = "Oppheve demping av varsler?"; - -/* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ -"Unsupported Notification Service: %1$@" = "Varslingstjeneste som ikke støttes: %1$@"; - -/* The format for the description of a temporary override end date */ -"until %@" = "til %@"; - -/* indication of when alerts will be unmuted (1: time when alerts unmute) */ -"Until %1$@" = "Inntil %1$@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Frem til jeg legger inn karbohydrater"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Frem til jeg skrur av"; - -/* No comment provided by engineer. */ -"Urgent Low" = "Øyeblikkelig lav"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Bruk pre-måltidsmål"; - -/* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Bruk funksjonen Demp varsler. Med denne funksjonen kan du midlertidig dempe alle varsler og alarmer via %1$@-appen, inkludert kritiske varsler og tidssensitive varsler."; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Bruk treningsmodus for BS-målområde"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Bruk forhåndsinnstilling for treningsøkt"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Advarsel! Sikkerhetsvarsler er slått AV"; - -/* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Hva er eksempler på kritiske og tidssensitive varsler?"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når gjeldende eller anslått glukose er under glukosesikkerhetsgrensen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basaldose på 0 enheter pr. time."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Når gjeldende eller anslått glukose er under suspenderingsterskelen, vil ikke Loop anbefale en bolus, og vil alltid anbefale en midlertidig basaldose på 0 enheter pr. time."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Når den er aktivert, kan Loop varsle deg når den oppdager et måltid som ikke ble logget."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Når den er ute av lukket Loop-modus, bruker appen en forenklet boluskalkulator som en vanlig pumpe."; - -/* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Når lydløse varsler er på, vil alle varsler fra %1$@-appen, inkludert kritiske og tidssensitive varsler, midlertidig vises uten lyd og kun vibrere."; - -/* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Selv om dempede varsler er aktivert, kan insulinpumpen og CGM-maskinvaren fortsatt avgi lyd."; - -/* Format string for message of reset loop alert. (1: App name) (2: error description) */ -"While trying to restart %1$@ an error occured.\n\n%2$@" = "Det oppstod en feil da du prøvde å starte %1$@ på nytt.\n\n%2$@"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Målområder for trening"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Temp Adjust for trening har vært slått på i mer enn 24 timer. Forsikre deg om at du fortsatt vil ha den aktivert, eller slå den av i appen."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Midlertidig justering for treningsøkter er fortsatt på"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Ja"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Du får kanskje ikke lyd-, visuelle eller vibrasjonsvarsler angående kritisk sikkerhetsinformasjon. \n\n For å fikse problemet, trykk på \"Innstillinger\" og sørg for at varsler, kritiske varsler og tidssensitive varsler er slått PÅ."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Tidsinnstillingen til %1$@ er endret. %2$@ trenger nøyaktige tidsregistreringer for å gi spådommer om blodsukker og justere insulinet deretter. \n\nSjekk inn %1$@ innstillingene (Generelt / Dato og klokkeslett) og bekreft at 'Sett automatisk' er slått PÅ. Unnlatelse av å løse problemet kan føre til alvorlig under- eller overlevering av insulin."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Blodsukkeret ditt er under %1$@ . Er du sikker på at du vil gi bolus?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Blodsukkeret ditt er under eller forventes å gå under BS-sikkerhetsgrensen din, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Din glukose er under din glukosesikkerhetsgrense, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Din glukose er lav. Spis karbohydrater og vurder å vente med bolus til glukosen er innenfor et trygt område."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Din glukose er lav. Spis karbohydrater og følg nøye med."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Din maksimale bolusmengde er %1$@ ."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Pumpedataene er foreldede. %1$@ kan ikke anbefale en bolusmengde."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Pumpen leverer en manuell midlertidig basaldose."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Den anbefalte bolusen overskrider den maksimale bolusmengden på %1$@ ."; - diff --git a/Loop/nb.lproj/Main.strings b/Loop/nb.lproj/Main.strings deleted file mode 100644 index af2d403f11..0000000000 --- a/Loop/nb.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3,5 E/time @ 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Forventet"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detalj"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etikett"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Blodsukker endring"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Totalt"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Fremtidig glukose er spådd ved å kombinere effekten av flere innganger. Bruk dette verktøyet til å veksle mellom ulike innganger for å se hvordan de er sammenlignet med den endelige prediksjonen."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etikett"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "etterhvert 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observert"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3,5 E/time @ 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Karbohydrat effekt"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Observerte endringer i glukose, subtrahering av endringer modellert fra insulintilførsel, kan brukes til å estimere karbohydratabsorpsjon."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detalj"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Anbefalt Basal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etikett"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etikett"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Forventet Blodsukker"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "etterhvert 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Aktive karbohydrater"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Blodsukker"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etikett"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Karbohydrater"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Anbefalt Basal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Tittel"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/nl.lproj/InfoPlist.strings b/Loop/nl.lproj/InfoPlist.strings deleted file mode 100644 index 6309d4246c..0000000000 --- a/Loop/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth wordt gebruikt om te communiceren met de insulinepomp en de continue glucosemeters."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth wordt gebruikt om te communiceren met de insulinepomp en de continue glucosemeters."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Camera wordt gebruikt om barcodes van apparaten te scannen."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID wordt gebruikt om de insulinebolus te authenticeren en om wijzigingen in de therapieinstellingen op te slaan."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Maaltijdgegevens uit de database Gezondheid worden gebruikt om glucoseëffecten te bepalen. Glucosegegevens uit de database Gezondheid worden gebruikt voor grafieken en het berekenen van trendlijnen. Slaapgegevens uit de database Gezondheid worden gebruikt om de Apple Watch complicatie bij te werken."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Maaltijdkoolhydraten die worden ingevoerd in de app en met de watch worden opgeslagen in de database Gezondheid. Ontvangen glucosegegevens van de CGM worden veilig opgeslagen in HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop gebruikt Siri om programma's met je stem te laten uitvoeren."; - diff --git a/Loop/nl.lproj/Localizable.strings b/Loop/nl.lproj/Localizable.strings deleted file mode 100644 index e71d64843f..0000000000 --- a/Loop/nl.lproj/Localizable.strings +++ /dev/null @@ -1,1136 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (Wachten: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Pre-Meal Programma"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " resterend"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = " Veiligheidsmeldingen staan UIT"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Trainingsprogramma"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ geabsorbeerd"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ resterend"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ E Totaal"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ kon je huidige tijdelijke basaalsnelheid niet annuleren, die hoger is dan de nieuwe Maximale Basaallimiet die je hebt ingesteld. Dit kan leiden tot een hogere insulinetoediening dan gewenst. \n\nOverweeg om de insulinetoediening handmatig te onderbreken en dan direct het hervatten van de basaaltoediening uit te laten voeren met de nieuwe geldende limiet."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ - %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@ /E"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ werkt met Gesloten Loop in de UIT stand. Je pomp en CGM blijven werken, maar de app past de dosering niet automatisch aan."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ kan de melding niet wissen van je apparaat"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ kan niet communiceren met je insulinepomp. De app blijft proberen je pomp te bereiken, maar de insulinetoedieningsinformatie kan niet worden bijgewerkt en automatisering kan niet plaatsvinden.\nJe kunt enkele minuten wachten om te zien of het probleem is opgelost of tik op de onderstaande knop voor meer informatie over andere opties."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Tijdinstellingen Hebben Aandacht Nodig"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ E"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ E over"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ E over: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ E/uur @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ stopt met werken in %2$@. Je zult eerder moeten updaten, met een nieuw beschikbaargesteld profiel."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@ : %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min glucose regressiecoëficiënt (b₁), gevolgd door afbouw over 30 min"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min vergelijking van glucosevoorspelling versus de werkelijke, gevolgd door afbouw over 60 min"; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Nog een paar seconden"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Een handmatige glucose-invoer moet tussen %1$@ en %2$@ liggen"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Een handmatige glucose-invoer moet tussen %1$@ en %2$@ liggen."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Een model gebaseerd op de gepubliceerde opname van Fiasp insuline."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Een model gebaseerd op de gepubliceerde absorptie van Humalog-, Novolog- en Apidra-insuline bij volwassenen."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Er is een nieuwe versie van %@ beschikbaar die aanbevolen wordt om de app te kunnen blijven gebruiken."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Er is een nieuwe versie van %@ beschikbaar."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Een pomp moet worden geconfigureerd voordat een bolus kan worden toegediend."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AccepteerVoorgesteldeBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Actieve Koolhydraten"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Actieve Koolhydraten: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Actieve Koolhydraten"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Actieve Insuline"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Actieve Insuline: %@"; - -/* No comment provided by engineer. */ -"Add a new favorite food" = "Voeg een nieuw favoriet eten toe"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Kh. Inv. Toevoegen"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Voeg CGM toe"; - -/* The label of the meal button */ -"Add Meal" = "Voeg Maaltijd toe"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Voeg Pomp toe"; - -/* Title text for button to set up a service */ -"Add Service" = "Service Toevoegen"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Aangepast voor"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Meldingbeheer"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Toestemming Meldingen"; - -/* Navigation title for algorithms experiments screen -The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Algoritme Experimenten"; - -/* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Algoritme Experimenten zijn optionele aanpassingen aan het Loop Algoritme. Deze aanpassingen zijn minder grondig getest dan het standaard Loop Algoritme, dus gebruik het voorzichtig."; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algoritme-instellingen"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Een actieve override wijzigt je koolhydraatratio en je insulinegevoeligheid. Als je niet wilt dat dit je bolusberekening en voorspelde glucose beïnvloedt, kun je overwegen de override uit te schakelen."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Er is een fout opgetreden tijdens het opslaan van je koolhydraatinvoer."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Er is een fout opgetreden tijdens het opslaan van je handmatige glucose-invoer."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Er is een onverwachte onboarding-foutstatus opgetreden"; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Een bijgewerkte aanbevolen bolus is beschikbaar."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Settings app profile section */ -"App Profile" = "App-Profiel"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Weet je zeker dat je de gehele pompgeschiedenis wilt verwijderen?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Weet je zeker dat je de gehele doseringsgeschiedenis wilt verwijderen?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Weet je zeker dat je alle waarden van het reservoir wilt verwijderen?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Weet je zeker dat je al je %@ Gegevens wilt verwijderen?\n(Deze actie is niet omkeerbaar)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Weet je zeker dat je deze CGM wilt verwijderen"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Weet je zeker dat je deze service wil verwijderen?"; - -/* Format fragment for a specific time */ -"at %@" = "om %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Authenticeer om %@ E te Bolussen"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Authenticeer om %@ Eenheden te registreren"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basaalsnelheidschema"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basaalsnelheden"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Op basis van je voorspelde glucose, wordt een bolus niet aanbevolen."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth\nUit"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth\nNiet Beschikbaar"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Bluetooth Uit Melding"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Bluetooth Niet Beschikbaar Melding"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Bolusprobleem"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Aanbevolen Bolus Bijgewerkt"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolussamenvatting"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus Te Klein"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "%1$@ van %2$@ gebolust"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolussen %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Annuleer"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Bolus Annuleren"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Koolhydraateffecten"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Koolhydraatinvoer"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Koolhydraatratioschema"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Koolhydraatratio's"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Kh. Inv. Toevoegen"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Koolhydraatinvoer Te Veel"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Koolhydraten"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Opgenomen Koolhydraten (g) ÷ Koolhydraatratio (g/E) × Insulinegevoeligheid (%1$@/E)"; - -/* No comment provided by engineer. */ -"Caution" = "Voorzichtig"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Vervang direct de batterij van de pomp"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Vervang het pompreservoir nu"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Controleer instellingen"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Controleer of je pomp binnen bereik is"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Controleer je CGM gegevensbron"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Controleer de tijd op je apparaat en/of verwijder eventuele ongeldige invoer uit Apple Gezondheid."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Kies een langere opnametijd voor grotere maaltijden of voor maaltijden die vetten en eiwitten bevatten. Dit is alleen een leidraad voor het algoritme en hoeft niet exact te zijn."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Sluiten"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Gesloten Loop"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Gesloten Loop UIT"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Gesloten Loop vereist een actieve CGM Sensorsessie"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Gesloten Loop vereist dat Installatie is Voltooid"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "om %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "sinds %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "Ok"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Volledige Installatie"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuratie"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Configuratiefout: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Ga Verder"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Continue Glucose Monitor"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Correctiebereik"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritieke Meldingen"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Kritieke Gebeurtenislogboek Klaar"; - -/* Critical event log export title */ -"Critical Event Logs" = "Kritieke Gebeurtenislogboek"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Kritieke Gebeurtenislogboek konden niet worden geëxporteerd."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Huidige Glucose"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Huidige glucose %1$@ is lager dan het correctiebereik."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Aangepaste Override"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Aangepast Programma"; - -/* Date picker label */ -"Date" = "Datum"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Verwijderen"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Verwijder Account"; - -/* Button title to delete all objects */ -"Delete All" = "Verwijder Alles"; - -/* Button title to delete CGM */ -"Delete CGM" = "Verwijder CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Service Verwijderen"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Verwijder test-CGM-gegevens"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Testgegevens Verwijderen"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Testpompgegevens Verwijderen"; - -/* Button text to deliver a bolus */ -"Deliver" = "Toedienen"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Toedieningslimieten"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diabetesbehandeling"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Was je van plan om %1$@ gram in te voeren als hoeveelheid koolhydraten voor deze maaltijd?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Uitschakelen"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Sluiten"; - -/* No comment provided by engineer. */ -"Done" = "Gereed"; - -/* Title for card to log dose */ -"Dose Summary" = "Doseersamenvatting"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Doseerstrategie"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Duur overschrijdt: %1$.1f uur"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Bluetooth\nInschakelen"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Inschakelen"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Verkrijg een bloedglucose waarde van een meter voor een aanbevolen bolus hoeveelheid."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Bolus Invoeren"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Vul Vingerprikglucose In"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Voer glucoseveiligheidslimiet in"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Voer drempel voor onderbreking in"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Fout bij Annuleren Bolus"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Fout bij exporteren logboeken"; - -/* The alert title for a resume error */ -"Error Resuming" = "Fout Bij Hervatten"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Logboek"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Uiteindelijk %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Overschrijdt maximale toegestane bolus in instellingen"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Overschrijdt maximale toegestane koolhydraten"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Overschrijdt Maximale Bolus"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Exporteer Kritieke Gebeurtenislogboek"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Exporteren: %1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Insulinetoediening Hervatten Mislukt"; - -/* No comment provided by engineer. */ -"FAVORITE FOODS" = "FAVORIETE ETEN"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Vingerprikglucose"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Los nu op door Meldingen, Kritieke Meldingen en Tijdgevoelige Meldingen AAN te zetten."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Voor %1$@"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Voorspelde bloedglucose kan nog steeds hoger zijn dan het streefbereik."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Voorspelde Glucose"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Krijg hulp bij Toestemming Meldingen"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glucose"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Glucosegegevens zijn %1$@ oud"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Glucosegegevens niet beschikbaar"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Glucosegegevens Nu Beschikbaar"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Glucose-invoer Buiten Bereik"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glucosetrendlijn"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Glucosestreefbereikschema"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Hoe bij te werken (LoopDocs)"; - -/* Immediate Delivery status text */ -"Immediate" = "Onmiddellijk"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Voor onbepaalde tijd"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insuline"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Opgenomen Insuline (E) x Insulinegevoeligheid (%1$@/E)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Insulineaanpassingen zijn uitgeschakeld!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulinetoediening"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulineëffecten"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulinemodel"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Insulinepomp"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulinegevoeligheden"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Insulinegevoeligheidschema"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insuline Onderbroken"; - -/* Insulin type label */ -"Insulin Type" = "Insulinetype"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Onderbroken %1$@: %2$@ van %3$@ %4$@"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Ongeldige bolushoeveelheid"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Ongeldige hoeveelheid koolhydraten"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Ongeldige gegevens: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Ongeldige Toekomstige Glucose"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Ongeldige glucosemeting met een tijdstempel dat %1$@ in de toekomst ligt."; - -/* The title text for the issue report cell */ -"Issue Report" = "Probleemrapportage"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Het lijkt erop dat je een maaltijd die je hebt gegeten niet hebt toegevoegd. Tik om het nu toe te voegen."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Grote Maaltijd Ingevoerd"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Lanceert CGM app"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Meer Informatie"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Minder dan een minuut resterend"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Laden..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Registreer Dosis"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Geregistreerde Insulinedosis"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop is Vastgelopen"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loopstoring"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop heeft een probleem met je Bluetoothinstellingen gedetecteerd en zal niet goed werken totdat Bluetooth wordt ingeschakeld. Je ontvangt geen glucosemetingen en je kunt niet bolussen."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop heeft een gemiste maaltijd gedetecteerd en een schatting van de hoeveelheid gedaan. Bewerk de hoeveelheid koolhydraten, zodat deze overeenkomt met de hoeveelheid koolhydraten die je mogelijk hebt gegeten."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop is niet goed afgerond in %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop zal automatisch bolussen geven wanneer de insulinebehoefte groter is dan het ingestelde basaal, en Loop zal wanneer dat nodig is gebruik maken van tijdelijke basaalsnelheden om insulinetoediening te verlagen."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop werkt pas als Bluetooth is ingeschakeld. Je zult geen glucosemetingen ontvangen of een bolus kunnen toedienen."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop stelt tijdelijke basaalsnelheden in om de insulinetoediening te verhogen of te verlagen."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Lage Glucose"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Beheer Toestemming in Instellingen"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Doseer Handmatig: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Maximale Basaalsnelheid Per Uur"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maximale Bolus"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Maximale Bolus Overschreden"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Maaltijd Bolus"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Gemiste Maaltijdmeldingen"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Ontbrekende gegevens: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Maximaal toegestane bolus ontbreekt in instellingen"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Trendlijneffecten"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Meer Informatie"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Alle Waarschuwingen Dempen"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Aandacht Nodig"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Negatieve duur niet toegestaan"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Geen Bolus Aanbevolen"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Geen aangesloten apparaten of storingen tijdens het verbinden met het apparaat"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Geen Maximale Bolus Geconfigureerd"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Geen Pomp Geconfigureerd"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Geen Recente Glucose"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Geen Recente Glucosegegevens"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Geen Recente Pompgegevens"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Nee, hoeveelheid aanpassen"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Afleveren Meldingen"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "De aflevering van meldingen in de instellingen van je telefoon staat op Gepland Overzicht.\n\nOm vertraging bij het ontvangen van meldingen van %1$@ te voorkomen, raden we je aan om de aflevering van meldingen in te stellen op Onmiddellijk Afleveren."; - -/* Notifications Status text */ -"Notifications" = "Sta meldingen toe"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Meldingen Vertraagd"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Meldingen geven je belangrijke %1$@ appinformatie zonder dat je de app hoeft te openen."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Meldingen geven je belangrijke %1$@ appinformatie zonder dat je de app hoeft te openen.\n\nHoud deze instellingen AAN in je telefooninstellingen om ervoor te zorgen dat %1$@ je Meldingen, Kritieke Meldingen en Tijdgevoelige Meldingen ontvangt."; - -/* Notification Setting Status is Off */ -"Off" = "Uit"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh nee! Loop is vastgelopen tijdens het toedienen, en insulineaanpassingen zijn gepauzeerd totdat dit dialoogvenster wordt gesloten. De doseringsgeschiedenis is mogelijk niet nauwkeurig. Bekijk de Insulinetoedieningsgrafieken en controleer je bloedglucose nauwkeurig."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "Ok"; - -/* Notification Setting Status is On */ -"On" = "Aan"; - -/* The title text for the override presets */ -"Override Presets" = "Override Programma's"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Mogelijk Gemiste Maaltijd"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Pre-Meal Doelen"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Voorspelde glucose om %1$@ is %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Voorspelde glucose is binnen bereik."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Voorspelde glucose van %1$@ ligt onder je ingestelde glucoseveiligheidslimiet."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Verwachte glucose van %1$@ is lager dan je ingestelde insulineonderbrekingsdrempel."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Voorspeld: %1$@\nActueel: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Kritieke Gebeurtenislogboek Voorbereiden"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Profiel Vervaldatum"; - -/* Time that profile expires */ -"Profile expires " = "Profiel verloopt "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profiel Verloopt Binnenkort"; - -/* The title of the pump section in settings */ -"Pump" = "Pomp"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pompbatterij Bijna Leeg"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pompgegevens zijn %1$@ oud"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pompgebeurtenis"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pomp Manager"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Pompmanager Fout: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pompreservoir Leeg"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pompreservoir Bijna Leeg"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pomp Onderbroken"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pomp Onderbroken. Automatisch doseren is uitgeschakeld."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Snelwerkend - Volwassenen"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Snelwerkend - Kinderen"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Aanbeveling verlopen: %1$@ oud"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Aanbevolen Basaal"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Aanbevolen Bolus"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Aanbevolen Bolus Overschrijdt Maximale Bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Aanbevolen Bolus: %@ Eenheden"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Remote Bolusinvoer: %@ E"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Remote Koolhydraatinvoer: %d gram"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Retroperspectieve Correctie"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Opnieuw Proberen"; - -/* No comment provided by engineer. */ -"Save as favorite food" = "Opslaan als favoriet voedsel"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Opslaan zonder Bolussen"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Gepland"; - -/* No comment provided by engineer. */ -"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Het selecteren van een favoriet voedsel in het koolhydraat invoerscherm vult automatisch de velden voor de hoeveelheid koolhydraten, het type voedsel en de absorptietijd in! Tik op de toevoegknop hieronder om je eerste favoriete voedsel te maken!"; - -/* The title of the services section in settings */ -"Services" = "Services"; - -/* The label of the settings button */ -"Settings" = "Instellingen"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Installatie Onvolledig"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Toont laatste loop foutmelding"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Eenvoudige Boluscalculator"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Eenvoudige Maaltijdcalculator"; - -/* Format fragment for a start time */ -"since %@" = "sinds %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Site URL"; - -/* Software update button link text */ -"Software Update" = "Software Update"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Starttijd is buiten bereik: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "start om %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Bolus Starten"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Ondersteuning"; - -/* The title text in settings */ -"Suspend Threshold" = "Onderbrekingsdrempel"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Tik hier om een CGM in te stellen"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Tik hier om een pomp in te stellen"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Tik hier om een Service in te stellen"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Tik voor Toevoegen"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Tik voor Hervatten"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Tik voor Stoppen"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "De ingevoerde bolushoeveelheid is kleiner dan die minimaal toegediend kan worden."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Het bolusdoseeralgoritme gebruikt een meer conservatieve schatting van de verwachte bloedglucose dan wat wordt gebruikt om je basaalsnelheid aan te passen.\n\nHierdoor kan je voorspelde bloedglucose na een bolus nog steeds hoger zijn dan je streefbereik."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "De aanbevolen bolus is bijgewerkt. Bevestig de bolus opnieuw."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Het model gebruikt bij Loop, staat verandering van actieduur toe."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "De maximaal toegestane hoeveelheid is %@ gram."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "De maximaal toegestane hoeveelheid is %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "De maximale bolushoeveelheid is %@ E."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "De maximale bolushoeveelheid is %@ Eenheden"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "De maximale bolusinstelling moet worden ingesteld voordat een bolus kan worden afgeleverd."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Therapieinstellingen"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Tijdgevoelige Meldingen"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Probeer Opnieuw"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Schakel Bluetooth in om waarschuwingen, alarmen of sensorglucosemetingen te ontvangen."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Kan Waarschuwing Niet Wissen"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Kan Pomp Niet Bereiken"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Kan Koolhydraatinvoer Niet Opslaan"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Kan Handmatige Glucose-invoer Niet Opslaan"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Kan de toedienende bolus niet stoppen. Plaats je iPhone dichter bij de pomp en probeer het opnieuw. Controleer je insulinetoedieningsgeschiedenis voor details, en houd je glucose nauwlettend in de gaten."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Onbekend"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Onbekende Fout: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Onbekende voorinstelling: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Onbekende tijd"; - -/* The format for the description of a temporary override end date */ -"until %@" = "tot %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Totdat ik koolhydraten invoer"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Totdat ik uitschakel"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Gebruik Pre-Meal Programma"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Gebruik Trainingsglucosedoelen"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Gebruik Trainingsprogramma"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Waarschuwing! Veiligheidsmeldingen staan UIT"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Wanneer de huidige of voorspelde glucose onder de glucoseveiligheidslimiet ligt, zal Loop geen bolus aanbevelen en zal het altijd een tijdelijke basissnelheid van 0 eenheden per uur aanbevelen."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Wanneer de huidige of voorspelde glucose onder de onderbrekingsdrempel ligt, zal Loop geen bolus aanbevelen en zal Loop altijd een tijdelijke basaalsnelheid van 0 eenheden per uur aanbevelen."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Indien ingeschakeld, kan Loop je op de hoogte stellen wanneer het een maaltijd detecteert die niet is toegevoegd."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Als de Gesloten Loop modus is uitgeschakeld, gebruikt de app een vereenvoudigde boluscalculator zoals bij een gewone pomp."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Trainingsdoelen"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Tijdelijk Trainingsprogramma staat meer dan 24 uur ingeschakeld. Zorg ervoor dat je deze nog steeds wilt inschakelen of schakel deze uit in de app."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Tijdelijk Trainingsprogramma Nog Steeds Aan"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Ja"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Mogelijk ontvangt je geen geluids-, visuele of trillingswaarschuwingen met betrekking tot kritieke veiligheidsinformatie. \n\nOm het probleem op te lossen, tikt op 'Instellingen' en zorg ervoor dat Meldingen, Kritieke Meldingen en Tijdgevoelige Meldingen AAN staan."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Je %1$@'s tijd is veranderd. %2$@ heeft nauwkeurige tijdsregistraties nodig om voorspellingen te doen over je glucose en dienovereenkomstig je insuline aan te passen.\n\nControleer in je %1$@ Instellingen (Algemeen / Datum & Tijd) en controleer of 'Automatisch Instellen' is INGESCHAKKELD. Als dit niet wordt opgelost, kan dit leiden tot ernstig te weinig toediening of tot ernstige overmatige toediening van insuline."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Je glucose is lager dan %1$@. Weet je zeker dat je een bolus wilt toedienen?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Je glucose is onder of zal naar verwachting onder je glucoseveiligheidslimiet komen, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Je glucose is onder je glucoseveiligheidslimiet, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Je glucose is laag. Eet koolhydraten en overweeg te wachten met een bolus totdat je glucose binnen een veilig bereik is."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Je glucose is laag. Eet koolhydraten en houd alles nauwlettend in de gaten."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Je maximale bolushoeveelheid is %1$@."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Je pompgegevens zijn verouderd. %1$@ kan geen bolushoeveelheid aanbevelen."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Je pomp geeft een handmatig ingestelde tijdelijke basaalsnelheid af."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Je aanbevolen bolus overschrijdt je maximale bolushoeveelheid van %1$@."; - diff --git a/Loop/nl.lproj/Main.strings b/Loop/nl.lproj/Main.strings deleted file mode 100644 index fe983987a4..0000000000 --- a/Loop/nl.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3,5 E/uur @ 12:12 uur"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Voorspeld"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etiket"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Glucoseverandering"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Totaal"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "De toekomstige glucosewaarde wordt voorspeld door de effecten van meerdere inputwaarden te combineren. Gebruik dit hulpmiddel om verschillende inputwaarden aan en uit te zetten om ze zo te kunnen vergelijken met de uiteindelijke voorspelde glucosewaarde."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etiket"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "uiteindelijk 5,1 mmol/L"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Waargenomen"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3,5 E/uur @ 12:12 uur"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Koolhydraateffect"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Waargenomen glucoseveranderingen, minus de veranderingen die al door insulinetoediening hebben plaatsgevonden, kunnen worden gebruikt om de koolhydraatopname in te schatten."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Aanbevolen Basaal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etiket"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etiket"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Voorspelde bloedsuiker"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "uiteindelijk 5,1 mmol/L"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Actieve Kh"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glucose"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etiket"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Koolhydraten"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Aanbevolen Basaal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Titel"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/pl.lproj/InfoPlist.strings b/Loop/pl.lproj/InfoPlist.strings deleted file mode 100644 index d581227b06..0000000000 --- a/Loop/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,30 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - NFC Scan Usage Description */ -"NFCReaderUsageDescription" = "Aplikacja wykorzystuje NFC do parowania z urządzeniami dla diabetyków."; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth jest używany do komunikacji z pompą i urządzeniami ciągłego monitoringu glukozy."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth jest używany do komunikacji z pompą i urządzeniami ciągłego monitoringu glukozy."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Aparat służy do skanowania kodów kreskowych urządzeń."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID jest używane do autoryzacji podaży bolusa."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Dane o posiłkach z bazy aplikacji Zdrowie będą używane do określenia ich wpływu na poziom cukru. Informacje o poziomie cukru z bazy danych aplikacji Zdrowie są używane do narysowania wykresu oraz obliczenia przewidywanego poziomu cukru."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Posiłek węglowodanowy wprowadzony w aplikacji i na zegarku oraz dane o poziomie cukru pobrane z ciągłego monitoringu glukozy są bezpiecznie przechowywane w aplikacji Zdrowie."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop używa Siri, aby umożliwić wprowadzanie ustawień za pomocą głosu."; - diff --git a/Loop/pl.lproj/Localizable.strings b/Loop/pl.lproj/Localizable.strings deleted file mode 100644 index 14ae2795a6..0000000000 --- a/Loop/pl.lproj/Localizable.strings +++ /dev/null @@ -1,1315 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (oczekujące: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Przed Posiłkiem"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " pozostały"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = "Powiadomienia dotyczące bezpieczeństwa są WYŁĄCZONE"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Wstępne ustawienia treningu"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ zaabsorbowane"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "Pozostało %@"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ J łącznie"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ nie mógł anulować bieżącej tymczasowej dawki podstawowej, która jest wyższa niż nowy ustawiony limit maksymalnej dawki podstawowej. Może to skutkować wyższym niż pożądane podawaniem insuliny. \n\n Rozważ ręczne wstrzymanie podawania insuliny, a następnie natychmiastowe wznowienie podawania dawki podstawowej z obowiązującym nowym limitem."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/J"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* App sounds title text (1: app name) */ -"%1$@ APP SOUNDS" = "%1$@ DŹWIĘKI APLIKACJI"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ działa z zamkniętą pętlą w pozycji OFF. Twoja pompa i CGM będą nadal działać, ale aplikacja nie będzie automatycznie dostosowywać insuliny."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ nie może usunąć alertu z Twojego urządzenia"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ nie może skomunikować się z Twoją pompą insulinową. Aplikacja będzie nadal próbowała połączyć się z pompą, ale nie można aktualizować informacji o podawaniu insuliny i nie można kontynuować automatyzacji.\n Możesz poczekać kilka minut, aby sprawdzić, czy problem został rozwiązany, lub nacisnąć poniższy przycisk, aby dowiedzieć się więcej o innych opcjach."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Ustawienia czasu wymagają uwagi"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ J"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ J pozostało"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ J pozostało: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ J/godzinę @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ przestanie działać w %2$@. Konieczna będzie wcześniejsza odbudowa."; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ przestanie działać za %2$@ . Wcześniej konieczna będzie aktualizacja przy użyciu nowego profilu udostępniania."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15-minutowy współczynnik regresji glukozy (b₁), kontynuowany z rozkładem przez 30 min."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 minutowe porównanie przewidywania stężenia glukozy w stosunku do rzeczywistego, kontynuowane z rozkładem przez 60 min."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Pozostało kilka sekund"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Ręczny wpis poziomu glukozy musi mieścić się w przedziale od %1$@ do %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Ręczny wpis poziomu glukozy musi mieścić się w przedziale od %1$@ do %2$@ ."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Model oparty na opublikowanej absorpcji insulin Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Model oparty na opublikowanej absorpcji insulin Humalog, Novolog/Novorapid i Apidra u dorosłych."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Dostępna jest nowa wersja %@, która jest zalecana do dalszego korzystania z aplikacji."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Dostępna jest nowa wersja %@ ."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Przed podaniem bolusa należy skonfigurować pompę."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktywne węglowodany"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktywne węglowodany: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktywne węglowodany"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktywna insulina"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktywna Insulina: %@"; - -/* No comment provided by engineer. */ -"Add a new favorite food" = "Dodaj nowe ulubione jedzenie"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Wprowadź węglowodany"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Dodaj CGM"; - -/* The label of the meal button */ -"Add Meal" = "Dodaj posiłek"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Dodaj pompę"; - -/* Title text for button to set up a service */ -"Add Service" = "Dodaj usługę"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Dostosowane do"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Zarządzanie alertami"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Uprawnienia alertów"; - -/* Alert Permissions descriptive text */ -"Alert Permissions and Mute Alerts" = "Uprawnienia do alertów i wyciszanie alertów"; - -/* Navigation title for algorithms experiments screen -The title of the Algorithm Experiments section in settings */ -"Algorithm Experiments" = "Algorytmy Eksperymentalne"; - -/* Algorithm Experiments description. */ -"Algorithm Experiments are optional modifications to the Loop Algorithm. These modifications are less tested than the standard Loop Algorithm, so please use carefully." = "Eksperymenty algorytmiczne to opcjonalne modyfikacje algorytmu pętli. Te modyfikacje są mniej przetestowane niż standardowy algorytm pętli, więc używaj ich ostrożnie."; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Ustawienia algorytmu"; - -/* Warning text for when alerts are muted */ -"All Alerts Muted" = "Wszystkie alerty wyciszone"; - -/* Label for when mute alert will end */ -"All alerts muted until" = "Wszystkie alerty wyciszono do"; - -/* No comment provided by engineer. */ -"All Favorites" = "Wszystkie ulubione"; - -/* Label for carb quantity entry row on carb entry screen */ -"Amount Consumed" = "Ilość węglowodanów"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplituda"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Aktywny Cel Tymczasowy (Override) modyfikuje stosunek węglowodanów i wrażliwość na insulinę. Jeśli nie chcesz, aby wpłynęło to na obliczenie bolusa i przewidywaną glikemię, rozważ wyłączenie Celu Tymczasowego."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Wystąpił błąd podczas próby zapisania wpisu dotyczącego węglowodanów."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Wystąpił błąd podczas próby zapisania ręcznego wpisu o glukozie."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Niespodziewany błąd wdrażania"; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Dostępna jest zaktualizowana rekomendacja bolusa."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Settings app profile section */ -"App Profile" = "Profil aplikacji"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Czy jesteś pewien, że chcesz usunąć z Loop wszystkie dane historyczne pompy?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Czy na pewno chcesz usunąć wszystkie zapisane wpisy dawek?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Czy jesteś pewien, że chcesz usunąć wszystkie wartości zbiornika?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Czy na pewno chcesz usunąć wszystkie swoje dane %@ ?\n (Ta czynność jest nieodwracalna)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Czy na pewno chcesz usunąć ten CGM?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete this food?" = "Czy na pewno chcesz usunąć to jedzenie?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Czy na pewno chcesz usunąć tę usługę?"; - -/* Format fragment for a specific time */ -"at %@" = "o %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Autoryzacja Bolusa %@ jednostek"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Autoryzuj, aby podać %@ Jednostki"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Harmonogram dawki standardowej"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Dawka Podstawowa (Baza)"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Na podstawie przewidywanej glikemii nie zaleca się podawania bolusa."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth jest wyłączony"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth niedostępny"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Alert! Bluetooth jest wyłączony!"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Alarm! Bluetooth niedostępny"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Problem z bolusem"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Zaktualizowano rekomendowanego bolusa"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Podsumowanie bolusa"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Za mały bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Podano %1$@ z %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Podawanie %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Anuluj"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Anulowanie bolusa"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Wpływ węglowodanów"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Wprowadź węglowodany"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Harmonogram Współczynnika Węglowodanowego"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Współczynniki węglowodanowe"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Wprowadź węglowodany"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Wpis węglowodanów za duży"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Węglowodany"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Ilość węglowodanów (g) ÷ stosunek węglowodanów (g/J) × czułość insuliny (%1$@/J)"; - -/* No comment provided by engineer. */ -"Caution" = "Uwaga"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Natychmiast wymienić baterię pompy"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Zmień zbiorniczek w pompie"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Sprawdź ustawienia"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Upewnij się, że Twoja pompa jest w zasięgu"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Sprawdź swój CGM"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Sprawdź czas urządzenia i/lub usuń wszelkie nieprawidłowe dane z aplikacji Zdrowie."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Wybierz dłuższy czas absorpcji dla większych, bogatobiałkowych lub wysokotłuszczowych posiłków. To tylko wskazówka dla algorytmu i nie musi być bardzo dokładna."; - -/* No comment provided by engineer. */ -"Choose Favorite:" = "Wybierz ulubione:"; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Zamknij"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Pętla Zamknięta"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Pętla zamknięta WYŁĄCZONA"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Zamknięta pętla wymaga aktywnego sensora CGM"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Zamknięta pętla wymaga zakończenia konfiguracji"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "o %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "od %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Zakończ konfigurację"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfiguracja"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Błąd konfiguracji: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Kontynuuj"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Ciągły Monitoring Glukozy"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Zakres docelowy"; - -/* Format string for title of reset loop alert. (1: App name) */ -"Could Not Restart %1$@" = "Nie można ponownie uruchomić %1$@"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Alerty krytyczne"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Dziennik zdarzeń krytycznych gotowy"; - -/* Critical event log export title */ -"Critical Event Logs" = "Dzienniki zdarzeń krytycznych"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Nie można wyeksportować dzienników zdarzeń krytycznych."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Aktualna glukoza"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Poziom glukozy %1$@ jest poniżej wartości korekcji."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Custom Override"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Cel Tymczasowy"; - -/* Date picker label */ -"Date" = "Data"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Usunąć"; - -/* No comment provided by engineer. */ -"Delete “%@”?" = "Usunąć „ %@ ”?"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Usuń konto"; - -/* Button title to delete all objects */ -"Delete All" = "Usuń wszystko"; - -/* Button title to delete CGM */ -"Delete CGM" = "Usuń CGM"; - -/* No comment provided by engineer. */ -"Delete Food" = "Usuń jedzenie"; - -/* Button title to delete a service */ -"Delete Service" = "Usuń usługę"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Usuń testowe dane CGM"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Usuń dane testowe"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Usuń dane pompy testowej"; - -/* Button text to deliver a bolus */ -"Deliver" = "Podaj Bolus"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limity podawania"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "w leczeniu cukrzycy"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Czy zamierzałeś wprowadzić %1$@ gramów jako ilość węglowodanów dla tego posiłku?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Wyłącza"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Rozumiem"; - -/* No comment provided by engineer. */ -"Done" = "Gotowe"; - -/* Title for card to log dose */ -"Dose Summary" = "Podsumowanie dawki"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Strategia dawkowania"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Czas trwania przekracza: %1$.1f godzin"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Włączać\nBluetooth"; - -/* Title for Glucose Based Partial Application toggle */ -"Enable Glucose Based Partial Application" = "Włącz Algorytm adaptacyjny"; - -/* Title for Integral Retrospective Correction toggle */ -"Enable Integral Retrospective Correction" = "Włącz Integralną Korektę Retrospektywną (IRC)"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Włącza"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Wprowadź poziom glukozy z glukometru, aby uzyskać zalecaną wielkość bolusa."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Wprowadź bolus"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Wprowadź glukozę z glukometru"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Wprowadź bezpieczny limit glukozy"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Wprowadź próg zawieszenia pompy"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Błąd anulowania bolusa"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Błąd podczas eksportowania dzienników"; - -/* The alert title for a resume error */ -"Error Resuming" = "Błąd wznawiania"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Historia zdarzeń"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Docelowo %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Przekracza maksymalny dozwolony bolus."; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Przekracza maksymalną dopuszczalną ilość węglowodanów"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Osiągnięto bolus maksymalny"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Eksportuj dzienniki zdarzeń krytycznych"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Eksportuj- %1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Nie udało się wznowić podawania insuliny"; - -/* No comment provided by engineer. */ -"FAVORITE FOODS" = "ULUBIONE JEDZENIE"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Glukoza z krwi"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Napraw teraz, włączając powiadomienia, alerty krytyczne i powiadomienia zależne od czasu."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Do %1$@"; - -/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ -"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "Ze względów bezpieczeństwa należy zezwolić na alerty krytyczne, alerty zależne od czasu i uprawnienia do powiadomień (alerty niekrytyczne) na swoim urządzeniu na dalsze korzystanie z %1$@ i nie można wyłączać poszczególnych alarmów."; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Prognozowany poziom glukozy we krwi może nadal być wyższy niż zakres docelowy."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Prognozowana glukoza"; - -/* Label for link to see frequently asked questions */ -"Frequently asked questions about alerts" = "Często zadawane pytania dotyczące alertów"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Uzyskaj pomoc dotyczącą uprawnień alertów"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glukoza"; - -/* Title for glucose based partial application experiment description -Title of glucose based partial application experiment */ -"Glucose Based Partial Application" = "Algorytm adaptacyjny"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Dane o glukozie są nieaktualne od %1$@"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Dane o glukozie są niedostępne"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Dane dotyczące glukozy są już dostępne"; - -/* Description of the prediction input effect for suspension of insulin delivery */ -"Glucose effect of suspending insulin delivery" = "Wpływ wstrzymania podawania insuliny na poziom glukozy"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Wprowadzanie glukoza jest poza zakresem"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Pęd glukozy"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Harmonogram zakresu docelowego glukozy"; - -/* No comment provided by engineer. */ -"HARDWARE SOUNDS" = "DŹWIĘKI SPRZĘTOWE"; - -/* No comment provided by engineer. */ -"High Glucose" = "Wysoki poziom glukozy"; - -/* No comment provided by engineer. */ -"How can I silence non-Critical Alerts?" = "Jak mogę wyciszyć alerty niekrytyczne?"; - -/* No comment provided by engineer. */ -"How can I silence only Time Sensitive and Non-Critical alerts?" = "Jak wyciszyć tylko alerty zależne od czasu i niekrytyczne?"; - -/* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Jak mogę tymczasowo wyciszyć wszystkie dźwięki aplikacji %1$@ ?"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Jak zaktualizować (LoopDocs)"; - -/* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Jeśli tryb skupienia w systemie iOS jest włączony, a opcja Wycisz alerty jest wyłączona, alerty krytyczne będą nadal dostarczane, a alerty niekrytyczne będą wyciszane, dopóki %1$@ nie zostanie dodany do każdego trybu skupienia jako dozwolona aplikacja."; - -/* Immediate Delivery status text */ -"Immediate" = "Natychmiastowy"; - -/* Algorithm Experiments description second paragraph. */ -"In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." = "W przyszłych wersjach Loop te eksperymenty mogą się zmienić, stać się standardowymi częściami algorytmu Loop lub zostać całkowicie usunięte z Loop. Śledź czat Loop Zulip, aby być na bieżąco z możliwymi zmianami w tych funkcjach."; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Niemożliwy do określenia"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulina"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulina podana (U) × czułość insuliny (%1$@/J)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Korekty insuliny zostały wyłączone!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Podaż insuliny"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "wpływ insuliny"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Model insuliny"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Pompa insulinowa"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Wrażliwość na insulinę (ISF)"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Harmonogram wrażliwości na insulinę"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Podawanie Zawieszone"; - -/* Insulin type label */ -"Insulin Type" = "Rodzaj insuliny"; - -/* Title for integral retrospective correction experiment description -Title of integral retrospective correction experiment */ -"Integral Retrospective Correction" = "Integralna korekta retrospektywna"; - -/* Description of Integral Retrospective Correction toggle. */ -"Integral Retrospective Correction (IRC) is an extension of the standard Retrospective Correction (RC) algorithm component in Loop, which adjusts the forecast based on the history of discrepancies between predicted and actual glucose levels.\n\nIn contrast to RC, which looks at discrepancies over the last 30 minutes, with IRC, the history of discrepancies adds up over time. So continued positive discrepancies over time will result in increased dosing. If the discrepancies are negative over time, Loop will reduce dosing further." = "Integralna korekta retrospektywna (IRC) jest rozszerzeniem standardowego komponentu algorytmu Korekta retrospektywna (RC) w Loop, który koryguje prognozę na podstawie historii rozbieżności między przewidywanymi a rzeczywistymi poziomami glukozy. \n\n W przeciwieństwie do RC, który analizuje rozbieżności w ciągu ostatnich 30 minut, w przypadku IRC historia rozbieżności sumuje się w czasie. Tak więc utrzymujące się dodatnie rozbieżności w czasie spowodują zwiększenie dawki. Jeśli rozbieżności są ujemne w czasie, Loop jeszcze bardziej zmniejszy podawanie insuliny."; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Przerwane %1$@ : %2$@ z %3$@ %4$@"; - -/* Carb error description: invalid absorption time. (1: Input duration in hours). */ -"Invalid absorption time: %1$@ hours" = "Nieprawidłowy czas absorpcji: %1$@ godz"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Nieprawidłowa wielkość bolusa"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Nieprawidłowa ilość węglowodanów"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Błędne dane: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Przyszła glukoza nie jest znana"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Nieprawidłowy odczyt glukozy ze znacznikiem czasu, który wynosi %1$@ w przyszłości"; - -/* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Alerty krytyczne systemu iOS i alerty zależne od czasu to typy powiadomień Apple. Wykorzystuje się je do zdarzeń o wysokim priorytecie. Oto kilka przykładów:"; - -/* No comment provided by engineer. */ -"IOS FOCUS MODES" = "TRYBY SKUPIENIA IOS"; - -/* The title text for the issue report cell */ -"Issue Report" = "Zgłaszanie błędów"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Wygląda na to, że nie wprowadziłeś zjedzonego posiłku. Stuknij, aby dodać zaległy posiłek."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Wprowadzono duży posiłek"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Uruchamia aplikację CGM"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Dowiedz się więcej"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Pozostało mniej niż minutę"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Ładowanie..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Zarejestruj dawkę"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Zarejestrowana dawka insuliny"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Pętla uległa awarii"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Awaria pętli"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop wykrył problem z ustawieniami Bluetooth i nie będzie działać poprawnie, dopóki Bluetooth nie zostanie włączony. Nie będziesz otrzymywać odczytów poziomu glukozy ani możliwości podania bolusa."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Pętla wykryła pominięty posiłek i oszacowała jego wielkość. Edytuj ilość węglowodanów, aby odpowiadała ilości węglowodanów, które mogłeś zjeść."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop nie działał poprawnie przez %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Pętla automatycznie poda bolusa, kiedy zapotrzebowanie na insulinę przekroczy zaplanowaną dawkę podstawową, a w razie potrzeby zredukuje zaplanowaną dawkę podstawową (bazę)."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Pętla nie będzie działać pomyślnie, dopóki Bluetooth nie zostanie włączony. Nie będziesz otrzymywać odczytów poziomu glukozy ani możliwości podania bolusa."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Pętla ustawi tymczasowe dawki podstawowe, aby zwiększać lub zmniejszyć podawanie insuliny."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Niski poziom glukozy"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Zarządzaj uprawnieniami w Ustawieniach"; - -/* View title for how mute alerts work */ -"Managing Alerts" = "Zarządzanie alertami"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Dawka z pena: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Maksymalna dawka podstawowa na godzinę"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maksymalny bolus"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Przekroczono maksymalny bolus"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Bolus Posiłkowy"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Powiadomienia o pominiętych posiłkach"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Brakujące dane: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Brak ustawionego maksymalnego dozwolonego bolusa"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "wpływ pędu"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Więcej informacji"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Wycisz wszystkie alerty"; - -/* Title for mute alert duration selection action sheet */ -"Mute All Alerts Temporarily" = "Tymczasowo wycisz wszystkie alerty"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Potrzebuje uwagi"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Ujemny czas trwania nie jest dozwolony"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Message for mute alert duration selection action sheet */ -"No alerts or alarms will sound while muted. Select how long you would you like to mute for." = "Po wyciszeniu nie będą emitowane żadne alerty ani alarmy. Wybierz, jak długo chcesz wyciszyć."; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Bolus nie jest zalecany"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Brak podłączonych urządzeń lub awaria podczas połączenia urządzenia"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Nie skonfigurowano maksymalnego bolusa"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Nie skonfigurowano pompy"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Brak aktualnej glukozy"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Brak ostatnich danych dotyczących glukozy"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Brak ostatnich danych pompy"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Nie, edytuj ilość"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Dostarczanie powiadomień"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "Dostarczanie powiadomień jest ustawione na Zaplanowane podsumowanie w ustawieniach telefonu. \n\nAby uniknąć opóźnień w otrzymywaniu powiadomień od %1$@ , zalecamy ustawienie dostarczania powiadomień na Natychmiastowe dostarczanie."; - -/* Notifications Status text */ -"Notifications" = "Powiadomienia"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Spóźnione Powiadomienia"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Powiadomienia zawierają ważne informacje o aplikacji %1$@ bez konieczności otwierania aplikacji."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Powiadomienia dostarczają ważnych informacji o aplikacji %1$@ bez konieczności otwierania aplikacji. \n\nWłącz je w ustawieniach telefonu, aby mieć pewność, że będziesz otrzymywać powiadomienia %1$@ , alerty krytyczne i powiadomienia zależne od czasu."; - -/* Notification Setting Status is Off */ -"Off" = "Wyłącz"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "O nie! Pętla uległa awarii podczas dozowania, a regulacja insuliny została wstrzymana do czasu zamknięcia tego okna dialogowego. Historia dawkowania może nie być dokładna. Przejrzyj wykresy podawania insuliny i uważnie monitoruj poziom glukozy we krwi."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Włącz"; - -/* The title text for the override presets */ -"Override Presets" = "Override Presets"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Możliwe pominięcie posiłku"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Poziom przed posiłkiem"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Przewidywany poziom cukru o %1$@ wyniesie %2$@"; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Przewidywane stężenie glukozy jest w zakresie."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Przewidywana glukoza %1$@ jest poniżej ustawionego bezpiecznego limitu glukozy."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Przewidywany poziom cukru %1$@ jest poniżej progu zawieszenia."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Przewidywana: %1$@Rzeczywista: %2$@ (%3$@)"; - -/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "predykcja-opis-całka-retrospektywna-korekta"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Przygotowywanie dzienników zdarzeń krytycznych"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Wygaśnięcie profilu:"; - -/* Time that profile expires */ -"Profile expires " = "Profil wygasa "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profil wkrótce wygaśnie"; - -/* The title of the pump section in settings */ -"Pump" = "Pompa"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Niski poziom baterii w pompie"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Dane z pompy są nieaktualne od %1$@"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Zdarzenie pompy"; - -/* No comment provided by engineer. */ -"Pump Expired" = "Pompa wygasła"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Zarządzanie Pompą"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Błąd menedżera pompy: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Zbiorniczek w pompie jest pusty"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Niski poziom w zbiorniczku pompy"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pump Suspended"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pompa zawieszona. Automatyczne dozowanie jest wyłączone."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Szybko działające – dorośli"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Szybko działająca – dzieci"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Rekomendacja nieaktualna od %1$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Zalecana baza"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Zalecany bolus"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Zalecany bolus przekracza maksymalny bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Rekomendowany bolus: %@ jednostek"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Zdalne podanie bolusa: %@ J"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Zdalne wprowadzanie węglowodanów: %d gramów"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Zbiorniczek"; - -/* No comment provided by engineer. */ -"Reservoir Empty" = "Pusty zbiorniczek"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Korekcja retrospektywna"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Spróbuj ponownie"; - -/* No comment provided by engineer. */ -"Save" = "Zapisz"; - -/* No comment provided by engineer. */ -"Save as favorite food" = "Zapisz jako ulubione jedzenie"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Zapisz bez podania Bolusa"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Zaplanowane"; - -/* No comment provided by engineer. */ -"Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" = "Wybór ulubionego jedzenia na ekranie wprowadzania węglowodanów powoduje automatyczne wypełnienie pól ilości węglowodanów, rodzaju jedzenia i czasu wchłaniania! Dotknij przycisku dodawania poniżej, aby stworzyć swoje pierwsze ulubione jedzenie!"; - -/* No comment provided by engineer. */ -"Sensor Failed" = "Awaria sensora"; - -/* The title of the services section in settings */ -"Services" = "Usługi"; - -/* The label of the settings button */ -"Settings" = "Ustawienia"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Konfiguracja niekompletna"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Pokazuje ostatni błąd Loop"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Prosty kalkulator bolusa"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Prosty kalkulator posiłków"; - -/* Format fragment for a start time */ -"since %@" = "od %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Strona URL"; - -/* Software update button link text */ -"Software Update" = "Aktualizacja oprogramowania"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Czas rozpoczęcia jest poza zakresem: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "starting at %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Rozpoczynam podawanie bolusa"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Wsparcie"; - -/* The title text in settings */ -"Suspend Threshold" = "Próg zawieszenia pompy"; - -/* Title of the prediction input effect for suspension of insulin delivery */ -"Suspension of Insulin Delivery" = "Wstrzymanie podawania insuliny"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Stuknij tutaj, aby skonfigurować CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Stuknij tutaj, aby skonfigurować pompę"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Stuknij tutaj, aby skonfigurować usługę"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Dodaj glikemię"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Stuknij, aby wznowić"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Bolus STOP!"; - -/* Label for button to unmute all alerts */ -"Tap to Unmute Alerts" = "Stuknij, aby wyłączyć wyciszenie alertów"; - -/* The alert body for unmute alert confirmation */ -"Tap Unmute to resume sound for your alerts and alarms." = "Stuknij opcję Wyłącz wyciszenie, aby wznowić dźwięk alertów i alarmów."; - -/* Settings app TestFlight section */ -"TestFlight" = "TestFlight"; - -/* Settings TestFlight expiration view */ -"TestFlight Expiration" = "Wygaśnięcie TestFlight"; - -/* Time that build expires */ -"TestFlight expires " = "TestFlight wygasa"; - -/* The title for notification of upcoming TestFlight expiration */ -"TestFlight Expires Soon" = "TestFlight wkrótce wygaśnie"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Wprowadzona wielkość bolusa jest mniejsza niż minimalna możliwa do podania."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Algorytm dawkowania bolusa wykorzystuje bardziej ostrożne oszacowanie przewidywanego poziomu glukozy we krwi niż to, które jest używane do dostosowania dawki podstawowej. \n\nW rezultacie przewidywany poziom glukozy we krwi po podaniu bolusa może nadal być wyższy niż zakres docelowy."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Rekomendacja dotycząca bolusa została zaktualizowana. Potwierdź ponownie wielkość bolusa."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Model umożliwiający dostosowanie czasu działania insuliny."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "Maksymalna dozwolona ilość to %@ gramów"; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "Maksymalna dozwolona ilość to: %1$@"; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Maksymalna wielkość bolusa to %@ J."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Maksymalny bolus wynosi %@ jednostek"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Przed podaniem bolusa musi zostać skonfigurowane ustawienie maksymalnego bolusa."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Ustawienia terapii"; - -/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Ta opcja ma zastosowanie tylko wtedy, gdy Strategia dawkowania pętli jest ustawiona na Automatyczny bolus."; - -/* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Alerty zależne od czasu"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Powiadomienia zależne od czasu"; - -/* No comment provided by engineer. */ -"Transmitter Low Battery" = "Słaba bateria transmitera"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Spróbuj ponownie"; - -/* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Wyłącz głośność na swoim urządzeniu iOS lub dodaj %1$@ jako dozwoloną aplikację do każdego trybu skupienia. Alerty zależne od czasu i krytyczne będą nadal emitowane, ale alerty niekrytyczne zostaną wyciszone."; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Włącz Bluetooth, aby otrzymywać powiadomienia, alarmy lub odczyty poziomu glukozy z sensora."; - -/* The short unit display string for international units of insulin */ -"U" = "J"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Nie można wyczyścić alertu"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Nie można połączyć się z pompą"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Nie można zapisać wprowadzonych węglowodanów"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Nie można zapisać ręcznie wprowadzonego poziomu glukozy"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Nie można zatrzymać podawanego bolusa. Przybliż iPhone'a do pompy i spróbuj ponownie. Aby uzyskać szczegółowe informacje, sprawdź historię podawania insuliny i uważnie monitoruj poziom glukozy."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Nieznany"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Nieznany błąd: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Nieznane ustawienie: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Nieznany czas"; - -/* The title of the action used to unmute alerts */ -"Unmute" = "Wyłącz wyciszenie"; - -/* The alert title for unmute alert confirmation */ -"Unmute Alerts?" = "Wyciszyć Alerty?"; - -/* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ -"Unsupported Notification Service: %1$@" = "Nieobsługiwana usługa powiadomień: %1$@"; - -/* The format for the description of a temporary override end date */ -"until %@" = "do %@"; - -/* indication of when alerts will be unmuted (1: time when alerts unmute) */ -"Until %1$@" = "Do %1$@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Dopóki nie wprowadzę węglowodanów"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Dopóki nie wyłączę"; - -/* No comment provided by engineer. */ -"Urgent Low" = "Pilny niski"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Użyj ustawień przed posiłkiem"; - -/* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Użyj funkcji Wycisz alerty. Umożliwia tymczasowe wyciszenie wszystkich alertów i alarmów za pośrednictwem aplikacji %1$@ , w tym alertów krytycznych i alertów zależnych od czasu."; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Użyj zakresu glukozy dla wysiłku fizycznego"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Użyj wstępnego ustawienia treningu"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Uwaga! Powiadomienia dotyczące bezpieczeństwa są WYŁĄCZONE"; - -/* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Jakie są przykłady alertów krytycznych i alerty zależne od czasu?"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Kiedy aktualny lub prognozowany poziom glukozy znajduje się poniżej granicy bezpieczeństwa, Loop nie zaleca bolusa i zawsze zaleca tymczasową dawkę podstawową wynoszącą 0 jednostek na godzinę."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Kiedy aktualna lub prognozowana glukoza znajduje się poniżej progu zawieszenia, Loop nie zaleca bolusa i zawsze zaleca tymczasową dawkę podstawową wynoszącą 0 jednostek na godzinę."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Po włączeniu Loop może powiadomić Cię, gdy wykryje posiłek, który nie został wprowadzony."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Poza trybem pętli zamkniętej aplikacja korzysta z uproszczonego kalkulatora bolusa, takiego jak typowa pompa."; - -/* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Gdy włączone jest wyciszenie alertów, wszystkie alerty z aplikacji %1$@ w tym alerty krytyczne i alerty zależne od czasu, będą tymczasowo wyświetlane bez dźwięków i będą jedynie wibrować."; - -/* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "Gdy włączone jest wyciszenie alertów, pompa insulinowa i sprzęt CGM mogą nadal wydawać dźwięki."; - -/* Format string for message of reset loop alert. (1: App name) (2: error description) */ -"While trying to restart %1$@ an error occured.\n\n%2$@" = "Podczas próby ponownego uruchomienia %1$@ wystąpił błąd. \n\n %2$@"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Zakres w czasie wysiłku fizycznego"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Cel Tymczasowy (trening) był włączony przez ponad 24 godziny. Upewnij się, że nadal chcesz, aby był włączony, lub wyłącz go w aplikacji."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Tymczasowy profil treningowy nadal działa"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Tak"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Możesz nie otrzymywać alertów dźwiękowych, wizualnych lub wibracyjnych dotyczących krytycznych informacji o bezpieczeństwie. \n\nAby rozwiązać ten problem, wybierz „Ustawienia” i upewnij się, że Powiadomienia, Alerty Krytyczne i Powiadomienia Zależne od Czasu są WŁĄCZONE."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Czas %1$@ został zmieniony. %2$@ potrzebuje dokładnych zapisów czasu, aby przewidywać poziom glukozy i odpowiednio dostosowywać poziom insuliny. \n\nSprawdź w ustawieniach %1$@ (Ogólne / Data i godzina) i upewnij się, że opcja „Ustaw automatycznie” jest WŁĄCZONA. Niepowodzenie w rozwiązaniu problemu może prowadzić do poważnego niedostatecznego lub nadmiernego podawania insuliny."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Twój poziom glukozy jest poniżej %1$@ . Czy na pewno chcesz podać bolus?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Twój poziom glukozy jest poniżej lub przewiduje się, że spadnie poniżej granicy bezpieczeństwa, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Twój poziom glukozy jest poniżej granicy bezpieczeństwa, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Twój poziom glukozy jest niski. Zjedz węglowodany i rozważ odczekanie z podaniem bolusa, aż poziom glukozy znajdzie się w bezpiecznym zakresie."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Twój poziom glukozy jest niski. Zjedz węglowodany i uważnie monitoruj poziom glikemii."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Twoja maksymalna wielkość bolusa to %1$@ ."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Dane Twojej pompy są nieaktualne. %1$@ nie może zalecić wielkości bolusa."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Pompa podaje tymczasową dawkę podstawową ustawioną ręcznie."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Twój zalecany bolus przekracza maksymalną wartość bolusa wynoszącą %1$@ ."; - diff --git a/Loop/pl.lproj/Main.strings b/Loop/pl.lproj/Main.strings deleted file mode 100644 index 37de7fef84..0000000000 --- a/Loop/pl.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 J/godzinę @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Przewidywane"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etykieta"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Zmiana poziomu glukozy"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g łącznie"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Poziom glukozy jest przewidywany dzięki syntezie wielu wprowadzonych danych z różnych źródeł. Użyj tego narzędzia, aby przełączyć różne źródła i zobaczyć jak wpływają na ostateczny wynik."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etykieta"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "docelowo 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Obserwowany"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 J/godzinę @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Efekty wywołane przez węglowodany"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Obserwowane zmiany w poziomie glukozy i uwzględnianie zmian podaży insuliny mogą być użyte do oszacowania czasu absorpcji węglowodanów."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Zalecana baza"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etykieta"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etykieta"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Przewidywany poziom cukru"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "docelowo 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Aktywne węglowodany"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glukoza"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etykieta"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Węglowodany"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Zalecana baza"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/pt-BR.lproj/InfoPlist.strings b/Loop/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index 4bcdbc5113..0000000000 --- a/Loop/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,21 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth é utilizado para comunicação com a bomba de insulina e os dispositivos de monitoramento de glicose."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth é utilizado para comunicação com a bomba de insulina e os dispositivos de monitoramento de glicose."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID é utilizado para autenticar o bolus de insulina."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Os dados de refeições do banco de dados de saúde são utilizados para definir os efeitos da glicose para a representação gráfica e cálculo da aceleração."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Dados de carboidratos inseridos no aplicativo e no Apple Watch são armazenados no banco de dados de saúde. Dados de glicemia recebidos do CGM são armazenados de modo seguro no HealthKit."; - diff --git a/Loop/pt-BR.lproj/Localizable.strings b/Loop/pt-BR.lproj/Localizable.strings deleted file mode 100644 index e78a0d1aa6..0000000000 --- a/Loop/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,481 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (pendente: %@)"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "—"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorvida"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U restante"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U restante: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/hora @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 min coeficiente de regressão de glicose (b₁), continuada com queda em 30 min."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min de comparação da previsão de glicose vs atual, continuada com queda em 60 min."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Um modelo baseado na absorção publicada da insulina Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Um modelo baseado na absorção publicada das insulinas Humalog, Novolog e Apidra em adultos."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AceitarBolusRecomendado"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Carboidratos Ativos"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Carboidratos Ativos: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Carboidratos Ativos"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Insulina Ativa"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Insulina Ativa: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Adicionar Carb"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Adicionar CGM"; - -/* The label of the meal button */ -"Add Meal" = "Adicionar Refeição"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Adicionar Bomba"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "Chave API"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Tem certeza de que deseja excluir todas as entradas do histórico?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Tem certeza de que deseja excluir todos os valores do reservatório?"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Você está certo que quer remover este CGM?"; - -/* Format fragment for a specific time */ -"at %@" = "em %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Autentique para Bolus de %@ Unidades"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Programação da Taxa Basal"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Taxas Basais"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Entregue %1$@ of %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Aplicando %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Cancelar"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Cancelando Bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Efeitos Carb"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Taxas de Carbs"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Adicionar Carb"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carboidratos"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carbs Absorvidos (g) ÷ Relação Carb (g/U) × Sensibilidade a Insulina (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Troque a bateria da bomba imediatamente"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Troque o reservatório da bomba agora"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Verifique as configurações"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Verifique se sua bomba está dentro do alcance"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Verifique seu dispositivo CGM"; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Escolha um tempo de absorção mais longo para refeições maiores ou aquelas que contenham gorduras e proteínas. Esta é apenas uma orientação para o algoritmo e não precisa ser exata."; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Ciclo Fechado"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "em %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "desde %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configuração"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Erro de Configuração: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Continuar"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Monitoramento Contínuo de Glicose"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Faixa de Correção"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = " Glicemia atual %1$@ está abaixo da zona de correção."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Sobreposição Personalizada"; - -/* Date picker label */ -"Date" = "Data"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Remover Conta"; - -/* Button title to delete all objects */ -"Delete All" = "Remover Todos"; - -/* Button title to delete CGM */ -"Delete CGM" = "Remover CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Delete Service"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limites de Entrega"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Desativa"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Dispensar"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Ativar"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Digite o limite de suspensão"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Erro Cancelando Bolus"; - -/* The alert title for a resume error */ -"Error Resuming" = "Erro ao Retomar"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Event History"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Eventualmente %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Excede o Bolus Máximo"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Por %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glicose"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Medida de glicose está %1$@ atrasada"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Medida de glicose não disponível"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Aceleração da Glicose"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Indefinidamente"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulina"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulina Absorvida (U) × Sensibilidade a Insulina (%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulina Entregue"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Efeitos da Insulina"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Modelo de Insulina"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Sensibilidades a Insulina"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Dados inválidos: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Gerar Relatório"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Inicia app CGM"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Carregando..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "Falha no Loop"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Nenhum ciclo completo com sucesso em %@"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Bolus Máximo"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Dados ausentes: %1$@"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Efeitos de aceleração"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Mais Info"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Precisa de Atenção"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Nenhum dispositivo conectado ou falha durante a conexão"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Ligado"; - -/* The title text for the override presets */ -"Override Presets" = "Sobreposições Predefinidas"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Meta Pré-Refeição"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Glicemia prevista em %1$@ é %2$@."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Glicemia prevista de %1$@ está abaixo do limite de suspensão."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Prevista: %1$@\nAtual: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "Bomba"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Batteria da Bomba Fraca"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Dados da bomba são de %1$@ atrás"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Eventos da Bomba"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Gerenciamento da Bomba"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Reservatório da Bomba Vazio"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Reservatório da Bomba Vazio"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Bomba Suspensa"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Ação-Rápida – Adultos"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Ação-Rapida – Crianças"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Recomendação expirou: %1$@ atrás"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Basal Recomendada"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolus Recomendado: %@ Unidades"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Correção Retrospectiva"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Tentar de Novo"; - -/* The title of the services section in settings */ -"Services" = "Serviços"; - -/* The label of the settings button */ -"Settings" = "Configurações"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Mostrar último erro do ciclo"; - -/* Format fragment for a start time */ -"since %@" = "desde %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Site URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "iniciando às %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Iniciando Bolus"; - -/* The title text in settings */ -"Suspend Threshold" = "Limite de Suspenção"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Toque para retomar"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "O modelo antigo utilizado pelo Loop permitindo personalização da duração da ação."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "O bolus máximo é %@ Unidades"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Desconhecido"; - -/* The format for the description of a temporary override end date */ -"until %@" = "até %@"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Usar Metas de Glicemia de Exercício"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Quando a glicose atual ou prevista estiver abaixo do limite de suspensão, o Loop não recomendará um bolus e sempre recomendará uma taxa basal temporária de 0 unidades por hora"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Metas de Exercício"; - diff --git a/Loop/pt-BR.lproj/Main.strings b/Loop/pt-BR.lproj/Main.strings deleted file mode 100644 index aa9753e47f..0000000000 --- a/Loop/pt-BR.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Estado"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/hora @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Prevista"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Rótulo"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Variação de Glicose"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Total"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "A glicose futura é prevista combinando os efeitos de múltiplas entradas. Use esta ferramenta para alternar várias entradas para ver como elas se comparam à previsão final."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Rótulo"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "eventualmente 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observada"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/hora @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Efeitos dos Carboidratos"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Alterações observadas na glicose, subtraindo alterações modeladas da administração de insulina, podem ser usadas para estimar a absorção de carboidratos."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Basal Recomendada"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Rótulo"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Rótulo"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Glicose Prevista"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "eventualmente 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Active Carbs"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glicose"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Rótulo"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Carboidratos"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Basal Recomendada"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/ro.lproj/InfoPlist.strings b/Loop/ro.lproj/InfoPlist.strings deleted file mode 100644 index 342b12482c..0000000000 --- a/Loop/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth este folosit pentru a comunica cu pompa de insulină, precum și cu dispozitivele de monitorizare glicemică continuă."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth este folosit pentru a comunica cu pompa de insulină, precum și cu dispozitivele de monitorizare glicemică continuă."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Camera este folosită pentru a scana codurile de bare ale dispozitivelor."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID este folosit la autentificarea pentru bolus."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Informațiile despre nutriție din baza de date Sănătate sunt folosite pentru a determina efectele glucozei. Informațiile despre glucoză din baza de date Sănătate sunt folosite pentru construirea de grafice și calcule de trend/momentum."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Carbohidrații introduși în aplicație și pe ceas sunt stocați în baza de date Sănătate. Glicemiile din GCM sunt stocate în siguranță în HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop folosește Siri pentru a vă permite să activați presetări cu ajutorul vocii."; - diff --git a/Loop/ro.lproj/Localizable.strings b/Loop/ro.lproj/Localizable.strings deleted file mode 100644 index cee5790643..0000000000 --- a/Loop/ro.lproj/Localizable.strings +++ /dev/null @@ -1,1111 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (urmează a fi administrate: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Presetare înainte de masă"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " rămas"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = " Notificările de siguranță sunt dezactivate"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Presetare antrenament"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@%2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbiți"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ rămase"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U total"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ nu a putut anula rata bazală temporară actuală, care este mai mare decât noua limită bazală maximă pe care ați setat-o. Acest lucru poate duce la o administrare de insulină mai mare decât se dorește. \n\nLuați în considerare suspendarea manuală a administrării insulinei și apoi reluarea imediată pentru a pune în aplicare administrarea bazală cu noua limită în vigoare."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@%2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ operează cu bucla închisă în poziția OFF. Pompa și CGM-ul vor continua să funcționeze, dar aplicația nu va ajusta automat dozarea."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ nu poate șterge alerta de pe dispozitiv"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ nu poate comunica cu pompa de insulină. Aplicația va continua să încerce să comunice cu pompa, dar informațiile despre administrarea insulinei nu pot fi actualizate și automatizarea nu poate continua.\nPuteți aștepta câteva minute pentru a vedea dacă problema se rezolvă sau apăsați butonul de mai jos pentru a afla mai multe despre alte opțiuni."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Setările de timp necesită atenție"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ U"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U rămase"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U rămase: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/oră @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ nu va mai funcționa în %2$@. Va trebui să actualizați înainte de aceasta, cu un nou profil de asigurare a accesului."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "coeficient de regresie glicemică pe 15 min (b₁), continuat cu o diminuare pe 30 min."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "Comparație pe 30 min a glicemiei anticipate față de cea observată, continuată cu o diminuare pe 60 min."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Câteva secunde rămase"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "O intrare manuală de glicermie trebuie să fie între %1$@ și %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "O intrare manuală de glicemie trebuie să fie între %1$@ și %2$@ ."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Un model bazat pe absorbția declarată a insulinei Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Un model bazat pe absorbția declarată a insulinei Humalog, Novolog și Apidra la adulți."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "O nouă versiune de %@ este disponibilă și se recomandă să continuați să utilizați aplicația."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Este disponibilă o nouă versiune de %@ ."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "O pompă trebuie configurată înainte ca un bolus să poată fi livrat."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Carbohidrați activi"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Carbohidrați activi: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Carbohidrați activi"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Insulină activă"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Insulină activă: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Adaugă carbohidrați"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Adaugă CGM"; - -/* The label of the meal button */ -"Add Meal" = "Adaugă masă"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Adaugă pompă"; - -/* Title text for button to set up a service */ -"Add Service" = "Adaugă Serviciu"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Ajustat pentru"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Gestionarea alertelor"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Permisiuni pentru alarme"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Setări algoritm"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Un modificator activa a schimbat raportul dintre carbohidrați și insulină cât și sensibilitatea la insulină. Dacă nu doriți ca acest lucru să vă afecteze calculul bolusului și gllicemia prognozată, luați în considerare dezactivarea modificatorului."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Eroare la încercarea de salvare a carbohidraților."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Eroare la încercarea de salvare a glicemiei introduse manual."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "A apărut o eroare neașteptată de stare la inițiere."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Este disponibilă o recomandare de bolus nouă."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "Secretul API"; - -/* Settings app profile section */ -"App Profile" = "Profil"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Sigur doriți să ștergeți toate înregistrările din istoric?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Sigur doriți să ștergeți toate înregistrările despre dozele de insulina?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Sigur doriți să ștergeți toate valorile de rezervor?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Sunteţi sigur că doriţi să ştergeţi toate datele %@.\n(Această acţiune nu este reversibilă)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Sunteți sigur că doriți să ștergeți acest CGM?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Ești sigur că vrei să ștergi acest serviciu?"; - -/* Format fragment for a specific time */ -"at %@" = "la %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Autentificare pentru bolus %@ unități"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Autentifică-te pentru a înregistra %@ unități"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Orar rate bazale"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Rate bazale"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Pe baza glicemiei prognozate, nu se recomandă niciun bolus."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth \nOprit"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth \nIndisponibil"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Alertă Bluetooth dezactivat"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Alertă Bluetooth indisponibil"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Problemă bolus"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Actualizare Recomandare bolus"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Rezumat Bolus"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus prea mic"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Bolus administrat %1$@ of %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolus în administrare %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Renunță"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Întrerupere Bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Efecte carbohidrați"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Cantitate CH"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Programul raportului de carbohidrați"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Raport carbohidrați/insulină"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Adaugă carbohidrați"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Intrarea de carbohidrați este prea mare"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carbohidrați"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Carbohidrați absorbiți (g) ÷ Raport carbohidrați (g/U) × Factor de sensibilitate la insulină (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Schimbați imediat bateria pompei"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Schimbați rezervorul pompei acum"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Verificați setările"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Verificați că pompa este în apropriere"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Verificați sursa de date CGM"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Verificați ora dispozitivului și/sau eliminați orice date incorecte din Apple Health."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Alegeți o durată mai lungă de absorbție pentru mese mai mari sau pentru cele care conțin grăsimi și proteine. Nu e necesară o valoare exactă, scopul e să oferim doar o ghidare pentru algoritm."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Închide"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Loop automat"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Buclă închisă dezactivata"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Buclă închisă necesită o sesiune activă de senzor CGM"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Bucla închisă necesită ca setarea să fie finalizată"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "la %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "de la %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Configurare finalizată"; - -/* The title of the configuration section in settings */ -"Configuration" = "Configurare"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Eroare configurare: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Continuă"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Monitorizare glicemică continuă"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Interval țintă pentru corecție"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Alerte critice"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Jurnal evenimente critice pregătit"; - -/* Critical event log export title */ -"Critical Event Logs" = "Jurnal de evenimente critice"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Jurnalele de evenimente critice nu au putut fi exportate."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Glicemia curentă"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = " Glicemia curentă de %1$@ se situează sub intervalul țintă de corecție."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Modificare personalizată"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Presetare particularizată"; - -/* Date picker label */ -"Date" = "Data"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Șterge"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Șterge cont"; - -/* Button title to delete all objects */ -"Delete All" = "Șterge tot"; - -/* Button title to delete CGM */ -"Delete CGM" = "Ștergeți CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Șterge serviciul"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Șterge date CGM de testare"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Șterge date de testare"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Ștergere date pompă de testare"; - -/* Button text to deliver a bolus */ -"Deliver" = "Livrează"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limite de livrare"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Tratament Diabet"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Ați intenționat să introduceți %1$@ grame ca cantitate de carbohidrați pentru această masă?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Dezactivează"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Renunță"; - -/* No comment provided by engineer. */ -"Done" = "Realizat"; - -/* Title for card to log dose */ -"Dose Summary" = "Rezumat doză"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Strategie de dozare"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Durata depășește: %1$.1f ore"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Activează Bluetooth"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Activează"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Introduceți o glicemie luata cu glucometrul pentru o recomandare de bolus."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Introdu bolusul"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Introduceți glicemia din deget"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Introduceți limita de siguranță pentru glicemie"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Introduceți limita pentru suspendare"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Eroare la anularea bolusului"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Eroare la exportarea jurnalelor"; - -/* The alert title for a resume error */ -"Error Resuming" = "Eroare în timpul reluării"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Istoric evenimente"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Ajunge la %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Depășește bolusul maxim permis în setări"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Depășește maximul de carbohidrați permis"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Depășește bolusul maxim"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Exportă jurnalul de evenimente critice"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Export-%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Nu s-a reușit reluarea administrării de insulină"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Glicemie din deget"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Remediați acum activând Notificări, Alerte critice și Notificări sensibile la timp."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "Timp de %1$@"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Glicemia prognozată poate fi în continuare mai mare decât intervalul țintă."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Glicemia prognozată"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Obțineți ajutor cu permisiunile de alertă"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glucoza"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Datele despre glicemie au o vechime de %1$@"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Nu sunt disponibile date despre glicemie"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Valorile glicemiei sunt disponibile"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Valoarea glicemică introdusă este în afara intervalului"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Momentum glicemie"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "Programul intervalului țintă de glucoză"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Cum se actualizează (LoopDocs)"; - -/* Immediate Delivery status text */ -"Immediate" = "Imediat"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Nedeterminat"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulină"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulină absorbită (U) × factor de sensibilitate la insulină (%1$@/U)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Ajustările de insulină au fost dezactivate!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Administrare insulină"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Efecte insulină"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Modelul de insulină"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Pompa de insulină"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Factor de sensibilitate la insulină"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "Programul Factorului de Sensibilitate la Insulină"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Administrarea insulinei suspendată"; - -/* Insulin type label */ -"Insulin Type" = "Tipul de insulină"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Întrerupere %1$@: %2$@ din %3$@ %4$@"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Cantitate invalidă de bolus"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Cantitate de carbohidrați invalidă"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Date invalide: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Glicemie Viitoare Invalidă"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Citirea invalidă a glicemiei cu un marcaj temporal care este %1$@ în viitor"; - -/* The title text for the issue report cell */ -"Issue Report" = "Raportare probleme"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Se pare că nu ați înregistrat o masă pe care ați mâncat-o. Atingeți pentru a o înregistra acum."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "O cantitate mare de carbohidrați a fost introdusă"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Lansează aplicația CGM"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Aflați mai multe"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "A rămas mai puțin de un minut"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Se încarcă..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Înregistrează Doză"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Doza de insulină înregistrată"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop s-a închis"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Eșec Loop"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop a detectat o problemă cu setările Bluetooth și nu va funcționa cu succes până când Bluetooth nu este activat. Nu veţi primi valori ale glicemiei sau nu veţi putea face bolus."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop a detectat o masă neanunțată și a estimat dimensiunea acesteia. Editați cantitatea de carbohidrați pentru a se potrivi cu cantitatea de carbohidrați pe care ați consumat-o."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop nu a rulat cu succes timp de %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop va bolusa automat când necesarul de insulină este deasupra bazalei programate, și va utiliza rate bazale temporare atunci când este necesar, pentru a reduce cantitatea de insulină administrată sub nivelul bazal programat."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop nu va funcționa cu succes până când Bluetooth nu este activat. Nu veți primi citiri de glicemie sau nu veți putea să bolusați."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop va stabili ratele bazale temporare pentru a crește și reduce cantitatea de insulina livrata."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Glicemie scăzută"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Gestionați permisiunile din Setări"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Doză manuală: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Rata bazală maximă pe oră"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Bolus maxim"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Bolusul maxim depășit"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Bolus prandial"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Notificări privind mesele pierdute"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Date lipsă: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Lipsește bolusul maxim permis în setări"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Efecte momentum"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Detalii"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Dezactivați toate alertele"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Necesită atenție"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Durata negativă nu este permisă"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Niciun bolus recomandat"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Nu este conectat niciun dispozitiv sau s-a produs o eroare la conectare"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Bolusul Maxim nu este setat"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Nicio pompă configurată"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Nu există date recente despre glicemie"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Nu există date recente despre glicemie"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Nu există date recente despre pompă"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Nu, modificați cantitatea"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Livrare notificare"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "Livrarea notificărilor este setată la Rezumat programat în setările telefonului dvs. \n\nPentru a evita întârzierea primirii notificărilor de la %1$@ , vă recomandăm ca livrarea notificărilor să fie setată la Livrare imediată."; - -/* Notifications Status text */ -"Notifications" = "Notificări"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Notificări întârziate"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Notificările vă oferă informații importante despre aplicație %1$@ fără a fi necesar să deschideți aplicația."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Notificările vă oferă informații importante despre aplicație %1$@ fără a fi necesar să deschideți aplicația. \n\n Păstrați-le activate în setările telefonului pentru a vă asigura că primiți notificări %1$@ , alerte critice și notificări sensibile la timp."; - -/* Notification Setting Status is Off */ -"Off" = "Oprit"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh nu! Loop s-a blocat în timpul administrării, iar ajustările insulinei au fost întrerupte până când acest dialog este închis. Istoricul administrării poate să nu fie exact. Vă rugăm să consultați tabelele de livrare a insulinei și să vă monitorizați cu atenție glicemia."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Pornit"; - -/* The title text for the override presets */ -"Override Presets" = "Presetări de înlocuire"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Posibilă masă neanunțată"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Ținte preprandiale"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Glicemia prognozată pentru %1$@ este %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Glicemia prognozată este în interval."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Glicemia prognozată de %1$@ se situează sub limita de siguranță configurată."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Glicemia prognozată de %1$@ se situează sub limita de suspendare configurată"; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Prognozată: %1$@\nActuală: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Pregătire jurnal de evenimente critice"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Expirarea profilului"; - -/* Time that profile expires */ -"Profile expires " = "Profilul expiră "; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profilul expiră în curând"; - -/* The title of the pump section in settings */ -"Pump" = "Pompa"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Nivel scăzut baterie pompă"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Datele din pompă sunt vechi de %1$@"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Eveniment de pompă"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Manager pompă"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Eroare de gestionare a pompei: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Rezervorul pompei este gol"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Rezervor de pompare scăzut"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pompă suspendată"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pompă suspendată. Administrarea automată este dezactivată."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@%2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Acțiune rapidă – Adulți"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Acțiune rapidă - Copii"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Recomandare expirată: acum %1$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Bazala recomandată"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Bolus recomandat"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Bolusul recomandat depășește bolusul maxim"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Bolus recomandat: %@ unități"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Introducere de la distanță a bolusului: %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Introducere de la distanță a carbohidraților: %d grame"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Rezervor"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Corecție retrospectivă"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Reîncearcă"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Salvează fără bolusare"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Programat"; - -/* The title of the services section in settings */ -"Services" = "Servicii"; - -/* The label of the settings button */ -"Settings" = "Setări"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Configurare nefinalizată"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Afișează ultima eroare de loop"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Calculator simplu de bolus"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Calculator simplu al mesei"; - -/* Format fragment for a start time */ -"since %@" = "de la %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL site"; - -/* Software update button link text */ -"Software Update" = "Actualizare de software"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Ora de începere este în afara intervalului: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "începând de la %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Start Bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Asistenţă"; - -/* The title text in settings */ -"Suspend Threshold" = "Limită suspendare"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Apăsați aici pentru a configura un CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Apăsați aici pentru a configura o pompă de insulină"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Apăsați aici pentru a configura un Serviciu"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Atinge pentru a adăuga"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Apăsați pentru a relua"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Atingeți pentru a opri"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Cantitatea de bolus introdusă este mai mică decât valoarea minimă administrabilă."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Algoritmul de dozare al bolusurilor folosește o estimare mai conservatoare a glicemiei prognozate decât cea utilizată pentru a ajusta rata bazală. \n\n Ca rezultat, glicemia estimată după un bolus poate fi în continuare mai mare decât intervalul țintă."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Recomandarea pentru bolus a fost actualizată. Vă rugăm să reconfirmaţi valoarea bolusului."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Modelul vechi utilizat de Loop, permite personalizarea duratei de acțiune."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "Cantitatea maximă admisă este de %@ grame."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "Cantitatea maximă permisă este %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Valoarea maximă bolus este %@ U."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Cantitatea maximă de bolus este de %@ unități"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Trebuie sa configurați o valoare maxima pentru bolus înainte ca acesta să poată fi livrat."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Setări Terapie"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Notificări urgente"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Reîncercați"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Activați Bluetooth pentru a primi alerte, alarme sau citiri de glicemie de la senzor."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Nu se poate șterge alerta"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Nu se poate conecta la pompă"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Nu se pot salva Carbohidrații"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Nu se poate salva glicemia manuala"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Nu s-a putut opri livrarea bolusului. Mutați iPhone-ul mai aproape de pompă și încercați din nou. Verificați istoricul administrării insulinei pentru detalii și monitorizați îndeaproape glicemia."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Necunoscut"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Eroare necunoscută: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Presetare necunoscută: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Timp necunoscut"; - -/* The format for the description of a temporary override end date */ -"until %@" = "până la %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Până când introduc carbohidrații"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Până mă opresc"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Utilizare presetare înainte de masă"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Folosește țintele glicemice de activitate sportivă"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Utilizare presetare antrenament"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Atenție! Notificările de siguranță sunt DEZACTIVATE"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "În momentul în care glicemia actuală sau cea prognozată se situează sub limita de siguranța, Loop nu va recomanda un bolus și va recomanda întotdeauna o rată bazală temporară de 0 unități pe ora."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "În momentul în care glicemia actuală sau cea prognozată se situează sub limita de suspendare, Loop nu va recomanda un bolus și va recomanda întotdeauna o rată bazală temporară de 0 unități pe ora."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Când este activat, Loop vă poate notifica când detectează o masă care nu a fost înregistrată."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Când modul Buclă închisa nu este activat, aplicația folosește un calculator simplificat pentru bolus similar cu cel al unei pompe tipice."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Ținte de activitate sportivă"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Ajustarea temporară de antrenament fost activată de mai mult de 24 de ore. Asigură-te că încă dorești să fie activată sau dezactiveaz-o din aplicație."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Ajustare temporara antrenament încă activa"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Da"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Este posibil să nu primiți alerte sonore, vizuale sau cu vibrații referitoare la informații critice de siguranță. \n\nPentru a remedia problema, atingeți „Setări” și asigurați-vă că notificările, alertele critice și notificările sensibile la timp sunt activate."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Ora %1$@ dumneavoastră a fost schimbată. %2$@ are nevoie de înregistrări precise ale timpului pentru a face predicții despre glicemia și pentru a ajusta insulina în consecință. \n\nVerificați setările %1$@ (General / Data și Ora) și verificați dacă „Setare automată” este activată. Nerezolvarea poate duce la o administrare insuficientă sau excesivă de insulină."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Glicemia dumneavoastră este sub %1$@. Sunteți sigur/ă că doriți să bolusați?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Glicemia ta este sub sau se anticipează că va scădea sub limita de siguranță, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Glicemia ta este sub limita de siguranță, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "Glicemia dumneavoastră este scăzută. Consumați carbohidrați și luați în considerare posibilitatea de a aștepta să faceți un bolus până când glicemia se află într-un interval sigur."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "Glicemia dumneavoastră este scăzută. Mâncați carbohidrați și monitorizați cu atenție."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Valoarea maximă a bolusului este %1$@ ."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Datele pompei dumneavoastră sunt învechite. %1$@ nu poate recomanda o cantitate de bolus."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Pompa dumneavoastră furnizează o rată bazală temporară manuală."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Bolusul recomandat depășește cantitatea maximă de bolus de %1$@ ."; - diff --git a/Loop/ro.lproj/Main.strings b/Loop/ro.lproj/Main.strings deleted file mode 100644 index dff569ea52..0000000000 --- a/Loop/ro.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Stare"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/oră @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Estimată"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etichetă"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Glucose Change"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g în total"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Glicemia este estimată prin combinarea unui număr de date sursă. Folosiți acest instrument pentru a controla diverse surse de date și a felului în care influențează estimarea."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etichetă"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "estimată să ajungă la 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observată"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/oră @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Efecte carbohidrați"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Modificările observate ale glicemiei, eliminând modificările modelate din administrarea insulinei, pot fi folosite pentru a estima absorbția carbohidraților."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Bazala recomandată"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etichetă"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etichetă"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Glicemie estimată"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "estimată să ajungă la 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g CLB"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glucoza"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etichetă"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Carbohidrați"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Bazala recomandată"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/ru.lproj/InfoPlist.strings b/Loop/ru.lproj/InfoPlist.strings deleted file mode 100644 index 758641c73e..0000000000 --- a/Loop/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth используется для связи с инсулиновой помпой и устройствами непрерывного мониторинга глюкозы."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth используется для связи с инсулиновой помпой и устройствами непрерывного мониторинга глюкозы."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Камера используется для сканирования штрих-кодов устройств."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Идентификатор Face ID применяется для авторизации ввода инсулина"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Данные о пище из базы данных Здоровье используются для определения влияния на гликемию. Данные гликемии из базы данных Здоровье используются для графического отображения и вычисления скорости изменений"; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Данные об углеводах в приложении и на смарт-часах хранятся в базе данных Здоровье. Данные о гликемии полученные от систем непрерывного мониторинга хранятся в безопасности в Комплексе Здоровья HealthKit "; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop использует Siri, чтобы вы могли активировать пресеты своим голосом."; - diff --git a/Loop/ru.lproj/Localizable.strings b/Loop/ru.lproj/Localizable.strings deleted file mode 100644 index f657557485..0000000000 --- a/Loop/ru.lproj/Localizable.strings +++ /dev/null @@ -1,1222 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (В ожидании: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "Режим до еды"; - -/* remaining time in setting's profile expiration section */ -" remaining" = " осталось"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = " Оповещения о безопасности выключены"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "Пресет физнагрузки"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ усвоено"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "Осталось %@"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ всего ед"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ не смог отменить вашу текущую ВБС, которая превышает установленный вами новый предел максимальной ВБС. Это может привести к большему количеству подаваемого инсулина, чем хотелось бы.\n\nРассмотрите возможность приостановить введение инсулина вручную, а затем немедленно возобновить введение базального инсулина с новым установленным лимитом."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/ед"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* App sounds title text (1: app name) */ -"%1$@ APP SOUNDS" = "%1$@ ЗВУКИ ПРИЛОЖЕНИЯ"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ работает с замкнутым циклом в положении ВЫКЛ. Ваша помпа и CGM будут продолжать работать, но приложение не будет регулировать дозировку автоматически."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ не удается удалить предупреждение с вашего устройства"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ не может связаться с вашей инсулиновой помпой. Приложение будет продолжать попытки связаться с вашей помпой, но информация о доставке инсулина не может быть обновлена, и автоматизация не может продолжаться.\nВы можете подождать несколько минут и посмотреть, разрешится ли проблема, или нажать кнопку ниже, чтобы узнать о других возможностях."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Настройки времени требуют внимания"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ Ед."; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ Ед осталось"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ Ед осталось: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ ед/час @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ версии %2$@"; - -/* Format string for body for notification of upcoming expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to rebuild before that." = "%1$@ перестанет работать в %2$@. До этого времени необходимо пересобрать приложение заново."; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ перестанет работать в %2$@. Вам нужно будет обновить его до этого, используя новую подпись."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* No comment provided by engineer. */ -"⚠️" = "⚠️"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15-мин коэффициент регрессии гликемии (b1), продолжен с угасанием 30 мин"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 мин сравнение предсказанной гликемии с действительной, продолжено с угасанием 60 мин"; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Осталось несколько секунд"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Ручной ввод глюкозы должен находиться между %1$@ и %2$@"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Ручной ввод глюкозы должен находиться между %1$@ и %2$@"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Модель, основанная на опубликованных данных усвоения FIASP инсулина."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Модель, основанная на опубликованных данных усвоения Humalog, Novolog и Apidra у взрослых."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "Новая версия %@ доступна и рекомендуется для продолжения использования приложения."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Доступна новая версия %@ ."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Перед введением болюса необходимо настроить помпу."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "Принятьрекомендуемыйболюс"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Действующие углеводы"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Действующие углеводы: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Активные углеводы"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Активный инсулин"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Действующий инсулин: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Добавить запись углеводов"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Добавить CGM"; - -/* The label of the meal button */ -"Add Meal" = "Добавить еду"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Добавить помпу"; - -/* Title text for button to set up a service */ -"Add Service" = "Добавить сервис"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Скорректировано на"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Управление оповещениями"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Разрешение оповещений"; - -/* Alert Permissions descriptive text */ -"Alert Permissions and Mute Alerts" = "Разрешения на оповещения и отключение звука оповещений"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Настройки алгоритма"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Активные временные цели изменяют соотношение углеводов и чувствительность к инсулину. Если вы не хотите, чтобы это влияло на расчет болюса и прогнозируемый уровень глюкозы, отключите эту функцию."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Произошла ошибка при попытке сохранить запись об углеводах."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Произошла ошибка при попытке сохранить данные о глюкозе, введенные вручную."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Возникла непредвиденная ошибка подключения."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Доступна обновленная рекомендация болюса."; - -/* The title of the amplitude API key credential */ -"API Key" = "API-ключ"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Секрет"; - -/* Settings app profile section */ -"App Profile" = "Профиль приложения"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Подтвердите удаление всех записей истории?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Вы уверены, что хотите удалить все зарегистрированные записи о дозах?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Подтвердите удаление всех записей резервуара?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Вы уверены, что хотите удалить все свои данные %@ ?\n (Это действие необратимо)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Вы уверены, что хотите удалить этот CGM?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Вы уверены, что хотите удалить этот сервис?"; - -/* Format fragment for a specific time */ -"at %@" = "В %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Подтверждение болюса %@ ед"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Пройдите аутентификацию для подтверждения болюса %@ Единиц"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Скорости базала"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Скорости базала"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Основываясь на вашей прогнозируемой глюкозе, болюс не рекомендуется."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth\n Выключен"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth\n Недоступен"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Оповещение об отключении Bluetooth"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Оповещение о недоступности Bluetooth"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Болюс"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Проблема с подачей болюса"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Рекомендации по болюсу обновлены"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Суммарный болюс"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Болюс слишком маленький"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Подан болюс%1$@ из %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Подается болюс"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Отмена"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Отмена болюса"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Влияние углеводов"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Добавить запись углеводов"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Расписание соотношения углеводов"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Соотношения углеводов"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Добавить запись углеводов"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Слишком много углеводов"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Углеводы"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Усвоенные углеводы (г) ÷ Коэффициент углеводов (г/U) × Чувствительность к инсулину (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Немедленно замените батарейку в помпе"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Замените резервуар помпы сейчас"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Проверьте настройки"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Убедитесь, что помпа в зоне коммуникации"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Проверьте источник мониторинга СК"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Проверьте время вашего устройства и/или удалите недействительные данные из Apple Health."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Выберите более длительное время усвоения для больших порций пищи или тех, которые содержат жиры и белки. Это лишь руководство к алгоритму и не обязательно должно быть точным."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Закрыть"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Замкнутый цикл"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Замкнутый цикл ВЫКЛ"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Замкнутый цикл требует активного подключенного датчика CGM"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Замкнутый цикл требует завершения настройки"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "в %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "с %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Завершить настройку"; - -/* The title of the configuration section in settings */ -"Configuration" = "Конфигурация"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Ошибка конфигурации: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Продолжить"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Непрерывный мониторинг гликемии"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Диапазон коррекции"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Критические оповещения"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Логи критических событий готовы"; - -/* Critical event log export title */ -"Critical Event Logs" = "Логи критических событий"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Не удалось экспортировать журналы критических событий."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Текущая глюкоза"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Гликемия %1$@ ниже диапазона коррекции"; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Настраиваемое ручное управление"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Пользовательский пресет"; - -/* Date picker label */ -"Date" = "Дата"; - -/* The short unit display string for decibles */ -"dB" = "дБ"; - -/* No comment provided by engineer. */ -"Delete" = "Удалить"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Удалить аккаунт"; - -/* Button title to delete all objects */ -"Delete All" = "Удалить все"; - -/* Button title to delete CGM */ -"Delete CGM" = "Удалить мониторинг"; - -/* Button title to delete a service */ -"Delete Service" = "Удалить сервис"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Удалить данные тестирования CGM"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Удалить данные тестирования"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Удалить данные тестирования помпы"; - -/* Button text to deliver a bolus */ -"Deliver" = "Подать"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Пределы подачи"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Лечение диабета"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Вы намеревались ввести %1$@ граммов углеводов для этого блюда?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Отключает"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Отклонить"; - -/* No comment provided by engineer. */ -"Done" = "Готово"; - -/* Title for card to log dose */ -"Dose Summary" = "Сводная информация о дозе"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Режим ввода инсулина"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Продолжительность превышает: %1$.1f часов"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Включить\nBluetooth"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Включает"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Введите глюкозу крови, полученную с помощью глюкометра, для получения рекомендуемого количества болюса."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Ввести болюс"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Введите глюкозу по глюкометру"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Введите безопасный предел глюкозы"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Введите рубеж приостановки"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Ошибка отмены болюса"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Ошибка экспорта логов"; - -/* The alert title for a resume error */ -"Error Resuming" = "Ошибка возобновления"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "История событий"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "В конечном итоге %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Превышен максимально допустимый болюс в настройках"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "Превышено максимально допустимое количество углеводов"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Превышает максимальный болюс"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Экспорт логов критических событий"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Экспорт -%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Не удалось возобновить подачу инсулина"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Глюкоза по глюкометру"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Исправьте ситуацию, включив уведомления, критические оповещения и уведомления, чувствительные к времени."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "В течение %1$@"; - -/* Description text for silencing time sensitive and non-critical alerts (1: app name) */ -"For safety purposes, you should allow Critical Alerts, Time Sensitive and Notification Permissions (non-critical alerts) on your device to continue using %1$@ and cannot turn off individual alarms." = "В целях безопасности вам следует разрешить критические оповещения, срочные оповещения и уведомления (некритические оповещения) на вашем устройстве, чтобы продолжить использовать %1$@ и не отключать отдельные тревоги."; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Прогнозируемый уровень глюкозы в крови все еще может быть выше целевого диапазона."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Прогнозируемый уровень глюкозы"; - -/* Label for link to see frequently asked questions */ -"Frequently asked questions about alerts" = "Часто задаваемые вопросы об оповещениях"; - -/* The short unit display string for grams */ -"g" = "г"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Справка по разрешениям на оповещения"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Глюкоза"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Данные о глюкозе устарели на %1$@"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Данные гликемии недоступны"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Данные о глюкозе теперь доступны"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Ввод глюкозы вне допустимого диапазона"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Динамика гликемии"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "График целевого диапазона глюкозы"; - -/* No comment provided by engineer. */ -"HARDWARE SOUNDS" = "АППАРАТНЫЕ ЗВУКИ"; - -/* No comment provided by engineer. */ -"High Glucose" = "Высокий уровень глюкозы"; - -/* No comment provided by engineer. */ -"How can I silence non-Critical Alerts?" = "Как отключить некритичные оповещения?"; - -/* No comment provided by engineer. */ -"How can I silence only Time Sensitive and Non-Critical alerts?" = "Как отключить только срочные и некритические предупреждения?"; - -/* Title text for temporarily silencing all sounds (1: app name) */ -"How can I temporarily silence all %1$@ app sounds?" = "Как временно отключить все звуки приложения %1$@?"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Как обновить (LoopDocs)"; - -/* Focus modes descriptive text (1: app name) */ -"If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." = "Если режим фокусировки iOS включен, а функция отключения оповещений выключена, критические оповещения будут по-прежнему доставляться, а некритические будут глушиться до тех пор, пока %1$@ не будет добавлен в каждый режим фокусировки в качестве разрешенного приложения."; - -/* Immediate Delivery status text */ -"Immediate" = "Немедленно"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "На неопределенное время"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Инсулин"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Усвоенный инсулин (U) × Чувствительность к инсулину (%1$@/U)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "Регулировка инсулина была отключена!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Подача инсулина"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Влияние инсулина"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Модель инсулина"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Инсулиновая помпа"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Факторы чувствительности инсулина"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "График чувствительности к инсулину"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Подача инсулина приостановлена"; - -/* Insulin type label */ -"Insulin Type" = "Тип инсулина"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Прервано %1$@: %2$@ из %3$@ %4$@"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Неверный объем болюса"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Неверное количество углеводов"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Неверные данные: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Недействительная будущая глюкоза"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Неверное показание глюкозы с временной меткой, которая находится на %1$@ в будущем"; - -/* No comment provided by engineer. */ -"iOS Critical Alerts and Time Sensitive Alerts are types of Apple notifications. They are used for high-priority events. Some examples include:" = "Критические оповещения iOS и срочные оповещения — это типы уведомлений Apple. Они используются для проведения высокоприоритетных мероприятий. Вот некоторые примеры:"; - -/* No comment provided by engineer. */ -"IOS FOCUS MODES" = "РЕЖИМЫ ФОКУСИРОВКИ IOS"; - -/* The title text for the issue report cell */ -"Issue Report" = "Сообщить об ошибке"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Похоже, что Вы не ввели съеденную Вами еду. Нажмите , чтобы записать ее сейчас."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Введена большая порция еды"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Запускает приложение непрерывного мониторинга CGM"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Подробнее"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Осталось меньше минуты"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Загрузка..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Доза из лога"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Зарегистрированная доза инсулина"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Произошел сбой приложения"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Ошибка в работе петли"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop обнаружил проблему в настройках Bluetooth и не будет успешно работать, пока Bluetooth не будет включен. Вы не будете получать показания глюкозы и не сможете вводить болюс."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop обнаружил пропущенный прием пищи и оценил его размер. Отредактируйте количество углеводов, чтобы оно соответствовало количеству тех углеводов, которые вы, возможно, съели."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Ну удалось успешно замкнуть цикл/контур в %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop автоматически вводит болюсы, когда потребность в инсулине превышает запланированную базу, и при необходимости использует ВБС, чтобы снизить подачу инсулина ниже запланированной базы."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop не будет успешно работать, пока не будет включен Bluetooth. Вы не сможете получать показания уровня глюкозы или вводить болюсы."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Петля установит ВБС для увеличения или уменьшения подачи инсулина."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Низкий уровень глюкозы"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Управление разрешениями в настройках"; - -/* View title for how mute alerts work */ -"Managing Alerts" = "Управление оповещениями"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Ручная доза: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Максимальная базальная скорость в час"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Максимальный Болюс"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Превышен максимальный объем болюса"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Болюс на еду"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "мг/дл"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Уведомления о пропущенных приемах пищи"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Пропущены данные: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Отсутствие максимально допустимого болюса в настройках"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "ммоль/л"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Влияние динамики СК"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Доп. инфо"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Выключить все оповещения"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Требует внимания"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Отрицательная продолжительность не допускается"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Нет рекомендации болюса"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Устройства не сопряжены или произошла ошибка во время сопряжения"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Не установлен максимальный болюс"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Нет настроенной помпы"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Нет актуальных данных о глюкозе"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Нет актуальных данных о глюкозе"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Нет актуальных данных от помпы"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Нет, редактировать сумму"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Доставка уведомлений"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "В настройках телефона для доставки уведомлений установлено значение \"Сводка по расписанию\".\n\nЧтобы избежать задержки в получении уведомлений от %1$@, мы рекомендуем установить доставку уведомлений на Немедленную доставку."; - -/* Notifications Status text */ -"Notifications" = "Уведомления"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Уведомления временно отключены"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Уведомления предоставляют важную информацию о приложении %1$@, не требуя открытия приложения."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Уведомления предоставляют важную информацию о приложении %1$@, не требуя открытия приложения.\n\nВключите их в настройках телефона, чтобы получать уведомления %1$@, критические предупреждения и уведомления, чувствительные к времени."; - -/* Notification Setting Status is Off */ -"Off" = "Выключено"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Внимание! Во время подачи произошел сбой петли, и управление помпой было приостановлено до закрытия этого диалога. История событий может быть неточной. Пожалуйста, просмотрите графики введения инсулина в помпе и внимательно следите за уровнем глюкозы в крови."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Включено"; - -/* The title text for the override presets */ -"Override Presets" = "Редактировать параметры"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Возможный пропуск приема пищи"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Целевые значения до еды"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Прогнозируемый уровень глюкозы на %1$@ составляет %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Прогнозируемый уровень глюкозы находится в диапазоне."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Прогнозируемое значение глюкозы %1$@ ниже установленного вами предела безопасности глюкозы."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Предсказываемая гликемия %1$@ ниже ваших настроек порога приостановки помпы"; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Прогноз: %1$@\nФакт: %2$@ (%3$@)"; - -/* Format string describing integral retrospective correction. (1: Integral glucose effect)(2: Total glucose effect) */ -"prediction-description-integral-retrospective-correction" = "описание прогнозирования с помощью интегральной ретроспективной коррекции"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Подготовка логов критических событий"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Истечение срока действия профиля"; - -/* Time that profile expires */ -"Profile expires " = "Срок действия профиля истекает"; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Скоро истечет срок действия профиля"; - -/* The title of the pump section in settings */ -"Pump" = "Помпа"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Батарея помпы разряжена"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Данные помпы от %1$@ "; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Событие помпы"; - -/* No comment provided by engineer. */ -"Pump Expired" = "Срок работы помпы закончился"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Менеджер помпо"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Ошибка менеджера помп: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Резервуар помпы пуст"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Мало инсулина в резервуаре"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Помпа приостановлена"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Помпа приостановлена. Авто болюсы и ВБС отключены."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Быстродействующий - взрослые"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Быстродействующий - дети"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Рекомнендация истекла : от %1$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Рекомендуемый базал"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Рекомендуемый болюс"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Рекомендуемый болюс превышает максимальный болюс"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Рекомендуемый болюс: %@ ед"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Удаленный ввод болюса: %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Удаленный ввод углеводов: %d грамм"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Резервуар"; - -/* No comment provided by engineer. */ -"Reservoir Empty" = "Резервуар пуст"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Ретроспективная коррекция"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Повторить"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Сохранить без болюса"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Запланировано"; - -/* No comment provided by engineer. */ -"Sensor Failed" = "Ошибка сенсора"; - -/* The title of the services section in settings */ -"Services" = "Службы"; - -/* The label of the settings button */ -"Settings" = "Настройки"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Настройка не завершена"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Показывает крайнюю ошибку петли"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Простой калькулятор болюса"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Простой калькулятор еды"; - -/* Format fragment for a start time */ -"since %@" = "от %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL сайта"; - -/* Software update button link text */ -"Software Update" = "Обновление программного обеспечения"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Время начала вне допустимого диапазона: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "начало с %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Начинаю болюс"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Поддержка"; - -/* The title text in settings */ -"Suspend Threshold" = "Порог приостановки"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Нажмите здесь, чтобы настроить CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Нажмите здесь, чтобы настроить помпу"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Нажмите здесь, чтобы настроить службу"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Нажмите, чтобы добавить"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Нажмите чтобы возобновить"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Нажмите, чтобы остановить"; - -/* Settings app TestFlight section */ -"TestFlight" = "TestFlight"; - -/* Settings TestFlight expiration view */ -"TestFlight Expiration" = "Срок действия TestFlight"; - -/* Time that build expires */ -"TestFlight expires " = "Срок действия TestFlight истекает "; - -/* The title for notification of upcoming TestFlight expiration */ -"TestFlight Expires Soon" = "Срок действия TestFlight скоро истечет"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Введенное количество болюса меньше минимально допустимого в помпе"; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Алгоритм авто болюса использует более консервативную оценку прогнозируемого уровня глюкозы в крови, чем та, которая используется для корректировки с помощью ВБС.\n\nВ результате прогнозируемый уровень глюкозы в крови после болюса может оказаться выше целевого диапазона."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Рекомендация по болюсу была обновлена. Пожалуйста, подтвердите новое количество инсулина."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Устаревшая модель, используемая Loop, позволяющая настраивать продолжительность действия."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "Максимально допустимое количество составляет %@ грамм."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "Максимально допустимая сумма составляет %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Максимальный объем болюса составляет %@ ед."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "максимальный болюс %@ ед"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Перед подачей болюса необходимо настроить максимальное значение болюса."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Настройки терапии"; - -/* String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus */ -"This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." = "Эта опция применима только в том случае, если для стратегии дозирования петли установлено значение «Автоматический болюс»."; - -/* No comment provided by engineer. */ -"Time Sensitive Alerts" = "Срочные оповещения"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Уведомления, чувствительные к времени"; - -/* No comment provided by engineer. */ -"Transmitter Low Battery" = "Батарейка трансмиттера садится"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Попробуйте еще раз"; - -/* Description text for temporarily silencing non-critical alerts (1: app name) */ -"Turn off the volume on your iOS device or add %1$@ as an allowed app to each Focus Mode. Time Sensitive and Critical Alerts will still sound, but non-Critical Alerts will be silenced." = "Выключите громкость на устройстве iOS или добавьте %1$@ в качестве разрешенного приложения для каждого режима фокусировки. Срочные и критические оповещения по-прежнему будут звучать, но некритические оповещения будут отключены."; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Включите Bluetooth для получения предупреждений, сигналов тревоги или показаний датчика глюкозы."; - -/* The short unit display string for international units of insulin */ -"U" = "Ед"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Невозможно снять предупреждение"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Невозможно достучаться до помпы"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Не удается сохранить запись углеводов"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Невозможно сохранить ручной ввод глюкозы"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Не удается остановить текущий болюс. Переместите свой iPhone ближе к помпе и попробуйте еще раз. Проверьте историю введения инсулина и внимательно следите за уровнем глюкозы."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Неизвестно"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Неизвестная ошибка: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Неизвестный пресет: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Неизвестное время"; - -/* The title of the action used to unmute alerts */ -"Unmute" = "Включить звук"; - -/* The alert title for unmute alert confirmation */ -"Unmute Alerts?" = "Включить звук оповещений?"; - -/* Error message when a service can't be found to handle a push notification. (1: Service Identifier) */ -"Unsupported Notification Service: %1$@" = "Неподдерживаемая служба уведомлений: %1$@"; - -/* The format for the description of a temporary override end date */ -"until %@" = "до %@"; - -/* indication of when alerts will be unmuted (1: time when alerts unmute) */ -"Until %1$@" = "До %1$@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Пока я не введу углеводы"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Пока я не выключу"; - -/* No comment provided by engineer. */ -"Urgent Low" = "Очень низкий"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Использовать функцию до еды"; - -/* Description text for temporarily silencing all sounds (1: app name) */ -"Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." = "Используйте функцию отключения оповещений. Она позволяет временно отключить все ваши оповещения и тревоги с помощью кнопки %1$@ , включая критические оповещения и срочные оповещения."; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Применить цели гликемии как для физической нагрузки"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Использовать пресет физнагрузки"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Внимание! Уведомления о безопасности отключены"; - -/* No comment provided by engineer. */ -"What are examples of Critical and Time Sensitive alerts?" = "Каковы примеры критических и срочных оповещений?"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Если текущий или прогнозируемый уровень глюкозы ниже безопасного предела глюкозы, Loop не будет рекомендовать болюс и всегда будет рекомендовать временную базальную скорость 0 единиц в час."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Если текущая или предсказываемая гликемия ниже порога приостановки помпы, алгоритм цикла ипж не рекомендует болюс и всегда рекомендует временный базал 0 ед/час"; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Если эта функция включена, Loop может уведомить вас, когда обнаружит прием пищи, который не был внесен."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Когда приложение выходит из режима замкнутого цикла, оно использует упрощенный калькулятор болюса, как в обычной помпе."; - -/* App sounds descriptive text (1: app name) */ -"While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." = "Пока отключение звука оповещений включено, все оповещения от вашего %1$@ приложения, включая критические и срочные оповещения, будут временно отображаться без звуков и будут только вибрировать."; - -/* No comment provided by engineer. */ -"While mute alerts is on, your insulin pump and CGM hardware may still sound." = "При отключении звуковых сигналов ваша инсулиновая помпа и мониторинг могут продолжать издавать звуки."; - -/* Format string for message of reset loop alert. (1: App name) (2: error description) */ -"While trying to restart %1$@ an error occured.\n\n%2$@" = "При попытке перезапустить %1$@ произошла ошибка. \n\n %2$@"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Целевые значения при физической нагрузке"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Функция физнагрузки была включена более 24 часов. Убедитесь, что вы все еще хотите, чтобы она была включена, или выключите ее в приложении."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Физнагрузка все еще включена"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Да"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Вы можете не получать звуковые, визуальные или вибрационные предупреждения о важной информации по безопасности.\n\nЧтобы решить эту проблему, нажмите \"Настройки\" и убедитесь, что уведомления, критические предупреждения и уведомления с учетом времени включены."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "Время вашего %1$@ было изменено. %2$@ нуждается в точном учете времени, чтобы делать прогнозы уровня глюкозы и соответствующим образом корректировать инсулин.\n\nПроверьте настройки %1$@ (Общие / Дата и время) и убедитесь, что опция \"Устанавливать автоматически\" включена. Невыполнение этого требования может привести к серьезному дефициту или избытку инсулина."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "Ваш уровень глюкозы ниже %1$@. Вы уверены, что хотите ввести болюс?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Ваш уровень глюкозы ниже или прогнозируется, что он будет ниже безопасного предела глюкозы, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Ваш уровень глюкозы ниже безопасного предела глюкозы, %1$@."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "У вас низкий уровень глюкозы. Ешьте углеводы и подумайте о том, чтобы подождать с болюсом, пока уровень глюкозы не достигнет безопасного диапазона."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "У вас низкий уровень глюкозы. Съешьте углеводы и внимательно следите за состоянием здоровья."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Ваш максимальный объем болюса составляет %1$@."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Данные вашей помпы устарели. %1$@ не может рекомендовать количество инсулина."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Ваша помпа вводит ВБС вручную."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Рекомендуемый вами объем болюса превышает лимит подачи болюса %1$@."; - diff --git a/Loop/ru.lproj/Main.strings b/Loop/ru.lproj/Main.strings deleted file mode 100644 index 34ee03f08a..0000000000 --- a/Loop/ru.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Статус"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3,5 ед./час @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Предсказываемый"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Ярлык"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Изменение глюкозы"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "всего грамм"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Будущие значения СК предсказываются на основе определения эффекта множественных факторов. Пользуйтесь этим инструментом для перехода между разными вводными чтобы увидеть как они сопоставимы с окончательным предсказанием"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Ярлык"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "в конечном итоге 92 мг/дл"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Наблюдается"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3,5 ед./час @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Действие углеводов"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Наблюдаются изменения СК, вычитаются изменения смоделированные на подаваемом инсулине, могут использоваться для оценки усвоения углеводов"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Рекомендуемый базал"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Ярлык"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Ярлык"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Предсказываемый СК"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "в конечном итоге 92 мг/дл"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "г активных углеводов"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Глюкоза"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Ярлык"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Углеводы"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Рекомендуемый базал"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/sk.lproj/InfoPlist.strings b/Loop/sk.lproj/InfoPlist.strings deleted file mode 100644 index f9fb85298d..0000000000 --- a/Loop/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1,24 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth sa používa na komunikáciu s inzulínovou pumpou a zariadeniami pre kontinuálne snímanie glykémie."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth sa používa na komunikáciu s inzulínovou pumpou a zariadeniami pre kontinuálne snímanie glykémie."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Fotoaparát sa používa na skenovanie čiarových kódov zariadení."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID sa používa na overenie podania bolusu inzulínu a na uloženie zmien v nastaveniach terapie."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Údaje o jedle z databázy Health sa používajú na určenie účinkov glukózy. Údaje o glukóze z databázy Health sa používajú na vytváranie grafov a výpočet hybnosti. Údaje o spánku z databázy Health slúžia na vylepšenie komplikácie Apple Watch."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Údaje o uhlohydrátoch zadané v aplikácii a na hodinkách sú uložené v databáze Health. Údaje o glukóze získané z CGM sú bezpečne uložené v HealthKit."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop používa Siri, aby vám umožnila aktivovať predvoľby pomocou vášho hlasu."; - diff --git a/Loop/sk.lproj/Localizable.strings b/Loop/sk.lproj/Localizable.strings deleted file mode 100644 index 3df681b53c..0000000000 --- a/Loop/sk.lproj/Localizable.strings +++ /dev/null @@ -1,276 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorbované"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ j Celkom"; - -/* Appends a full-stop to a statement */ -"%@." = "%@ ."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@%2$@ nedokázal zrušiť vašu aktuálnu dočasnú bazálnu dávku, ktorá je vyššia ako nový maximálny bazálny limit, ktorý ste nastavili. To môže viesť k vyššiemu dodávaniu inzulínu, ako je požadované.\n\nZvážte ručné pozastavenie podávania inzulínu a následné okamžité obnovenie, aby ste uplatnili novým bazálny limit."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@ /j"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ nedokáže komunikovať s vašou inzulínovou pumpou. Aplikácia sa bude naďalej pokúšať kontaktovať vašu pumpu, ale informácie o podávaní inzulínu nemožno aktualizovať a nemôže pokračovať žiadna automatizácia.\nMôžete počkať niekoľko minút, aby ste zistili, či sa problém vyriešil, alebo klepnutím na tlačidlo nižšie sa dozviete viac o ďalších možnostiach."; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%@ j"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "Zostáva %1$@ j"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "Zostáva %1$@ j: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ j/hod @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@ : %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 minútový regresný koeficient glykémie (b1), pokračujúci s poklesom počas 30 minút"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Model založený na publikovanej absorpcii inzulínu Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Model založený na publikovanej absorpcii inzulínu Humalog, Novolog a Apidra u dospelých."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "Akceptovať Odporúčaný Bolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktívne sacharidy"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktívne sacharidy: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktívne sacharidy"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktívny inzulín"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktívny inzulín: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Zadať sacharidy"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Pridať CGM"; - -/* The label of the meal button */ -"Add Meal" = "Zadať jedlo"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Pridať pumpu"; - -/* The title of the amplitude API key credential */ -"API Key" = "Kľúč API"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Naozaj chcete odstrániť toto CGM?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Naozaj chcete odstrániť túto službu?"; - -/* Format fragment for a specific time */ -"at %@" = "o %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Potvrdiť pre Bolus %@ Jednotky"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Harmonogram bazálnej dávky"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Bazálne dávky"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Podaný bolus %1$@ z %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolus sa podáva"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Zrušiť"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Bolus sa ruší"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Účinky sacharidov"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Inzulínovo sacharidový pomer"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Zadať sacharidy"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Sacharidy"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Absorbované sacharidy (g) ÷ Inzulínovo sacharidový pomer (g/j) × Faktor citlivosti na inzulín (%1$@/j)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Ihneď vymeňte batériu pumpy"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Ihneď vymeňte zásobník pumpy"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfigurácia"; - -/* Default alert dismissal */ -"Continue" = "Pokračovať"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritické výstrahy"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Aktuálna glykémie %1$@ je pod cieľovým rozsahom."; - -/* Date picker label */ -"Date" = "Dátum"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Odstrániť účet"; - -/* Button title to delete CGM */ -"Delete CGM" = "Odstrániť CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Odstrániť službu"; - -/* Button text to deliver a bolus */ -"Deliver" = "Podať"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Limity podávania"; - -/* No comment provided by engineer. */ -"Done" = "Hotovo"; - -/* The alert title for a resume error */ -"Error Resuming" = "Chyba pri obnovení"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Obnovenie podávania inzulínu zlyhalo"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glykémia"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Podávanie inzulínu"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Inzulínový model"; - -/* Insulin type label */ -"Insulin Type" = "Typ inzulínu"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Notification Setting Status is Off */ -"Off" = "Vypnuté"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "Zapnuté"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Predpokladaná glykémia o %1$@ je %2$@ ."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Predpokladaná glykémia je v cieľovom rozsahu."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Odporúčaný bazal"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Rezervoár"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Skúsiť znova"; - -/* The label of the settings button */ -"Settings" = "Nastavenia"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "URL adresa webu"; - -/* The short unit display string for international units of insulin */ -"U" = "j"; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Neznáme"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Áno"; - diff --git a/Loop/sk.lproj/Main.strings b/Loop/sk.lproj/Main.strings deleted file mode 100644 index 00d5da54d6..0000000000 --- a/Loop/sk.lproj/Main.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Stav"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3,5 i/hod o 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Predpoklad"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Zmena glykémie"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Celkom"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Budúca glykémia sa predpovedá kombináciou účinkov viacerých vstupov. Pomocou tohto nástroja môžete prepínať rôzne vstupy, aby ste videli, ako vplývajú v porovnaní s konečnou predpoveďou."; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "pravdepodobne 92mg/dl"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Pozorované"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3,5 i/hod o 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Účinky sacharidov"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Odporúčaný bazal"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Predpokladaná glykémia"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "pravdepodobne 92mg/dl"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Aktívne sacharidy"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glykémia"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Sacharidy"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Odporúčaný bazal"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Názov"; - diff --git a/Loop/sv.lproj/InfoPlist.strings b/Loop/sv.lproj/InfoPlist.strings deleted file mode 100644 index 11a27169c4..0000000000 --- a/Loop/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,21 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth används för att kommunicera med insulinpump och CGM."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth används för att kommunicera med insulinpump och CGM."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Kräv Face ID för att kunna godkänna bolus."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Kolhydratdata från Apple Health-databasen används för att bestämma effekten på glukosvärde. Glukosvärden från Apple Health-databasen används i diagram och för beräkning av förändring."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Kolhydratvärden inmatade i appen i klockan lagras i Apple Health-databasen. Glukosvärden mottagna från CGM lagras krypterat i HealthKit."; - diff --git a/Loop/sv.lproj/Localizable.strings b/Loop/sv.lproj/Localizable.strings deleted file mode 100644 index a7482a4599..0000000000 --- a/Loop/sv.lproj/Localizable.strings +++ /dev/null @@ -1,817 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (återstår: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = " Preprandiellt förval"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = " Träningsförval"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ absorberat"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ återstår"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ E totalt"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/E"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ kan inte kommunicera med din insulinpump. Appen kommer att fortsätta att försöka nå din pump, men under tiden kan information om insulintillförsel inte uppdateras och automatisering inte fortsätta.\nDu kan vänta flera minuter för att se om problemet löser sig eller klicka på knappen nedan för att läsa mer om andra alternativ."; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ E"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ E kvar"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ E kvar: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ E/h @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 minuters glukosregressionskoefficient (b₁), fortsatt med 30 minuters avklingande"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 min jämförelse av glukosprediktion och faktiskt värde, fortsatt med 60 miuters avklingande."; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Några sekunder återstår"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Det manuellt inmatade blodsockervärdet måste vara mellan %1$@ och %2$@"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Insulinmodell baserad på publicerade studier av absorption av Fiasp-insulin."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Insulinmodell baserad på publicerade studier av absorption av Humalog-, Novolog- samt Apidra-insulin hos vuxna."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "En pump måste ha lagts till och konfigurerats innan en bolus ge ges."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktiva kolhydrater"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktiva kolhydrater: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktiva kolhydrater"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktivt insulin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktivt insulin: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Lägg till kolhydrater"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Lägg till CGM"; - -/* The label of the meal button */ -"Add Meal" = "Lägg till måltid"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Lägg till pump"; - -/* Title text for button to set up a service */ -"Add Service" = "Lägg till tjänst"; - -/* No comment provided by engineer. */ -"Adjusted for" = "Justerad för"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Behörigheter för Varningar"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algoritminställningar"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Ett fel uppstod när du skulle spara dina kolhydrater."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Ett fel uppstod när du skulle spara ditt blodsockervärde."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Det finns nu en ny bolusrekommendation."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Säkert att du vill radera all händelsehistorik?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Är du säker på att du vill ta bort alla dina loggade doser?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Säkert att du vill radera alla reservoarvärden?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Vill du ta bort alla dina %@data?\n(Denna åtgärd är inte reversibel)"; - -/* 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?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Vill du ta bort den här tjänsten?"; - -/* Format fragment for a specific time */ -"at %@" = "kl. %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Godkänn bolus på %@ enheter"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "Godkänn att logga %@ enheter"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Basaldosschema"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Basaldoser"; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth Av"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth är inte tillgängligt"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Varning Bluetooth är Av"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Varning Bluetooth är inte tillgänglig"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Det finns en ny bolusrekommendation"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolus sammanfattning"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Givit bolus %1$@ av %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Ger bolus %1$@ "; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Avbryt"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Avbryter bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Kolhydrateffekter"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Kolhydrater"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Insulinkvoter"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Lägg till kolhydrater"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Kolhydrater"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Absorberade kolhydrater (g) ÷ Insulinkvot (g/E) × Insulinkänslighet (%1$@/E)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Byt pumpbatteri nu"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Byt pumpreservoar nu"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Kontrollera inställningarna"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Kontrollera att pumpen är inom räckhåll"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Kontrollera din CGM:s datakälla"; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Välj en längre absorptionstid för måltid med mycket fett eller protein. Ofta är det bäst att dela upp måltiden i snabba och långsamma kolhydrater och mata in dessa var för sig."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Stäng"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Sluten loop"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Sluten Loop är AV"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Sluten Loop kräver en aktiv CGM-sensor"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "kl %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "sedan %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfiguration"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Konfigurationsfel %1$@"; - -/* Default alert dismissal */ -"Continue" = "Fortsätt"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Kontinuerlig glukosmätning"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Målvärde"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Kritisk händelselogg klar"; - -/* Critical event log export title */ -"Critical Event Logs" = "Kritiska händelseloggar"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Kritiska händelseloggar kunde inte exporteras."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Nuvarande blodglukosvärde"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "Nuvarande glukosvärde %1$@ är under målvärde."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Anpassad Override"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Anpassad förinställning"; - -/* Date picker label */ -"Date" = "Tid"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Ta bort"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Radera konto"; - -/* Button title to delete all objects */ -"Delete All" = "Radera allt"; - -/* Button title to delete CGM */ -"Delete CGM" = "Radera CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Ta bort tjänst"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Ta bort simulerade testvärden från CGM"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Ta bort simulerade testvärden"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Ta bort simulerade pumpvärden"; - -/* Button text to deliver a bolus */ -"Deliver" = "Ge bolus"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Maxdoser"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diabetesbehandling"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Stänger av"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Avfärda"; - -/* No comment provided by engineer. */ -"Done" = "Färdig"; - -/* Title for card to log dose */ -"Dose Summary" = "Sammanfattning av dos"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Strategi för insulinbehandling"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Aktivera Bluetooth"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Slår på"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Du behöver mata in ett blodsockervärde för att få en rekommenderad bolus."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Ange Bolus"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Ange kapillärt blodsocker"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "Ange tröskelvärde för blodsocker"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Ange tröskelvärde"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Fel vid försök att avbryta bolus"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Fel vid export av loggar"; - -/* The alert title for a resume error */ -"Error Resuming" = "Fel vid återupptagande"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Händelsehistorik"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Förväntat %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Överstiger maxbolusdos"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Exportera kritiska händelseloggar"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Exportera-%1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "Misslyckades att återuppta insulintillförsel"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Kapillärt blodsocker"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "I %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Glukos"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Glukosvärde är %1$@ gammalt"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Glukosvärde saknas"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "Blodglukosvärde finns nu tillgängligt"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "Det manuellt inmatade blodsockervärdet utanför gränsvärden"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Glukosförändring"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Oändligt"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Insulin absorberat (E) × Insulinkänslighet (%1$@/E)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Insulin doserat"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Insulineffekter"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Insulinmodell"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "Insulinpump"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Insulinkänslighet"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "Insulintillförsel pausad"; - -/* Insulin type label */ -"Insulin Type" = "Insulintyp"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "Avbruten %1$@: %2$@ av %3$@ %4$@"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Ogiltigt värde: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Skapa felrapport"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Startar CGM-app"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Lär dig mer"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Mindre än en minut återstår"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Laddar..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Logga Dos"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Loggad insulindos"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loopfel"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop har upptäckt ett problem med dina Bluetooth-inställningar och kommer inte att fungera förrän Bluetooth är aktiverat. Du kommer varken att kunna se dina blodsockervärden eller att kunna ge någon bolus."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop har inte lyckats köra på %@"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop kommer att ge bolus automatiskt när insulinbehovet är större än ordinarie basal och kommer, vid behov, att minska din ordinarie basal med temporära basaldoser för att minska insulintillförseln."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop kommer att ställa in tillfälliga basalnivåer för att öka eller minska insulintillförsel."; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maximal bolus"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Måltidsbolus"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Saknar data: %1$@"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentumeffekter"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Mer info"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Kräver uppmärksamhet"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Ingen bolus rekommenderas"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Ingen ansluten enhet, eller fel vid anslutning till enhet"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Ingen maximal bolus har blivit inställd"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Ingen pump konfigurerad"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Inga senaste blodglukosvärde"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Inget aktuellt blodsockervärde"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Det finns inga aktuella pumpdata"; - -/* Notification Setting Status is Off */ -"Off" = "Av"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "På"; - -/* The title text for the override presets */ -"Override Presets" = "Override förinställningar"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Målvärden före måltid"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Förväntat glukosvärde vid %1$@ är %2$@."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "Förväntat blodsocker på %1$@ är under ditt tröskelvärde."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Förväntat glukosvärde %1$@ är under ditt tröskelvärde."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Förväntat: %1$@\nFaktiskt: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Förbereder kritiska händelseloggar"; - -/* The title of the pump section in settings */ -"Pump" = "Pump"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Låg batterinivå i pump"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pumpvärdena är %1$@ gamla"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pumphändelse"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pumphantering"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pumpreservoaren är tom"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pumpreservoaren har låg nivå"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pumpen är pausad"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pump pausad. Automatisk dosering är inaktiverad."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Snabbverkande – vuxna"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Snabbverkande – barn"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Rekommendationen gick ut för %1$@ sedan"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Rekommenderad basaldos"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Rekommenderad bolus"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Rekommenderad bolus: %@ enheter"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoar"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Retrospektiv korrigering"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Försök igen"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Spara utan att ge bolus"; - -/* The title of the services section in settings */ -"Services" = "Tjänster"; - -/* The label of the settings button */ -"Settings" = "Inställningar"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Visar senaste loopfelet"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Förenklad bolusdoskalkylator"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Förenklad bolusdoskalkylator"; - -/* Format fragment for a start time */ -"since %@" = "sedan %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Nightscout-URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "Börjar kl. %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Påbörjar bolus"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Support"; - -/* The title text in settings */ -"Suspend Threshold" = "Tröskelvärde"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Tryck här för att ställa in en CGM"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Tryck här för att ställa in en pump"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Tryck här för att ställa in en tjänst"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Tryck för att ange"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Tryck för att återuppta"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Tryck för att stoppa"; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Bolusrekommendationen har uppdaterats. Konfirmera bolus"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Äldre modell använd av Loop, vilken tillåter anpassning av insulinets verkningstid."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Den högst tillåtna bolusmängden är %@ E."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Den maximala bolusdosen är %@ enheter"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Den högst tillåtna bolusmängden måste ställas in innan en bolus kan ges."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Behandlingsinställningar"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Försök igen"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Aktivera Bluetooth för att ta emot varningar, larm eller blodglukosavläsningar."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Det går inte att nå pump"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Det går inte att spara kolhydrater"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Det går inte att spara manuellt inmatat blodsockervärde"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Det går inte att stoppa pågående bolus. Flytta din iPhone närmare din pump och försök igen. Kontrollera händelsehistorik för insulin för mer detaljerad information och var vaksam på sjunkande blodsocker."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Okänd"; - -/* The format for the description of a temporary override end date */ -"until %@" = "fram till %@"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Tills jag anger kolhydrater"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Tills jag stänger av"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Använd förval 'Före måltid'"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Använd målvärden för träning"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Använd förval 'Träning'"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "När nuvarande eller förväntat blodglukosvärde är under tröskelvärde kommer Loop inte att rekommendera en bolus, och kommer också alltid att föreslå en temporär basal på 0 enheter per timme."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "När nuvarande eller förväntat slutglukosvärde är under tröskelvärdet kommer Loop inte att rekommendera en bolus, utan kommer alltid att föreslå en temporär basal på 0 enheter per timme."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "När läget sluten Loop inte används, kommer appen använda en förenklad bolusdoskalkylator likt den en vanlig pump använder."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Målvärden för träning"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Ett träningsförval har varit aktivt i mer än 24 timmar. Kontrollera om du fortfarande vill ha den på, eller stäng av den i appen."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Träningsförval fortfarande på"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "Ditt blodsocker är lägre än eller förväntas bli lägre än ditt inställda tröskelvärde, %@."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "Ditt blodsocker är lägre än ditt tröskelvärde, %1$@."; - diff --git a/Loop/sv.lproj/Main.strings b/Loop/sv.lproj/Main.strings deleted file mode 100644 index 1b2e615da7..0000000000 --- a/Loop/sv.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Status"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 E/h kl. 12:12"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Förväntat"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Label"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Glukosförändring"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g totalt"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Förväntat glukosvärde beräknas genom kombination av flera inmatningar. Använd det här verktyget för att jämföra hur de påverkar det förväntade resultatet."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Label"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "Förväntat 5,1 mmol/l"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Observerad"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 E/h kl. 12:12"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Kolhydrateffekter"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Observerad glukosförändring, med borttagen förändring modellerad från insulindoser, kan användas för att uppskatta kolhydratabsorptionen."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Rekommenderad basaldos"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Label"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Förväntat glukosvärde"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "Förväntat 5,1 mmol/l"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Active Carbs"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Glukos"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Label"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Kolhydrater"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Rekommenderad basaldos"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/tr.lproj/InfoPlist.strings b/Loop/tr.lproj/InfoPlist.strings deleted file mode 100644 index 2c9bfbe1b8..0000000000 --- a/Loop/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,27 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth, insülin pompası ve sürekli glikoz izleme cihazlarıyla iletişim kurmak için kullanılır."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth, insülin pompası ve sürekli glikoz izleme cihazlarıyla iletişim kurmak için kullanılır."; - -/* Privacy - Camera Usage Description */ -"NSCameraUsageDescription" = "Kamera, cihazların barkodlarını taramak için kullanılır."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID, bolus insülini doğrulamak ve tedavi ayarlarındaki değişiklikleri kaydetmek için kullanılır."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Sağlık veri tabanından alınan yemek verileri, glikoz etkilerini belirlemek için kullanılır. Sağlık veri tabanından alınan glikoz verileri, grafik ve momentum hesaplaması için kullanılır. Sağlık veritabanındaki uyku verileri, Apple Watch komplikasyonunu iyileştirmek için kullanılır."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Uygulamaya ve saate girilen öğün karbonhidrat verileri Sağlık veritabanında saklanır. CGM'den alınan KŞ verileri, HealthKit'te güvenli bir şekilde saklanır."; - -/* Privacy - Siri Usage Description */ -"NSSiriUsageDescription" = "Loop, ön ayarları sesinizle gerçekleştirmenize izin vermek için Siri'yi kullanır."; - diff --git a/Loop/tr.lproj/Localizable.strings b/Loop/tr.lproj/Localizable.strings deleted file mode 100644 index c53f531fd4..0000000000 --- a/Loop/tr.lproj/Localizable.strings +++ /dev/null @@ -1,1111 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (bekliyor: %@)"; - -/* Status row title for premeal override enabled (leading space is to separate from symbol) */ -" Pre-meal Preset" = "Yemek-Öncesi Ön Ayarı"; - -/* remaining time in setting's profile expiration section */ -" remaining" = "kalan"; - -/* Warning text for when Notifications or Critical Alerts Permissions is disabled */ -" Safety Notifications are OFF" = "Güvenlik Bildirimleri KAPALI"; - -/* Status row title for workout override enabled (leading space is to separate from symbol) */ -" Workout Preset" = "Egzersiz Ön Ayarı"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "–"; - -/* No comment provided by engineer. */ -"– –" = "– –"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Full stop character */ -"." = "."; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "Emilen %@"; - -/* Estimated remaining duration with more than a minute */ -"%@ remaining" = "%@ kaldı"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "Toplam %@ Ü"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Alert text for failing to cancel temp basal (1: reason description, 2: app name) */ -"%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." = "%1$@ %2$@ , ayarladığınız yeni Maks Bazal limitinden daha yüksek olan mevcut geçici bazal oranınızı iptal edemedi. Bu, istenenden daha yüksek insülin iletimi ile sonuçlanabilir. \n\n İnsülin iletimini manuel olarak askıya almayı ve ardından yeni limit geçerliyken bazal iletimi etkinleştirmek için hemen devam etmeyi düşünün."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/Ü"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Alert message for closed loop off informational modal. (1: app name) */ -"%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically." = "%1$@ , KAPALI konumda Kapalı Döngü ile çalışıyor. Pompanız ve CGM çalışmaya devam edecek, ancak uygulama dozajı otomatik olarak ayarlamayacaktır."; - -/* Message for alert shown when alert acknowledgement fails for a device, and the device does not provide a LocalizedError. (1: app name) */ -"%1$@ is unable to clear the alert from your device" = "%1$@ , uyarıyı cihazınızdan silemiyor"; - -/* Message for alert shown when delivery status is uncertain. (1: app name) */ -"%1$@ is unable to communicate with your insulin pump. The app will continue trying to reach your pump, but insulin delivery information cannot be updated and no automation can continue.\nYou can wait several minutes to see if the issue resolves or tap the button below to learn more about other options." = "%1$@ insülin pompanızla iletişim kuramıyor. Uygulama pompanıza ulaşmaya çalışmaya devam edecek, ancak insülin iletim bilgileri güncellenemeyecek ve hiçbir otomasyon devam edemeyecektir.\nSorunun çözülüp çözülmediğini görmek için birkaç dakika bekleyebilir veya diğer seçenekler hakkında daha fazla bilgi edinmek için aşağıdaki butona dokunabilirsiniz."; - -/* Time change alert title */ -"%1$@ Time Settings Need Attention" = "%1$@ Zaman Ayarlarına Dikkat Edilmesi Gerekiyor"; - -/* Reservoir entry (1: volume value) */ -"%1$@ U" = "%1$@ Ü"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ Ü kaldı"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ Ü kalan: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ Ü/saat @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string for body for notification of upcoming provisioning profile expiration. (1: app name) (2: amount of time until expiration */ -"%1$@ will stop working in %2$@. You will need to update before that, with a new provisioning profile." = "%1$@ %2$@ içinde çalışmayı durduracaktır. Bundan önce yeni bir provizyon profili ile güncelleme yapmanız gerekecektir."; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of a basal temp basal dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) -Description of a bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: unit) */ -"%1$@: %2$@ %3$@" = "%1$@: %2$@ %3$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 dakikalık glikoz regresyon katsayısı (b₁), 30 dakika boyunca bozuk devam etti"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 dakikalık glikoz tahmini ile gerçek karşılaştırması, 60 dakika boyunca bozuk devam etti"; - -/* Estimated remaining duration with a few seconds */ -"A few seconds remaining" = "Birkaç saniye kaldı"; - -/* Alert message for a manual glucose entry out of range error */ -"A manual glucose entry must be between %@ and %@" = "Manuel KŞ girişi %1$@ ile %2$@ arasında olmalıdır"; - -/* Warning for simple bolus when glucose entry is out of range. (1: upper bound) (2: lower bound) */ -"A manual glucose entry must be between %1$@ and %2$@." = "Manuel KŞ girişi %1$@ ile %2$@ arasında olmalıdır."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Fiasp insülininin yayınlanmış emilimine dayanan bir model."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Yetişkinlerde yayınlanmış Humalog, Novolog ve Apidra insülin emilimine dayalı bir model."; - -/* Software update available section footer (1: app name) */ -"A new version of %@ is available and is recommended to continue using the app." = "%@ 'ın yeni bir sürümü mevcut ve uygulamayı kullanmaya devam etmeniz önerilir."; - -/* Required software update section footer (1: app name) */ -"A new version of %@ is available." = "Yeni bir %@ sürümü mevcuttur."; - -/* Alert message for a missing pump error */ -"A pump must be configured before a bolus can be delivered." = "Bolus iletilmeden önce bir pompanın yapılandırılması gerek."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "ÖnerilenBolusuKabulEt"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Aktif Karbonhidrat"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Aktif Karbonhidrat: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Aktif Karb."; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Aktif İnsülin"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Aktif İnsülin: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Karb Girişi Ekle"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "CGM Ekle"; - -/* The label of the meal button */ -"Add Meal" = "Öğün ekle"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Pompa Ekle"; - -/* Title text for button to set up a service */ -"Add Service" = "Servis Ekle"; - -/* No comment provided by engineer. */ -"Adjusted for" = "için düzeltilmiş"; - -/* Alert Permissions button text -Title of alert management screen */ -"Alert Management" = "Uyarı Yönetimi"; - -/* Alert Permissions button text -Notification & Critical Alert Permissions screen title */ -"Alert Permissions" = "Uyarı İzinleri"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "Algoritma Ayarları"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* Warning to ensure the carb entry is accurate during an override */ -"An active override is modifying your carb ratio and insulin sensitivity. If you don't want this to affect your bolus calculation and projected glucose, consider turning off the override." = "Aktif bir geçersiz kılma, karbonhidrat oranınızı ve insülin duyarlılığınızı değiştiriyor. Bunun bolus hesaplamanızı ve öngörülen glikozu etkilemesini istemiyorsanız geçersiz kılmayı kapatmayı düşünün."; - -/* Alert message for a carb entry persistence error */ -"An error occurred while trying to save your carb entry." = "Karbonhidrat girişinizi kaydetmeye çalışırken bir hata oluştu."; - -/* Alert message for a manual glucose entry persistence error */ -"An error occurred while trying to save your manual glucose entry." = "Manuel KŞ girişinizi kaydetmeye çalışırken bir hata oluştu."; - -/* Invalid onboarding state */ -"An unexpected onboarding error state occurred." = "Beklenmeyen bir ekleme hatası durumu oluştu."; - -/* Alert message when glucose data returns while on bolus screen */ -"An updated bolus recommendation is available." = "Güncellenmiş bir bolus önerisi mevcuttur."; - -/* The title of the amplitude API key credential */ -"API Key" = "API Anahtarı"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Settings app profile section */ -"App Profile" = "Uygulama Profili"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Tüm geçmiş girişlerini silmek istediğinizden emin misiniz?"; - -/* Action sheet confirmation message for logged dose deletion */ -"Are you sure you want to delete all logged dose entries?" = "Günlüğe kaydedilen tüm doz girişlerini silmek istediğinizden emin misiniz?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Tüm rezervuar değerlerini silmek istediğinizden emin misiniz?"; - -/* No comment provided by engineer. */ -"Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" = "Tüm %@ Verilerinizi silmek istediğinizden emin misiniz?\n (Bu eylem geri alınamaz)"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Bu CGM'i silmek istediğinizden emin misiniz?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Bu servisi silmek istediğinizden emin misiniz?"; - -/* Format fragment for a specific time */ -"at %@" = "%@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Bolus için kimlik doğrula %@ Ünite"; - -/* The message displayed during a device authentication prompt to log an insulin dose */ -"Authenticate to log %@ Units" = "%@ Ünite günlüğe kaydetmek için kimlik doğrulaması yapın"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Bazal Oran Çizelgesi"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Bazal Oranlar"; - -/* Caption for bolus screen notice when no bolus is recommended for the predicted glucose */ -"Based on your predicted glucose, no bolus is recommended." = "Tahmini KŞ'ne bağlı olarak bolus önerilmez."; - -/* Message to the user to that the bluetooth is off */ -"Bluetooth\nOff" = "Bluetooth\nKapalı"; - -/* Message to the user that bluetooth is unavailable to the app */ -"Bluetooth\nUnavailable" = "Bluetooth\nKullanılamıyor"; - -/* Bluetooth off alert title */ -"Bluetooth Off Alert" = "Bluetooth Kapalı Uyarısı"; - -/* Bluetooth unavailable alert title */ -"Bluetooth Unavailable Alert" = "Bluetooth Kullanılamıyor Uyarısı"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The notification title for a bolus issue */ -"Bolus Issue" = "Bolus Sorunu"; - -/* Alert title for an updated bolus recommendation */ -"Bolus Recommendation Updated" = "Bolus Önerisi Güncellendi"; - -/* Title for card displaying carb entry and bolus recommendation */ -"Bolus Summary" = "Bolus Özeti"; - -/* Alert title for a bolus too small validation error */ -"Bolus Too Small" = "Bolus Çok Küçük"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "İletilen Bolus %1$@ / %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Bolus %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "İptal"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Bolus İptal ediliyor"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "Karbonhidrat etkileri"; - -/* Label for carb entry row on bolus screen */ -"Carb Entry" = "Karb Girişi"; - -/* Details for configuration error when carb ratio schedule is missing */ -"Carb Ratio Schedule" = "Karb Oranı Programı"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Karbonhidrat Oranları"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Karb Girişi Ekle"; - -/* Title for bolus screen warning when carbohydrate entry is too large */ -"Carbohydrate Entry Too Large" = "Karbonhidrat Girişi Çok Büyük"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Karbonhidratlar"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Emilen Karb. (gr) ÷ Karb. Oranı (gr/Ü) × İnsulin duyarlılığı (%1$@/Ü)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Pompa pilini hemen değiştirin"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Pompa rezervuarını şimdi değiştirin"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Ayarları kontrol et"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Pompanızın menzil içinde olup olmadığını kontrol edin"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "CGM veri kaynağınızı kontrol edin"; - -/* Caption for bolus screen notice when glucose data is in the future */ -"Check your device time and/or remove any invalid data from Apple Health." = "Aygıtınızın saatini kontrol edin ve/veya tüm geçersiz verileri Apple Sağlık'tan kaldırın."; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Daha büyük öğünler veya yağ ve protein içeren besinler için daha uzun bir emilim süresi seçin. Bu değer yalnızca algoritmaya rehberlik eder ve kesin olması gerekmez."; - -/* Button title to close view -The button label of the action used to dismiss the unsafe notification permission alert */ -"Close" = "Kapat"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Kapalı Döngü"; - -/* Alert title for closed loop off informational modal */ -"Closed Loop OFF" = "Kapalı Döngü KAPALI"; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the sensor is inactive */ -"Closed Loop requires an active CGM Sensor Session" = "Kapalı Döngü, aktif bir CGM Sensör Oturumu gerektirir"; - -/* The description text for the looping enabled switch cell when onboarding is not complete */ -"Closed Loop requires Setup to be Complete" = "Kapalı Döngü, Kurulumun Tamamlanmasını gerektirir"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "%1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "%1$@ den beri"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "Tamam"; - -/* Title text for button to complete setup */ -"Complete Setup" = "Kurulumu Tamamla"; - -/* The title of the configuration section in settings */ -"Configuration" = "Konfigürasyon"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Konfigürasyon Hatası: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Devam et"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Sürekli Glikoz İzleme"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Düzeltme Aralığı"; - -/* Critical Alerts Status text */ -"Critical Alerts" = "Kritik Uyarılar"; - -/* Critical event log ready text */ -"Critical Event Log Ready" = "Kritik Olay Günlüğü Hazır"; - -/* Critical event log export title */ -"Critical Event Logs" = "Kritik Olay Günlükleri"; - -/* Critical event log export error alert message */ -"Critical Event Logs were not able to be exported." = "Kritik Olay Günlükleri dışa aktarılamadı."; - -/* Label for glucose entry row on simple bolus screen */ -"Current Glucose" = "Mevcut KŞ"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "%1$@ Mevcut KŞ düzeltme aralığının altında."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Özel Geçersiz kılma"; - -/* The title of the cell indicating a generic custom preset is enabled */ -"Custom Preset" = "Özel Ön Ayar"; - -/* Date picker label */ -"Date" = "Tarih"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* No comment provided by engineer. */ -"Delete" = "Sil"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Hesabı sil"; - -/* Button title to delete all objects */ -"Delete All" = "Hepsini sil"; - -/* Button title to delete CGM */ -"Delete CGM" = "CGM Sil"; - -/* Button title to delete a service */ -"Delete Service" = "Servisi Sil"; - -/* No comment provided by engineer. */ -"Delete Testing CGM Data" = "Test CGM Verilerini Sil"; - -/* No comment provided by engineer. */ -"Delete Testing Data" = "Test Verilerini Sil"; - -/* No comment provided by engineer. */ -"Delete Testing Pump Data" = "Test Pompası Verilerini Sil"; - -/* Button text to deliver a bolus */ -"Deliver" = "İlet"; - -/* Title text for delivery limits */ -"Delivery Limits" = "İletim Limitleri"; - -/* Descriptive text for Therapy Settings */ -"Diabetes Treatment" = "Diyabet Tedavisi"; - -/* Alert body when entered carbohydrates is greater than threshold (1: entered quantity in grams) */ -"Did you intend to enter %1$@ grams as the amount of carbohydrates for this meal?" = "Bu yemek için karbonhidrat miktarı olarak %1$@ gram girmeyi düşündünüz mü?"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Devre Dışı"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Reddet"; - -/* No comment provided by engineer. */ -"Done" = "Tamamlandı"; - -/* Title for card to log dose */ -"Dose Summary" = "Doz Özeti"; - -/* The title of the Dosing Strategy section in settings */ -"Dosing Strategy" = "Dozlama Stratejisi"; - -/* Override error description: duration exceed max (1: max duration in hours). */ -"Duration exceeds: %1$.1f hours" = "Süre aşıldı: %1$.1f saat"; - -/* Message to the user to enable bluetooth */ -"Enable\nBluetooth" = "Etkinleştir\nBluetooth"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Etkin"; - -/* Caption for bolus screen notice when glucose data is missing or stale */ -"Enter a blood glucose from a meter for a recommended bolus amount." = "Önerilen bolus miktarı için bir ölçüm cihazından bir kan şekeri girin."; - -/* Button text to begin entering a bolus */ -"Enter Bolus" = "Bolus girin"; - -/* Button text prompting manual glucose entry on bolus screen */ -"Enter Fingerstick Glucose" = "Parmak Ucu KŞ Girin"; - -/* The placeholder text instructing users to enter a glucose safety limit */ -"Enter glucose safety limit" = "KŞ güvenlik limitini girin"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Askıya alma eşiğini girin"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Bolus İptali Hatası"; - -/* Critical event log export error alert title */ -"Error Exporting Logs" = "Günlükleri Dışa Aktarırken Hata"; - -/* The alert title for a resume error */ -"Error Resuming" = "Sürdürme Hatası"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Etkinlik Geçmişi"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Nihai KŞ %@"; - -/* Bolus error description: bolus exceeds maximum bolus in settings. */ -"Exceeds maximum allowed bolus in settings" = "Ayarlarda izin verilen maksimum bolusu aşıyor"; - -/* Carb error description: carbs exceed maximum amount. */ -"Exceeds maximum allowed carbs" = "İzin verilen maksimum karbonhidrat miktarını aşıyor"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Maksimum Bolusu Aşıyor"; - -/* The title of the export critical event logs in support */ -"Export Critical Event Logs" = "Kritik Olay Günlüklerini Dışa Aktarma"; - -/* The export file name formatted string (1: timestamp) */ -"Export-%1$@" = "Dışa Aktar- %1$@"; - -/* The alert title for a resume error */ -"Failed to Resume Insulin Delivery" = "İnsülin İletimine Devam Edilemedi"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* Label for manual glucose entry row on bolus screen */ -"Fingerstick Glucose" = "Parmak Ucu KŞ"; - -/* Secondary text for alerts disabled warning, which appears on the main status screen. */ -"Fix now by turning Notifications, Critical Alerts and Time Sensitive Notifications ON." = "Bildirimleri, Kritik Uyarıları ve Zamana Duyarlı Bildirimleri AÇIK konuma getirerek şimdi düzeltin."; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "%1$@ için"; - -/* No comment provided by engineer. */ -"Forecasted blood glucose may still be higher than target range." = "Öngörülen KŞ, hala hedef aralıktan yüksek olabilir."; - -/* Title for forecast explanation modal on bolus view */ -"Forecasted Glucose" = "Tahmini KŞ"; - -/* The short unit display string for grams */ -"g" = "gr"; - -/* Get help with Alert Permissions support button text */ -"Get help with Alert Permissions" = "Uyarı İzinleri ile ilgili yardım alın"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Kan şekeri"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "%1$@ eski KŞ verisi"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "KŞ verisi mevcut değil"; - -/* Alert title when glucose data returns while on bolus screen */ -"Glucose Data Now Available" = "KŞ Verileri Artık Kullanılabilir"; - -/* Alert title for a manual glucose entry out of range error -Title for bolus screen warning when glucose entry is out of range */ -"Glucose Entry Out of Range" = "KŞ Girişi Aralık Dışında"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "KŞ Momentumu"; - -/* Details for configuration error when glucose target range schedule is missing */ -"Glucose Target Range Schedule" = "KŞ Hedef Aralığı Programı"; - -/* The title text for how to update */ -"How to update (LoopDocs)" = "Nasıl güncellenir (LoopDocs)"; - -/* Immediate Delivery status text */ -"Immediate" = "Acilen"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Süresiz"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "İnsülin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Emilen İnsulin (Ü) × İnsulin Duyarlılığı (%1$@/Ü)"; - -/* Notification body for crash recovery alert */ -"Insulin adjustments have been disabled!" = "İnsülin ayarlamaları devre dışı bırakıldı!"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "İnsulin İletimi"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "İnsülin etkileri"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "İnsülin Modeli"; - -/* Descriptive text for Insulin Pump */ -"Insulin Pump" = "İnsülin pompası"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "İnsülin Duyarlılığı"; - -/* Details for configuration error when insulin sensitivity schedule is missing */ -"Insulin Sensitivity Schedule" = "İnsülin Duyarlılık Programı"; - -/* The title of the cell indicating the pump is suspended */ -"Insulin Suspended" = "İnsülin Askıya Alındı"; - -/* Insulin type label */ -"Insulin Type" = "İnsülin Tipi"; - -/* Description of an interrupted bolus dose entry (1: title for dose type, 2: value (? if no value) in bold, 3: programmed value (? if no value), 4: unit) */ -"Interrupted %1$@: %2$@ of %3$@ %4$@" = "%1$@ kesintiye uğradı: %3$@ %4$@'nın %2$@ 'si"; - -/* Bolus error description: invalid bolus amount. */ -"Invalid Bolus Amount" = "Geçersiz Bolus Miktarı"; - -/* Carb error description: invalid carb amount. */ -"Invalid carb amount" = "Geçersiz karb miktarı"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Geçersiz veri: %1$@"; - -/* Title for bolus screen notice when glucose data is in the future */ -"Invalid Future Glucose" = "Geçersiz Gelecek Glikoz"; - -/* The error message when glucose data is in the future. (1: glucose data time in future in minutes) */ -"Invalid glucose reading with a timestamp that is %1$@ in the future" = "Gelecekte %1$@ olan bir zaman damgasıyla geçersiz KŞ okuması"; - -/* The title text for the issue report cell */ -"Issue Report" = "Sorun Raporu"; - -/* The notification description for a meal that was possibly not logged in Loop. */ -"It looks like you may not have logged a meal you ate. Tap to log it now." = "Görünüşe göre yediğiniz bir yemeği kaydetmemiş olabilirsiniz. Şimdi kaydetmek için dokunun."; - -/* Title of the warning shown when a large meal was entered */ -"Large Meal Entered" = "Büyük Yemek Girildi"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "CGM uygulamasına erişim"; - -/* OK button title for alert shown when delivery status is uncertain */ -"Learn More" = "Daha fazla bilgi edin"; - -/* Estimated remaining duration with less than a minute */ -"Less than a minute remaining" = "Bir dakikadan az kaldı"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Yükleniyor..."; - -/* Button text to log a dose -Title for dose logging screen */ -"Log Dose" = "Günlük Doz"; - -/* The title of the screen displaying a manually entered insulin dose */ -"Logged Insulin Dose" = "Kayıtlı İnsülin Dozu"; - -/* Title for crash recovery alert */ -"Loop Crashed" = "Loop Çöktü"; - -/* The notification title for a loop failure */ -"Loop Failure" = "Döngü Hatası"; - -/* Bluetooth unavailable alert body. */ -"Loop has detected an issue with your Bluetooth settings, and will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Loop, Bluetooth ayarlarınızla ilgili bir sorun algıladı ve Bluetooth etkinleştirilene kadar başarılı bir şekilde çalışmayacaktır. KŞ okumaları almayacaksınız veya bolus yapamayacaksınız."; - -/* Warning displayed when user is adding a meal from an missed meal notification */ -"Loop has detected an missed meal and estimated its size. Edit the carb amount to match the amount of any carbs you may have eaten." = "Loop atlanmış bir öğün tespit etti ve boyutunu tahmin etti. Yemiş olabileceğiniz karbonhidrat miktarına uyması için karbonhidrat miktarını düzenleyin."; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Döngü %@ içinde başarıyla tamamlanamadı"; - -/* Description string for automatic bolus dosing strategy */ -"Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." = "Loop, insülin ihtiyaçları programlanan bazalın üzerine çıktığında otomatik olarak bolus yapacak ve gerektiğinde insülin iletimini programlanan bazalın altına düşürmek için geçici bazal oranları kullanacaktır."; - -/* Bluetooth off background alert body. */ -"Loop will not work successfully until Bluetooth is enabled. You will not receive glucose readings, or be able to bolus." = "Bluetooth etkinleştirilene kadar döngü başarılı bir şekilde çalışmayacaktır. KŞ ölçümleri alamayacak veya bolus yapamayacaksınız."; - -/* Description string for temp basal only dosing strategy */ -"Loop will set temporary basal rates to increase and decrease insulin delivery." = "Loop, insülin iletimini artırmak ve azaltmak için geçici bazal oranlar ayarlayacaktır."; - -/* Title for bolus screen warning when glucose is below glucose warning limit. -Title for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended */ -"Low Glucose" = "Düşük KŞ"; - -/* Manage Permissions in Settings button text */ -"Manage Permissions in Settings" = "Ayarlarda İzinleri Yönetin"; - -/* Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit) */ -"Manual Dose: %1$@ %2$@" = "Manuel Doz: %1$@ %2$@"; - -/* Details for configuration error when maximum basal rate per hour is missing */ -"Maximum Basal Rate Per Hour" = "Saat Başı Maksimum Bazal Oran"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Maksimum Bolus"; - -/* Title for bolus screen warning when max bolus is exceeded */ -"Maximum Bolus Exceeded" = "Maksimum Bolus Aşıldı"; - -/* Title for bolus entry screen when also entering carbs */ -"Meal Bolus" = "Yemek Bolusu"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* Title for missed meal notifications toggle */ -"Missed Meal Notifications" = "Kaçırılan Yemek Bildirimleri"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Eksik veri: %1$@"; - -/* Bolus error description: missing maximum bolus in settings. */ -"Missing maximum allowed bolus in settings" = "Ayarlarda izin verilen maksimum bolus eksik"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Momentum etkileri"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Daha fazla bilgi"; - -/* Label for button to mute all alerts */ -"Mute All Alerts" = "Tüm Uyarıları Sessize Al"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "İlgilenmeniz gerekiyor"; - -/* Override error description: negative duration error. */ -"Negative duration not allowed" = "Negatif süreye izin verilmez"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* Title for bolus screen notice when no bolus is recommended -Title for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended -Title for bolus screen warning when no bolus is recommended */ -"No Bolus Recommended" = "Bolus Önerilmez"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Bağlı cihaz yok veya cihaz bağlantısı sırasında hata"; - -/* Alert title for a missing maximum bolus setting error */ -"No Maximum Bolus Configured" = "Yapılandırılmış Maksimum Bolus Yok"; - -/* Alert title for a missing pump error */ -"No Pump Configured" = "Yapılandırılmış Pompa Yok"; - -/* The title of the cell indicating that there is no recent glucose */ -"No Recent Glucose" = "Son KŞ Yok"; - -/* Title for bolus screen notice when glucose data is missing or stale */ -"No Recent Glucose Data" = "Son KŞ Verisi Yok"; - -/* Title for bolus screen notice when pump data is missing or stale */ -"No Recent Pump Data" = "Son Pompa Verisi Yok"; - -/* The title of the action used when rejecting the the amount of carbohydrates entered. */ -"No, edit amount" = "Hayır, miktarı düzenle"; - -/* Notification Delivery Status text */ -"Notification Delivery" = "Bildirim Gönderimi"; - -/* Format for Critical Alerts permissions disabled alert body. (1: app name) */ -"Notification delivery is set to Scheduled Summary in your phone’s settings.\n\nTo avoid delay in receiving notifications from %1$@, we recommend notification delivery be set to Immediate Delivery." = "Bildirim gönderimi, telefonunuzun ayarlarında Zamanlanmış Özet olarak ayarlanmıştır.\n\n%1$@ adresinden bildirim almakta gecikmeyi önlemek için bildirim gönderimini Anında Gönderim olarak ayarlanmasını öneririz."; - -/* Notifications Status text */ -"Notifications" = "Bildirimler"; - -/* Scheduled Delivery Enabled alert title */ -"Notifications Delayed" = "Bildirimler Gecikti"; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app." = "Bildirimler, uygulamayı açmanıza gerek kalmadan size önemli %1$@ uygulama bilgilerini verir."; - -/* Alert Permissions descriptive text (1: app name) */ -"Notifications give you important %1$@ app information without requiring you to open the app.\n\nKeep these turned ON in your phone’s settings to ensure you receive %1$@ Notifications, Critical Alerts, and Time Sensitive Notifications." = "Bildirimler, uygulamayı açmanıza gerek kalmadan size önemli %1$@ uygulama bilgilerini verir. \n\n %1$@ Bildirimler, Kritik Uyarılar ve Zamana Duyarlı Bildirimler aldığınızdan emin olmak için telefonunuzun ayarlarında bunları AÇIK durumda tutun."; - -/* Notification Setting Status is Off */ -"Off" = "Kapalı"; - -/* Modal body for crash recovery alert */ -"Oh no! Loop crashed while dosing, and insulin adjustments have been paused until this dialog is closed. Dosing history may not be accurate. Please review Insulin Delivery charts, and monitor your blood glucose carefully." = "Oh hayır! Dozlama sırasında Loop çöktü ve bu iletişim kutusu kapatılana kadar insülin ayarlamaları duraklatıldı. Dozlama geçmişi doğru olmayabilir. Lütfen İnsülin İletim tablolarını gözden geçirin ve kan şekerinizi dikkatle izleyin."; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "Tamam"; - -/* Notification Setting Status is On */ -"On" = "Açık"; - -/* The title text for the override presets */ -"Override Presets" = "Geçersiz Kılma Ön Ayarları"; - -/* The notification title for a meal that was possibly not logged in Loop. */ -"Possible Missed Meal" = "Muhtemel Kaçırılan Öğün"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Yemek Öncesi Hedefler"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Tahmini KŞ %1$@ %2$@."; - -/* Notice when predicted glucose for bolus recommendation is in range */ -"Predicted glucose is in range." = "Tahmini KŞ aralık içinde."; - -/* Notice message when recommending bolus when BG is below the glucose safety limit. (1: glucose value) */ -"Predicted glucose of %1$@ is below your glucose safety limit setting." = "%1$@ tahmini KŞ, KŞ güvenlik limiti ayarınızın altında."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Tahmini KŞ %1$@ askıya alma eşiği ayarınızın altında."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Tahmini: %1$@\nGüncel: %2$@ (%3$@)"; - -/* Preparing critical event log text */ -"Preparing Critical Event Logs" = "Kritik Olay Günlüklerinin Hazırlanması"; - -/* Settings App Profile expiration view */ -"Profile Expiration" = "Profil Sona Erme"; - -/* Time that profile expires */ -"Profile expires " = "Profilin süresi doluyor"; - -/* The title for notification of upcoming profile expiration */ -"Profile Expires Soon" = "Profil Yakında Sona Eriyor"; - -/* The title of the pump section in settings */ -"Pump" = "Pompa"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pompa Pili Düşük"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Pompa verisi %1$@ eski"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pompa Etkinliği"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Pompa Yöneticisi"; - -/* The error message displayed for pump manager errors. (1: pump manager error) */ -"Pump Manager Error: %1$@" = "Pompa Yöneticisi Hatası: %1$@"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Pompa Rezervuarı Boş"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Pompa Rezervuarı Düşük"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Pompa Askıya Alındı"; - -/* The error message displayed for pumpSuspended errors. */ -"Pump Suspended. Automatic dosing is disabled." = "Pompa Askıya Alındı. Otomatik dozlama devre dışı bırakıldı."; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Hızlı Etkili – Yetişkinler"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Hızlı Etkili – Çocuklar"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Önerinin süresi doldu: %1$@ eski"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Önerilen Bazal"; - -/* Label for recommended bolus row on bolus screen -Label for recommended bolus row on simple bolus screen */ -"Recommended Bolus" = "Önerilen Bolus"; - -/* Title for bolus screen warning when recommended bolus exceeds max bolus */ -"Recommended Bolus Exceeds Maximum Bolus" = "Önerilen Bolus Maksimum Bolusu Aşıyor"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Önerilen Bolus: %@ Ünite"; - -/* The notification title for a remote bolus. (1: Bolus amount) -The notification title for a remote failure. (1: Bolus amount) */ -"Remote Bolus Entry: %@ U" = "Uzak Bolus Girişi: %@ U"; - -/* The carb amount message for a remote carbs entry notification. (1: Carb amount in grams) */ -"Remote Carbs Entry: %d grams" = "Uzak Karbonhidrat Girişi: %d gram"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Rezervuar"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Geçmişe Dönük Düzeltme"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Yeniden dene"; - -/* Button text to save carbs and/or manual glucose entry without a bolus */ -"Save without Bolusing" = "Bolus olmadan Kaydet"; - -/* Scheduled Delivery status text */ -"Scheduled" = "Planlanan"; - -/* The title of the services section in settings */ -"Services" = "Servisler"; - -/* The label of the settings button */ -"Settings" = "Ayarlar"; - -/* The title of the cell indicating that onboarding is suspended */ -"Setup Incomplete" = "Kurulum Tamamlanmadı"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Son döngü hatasını gösterir"; - -/* Title of simple bolus view when not displaying meal entry */ -"Simple Bolus Calculator" = "Basit Bolus Hesaplayıcı"; - -/* Title of simple bolus view when displaying meal entry */ -"Simple Meal Calculator" = "Basit Yemek Hesaplayıcı"; - -/* Format fragment for a start time */ -"since %@" = "%@ den beri"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Nightscout URL"; - -/* Software update button link text */ -"Software Update" = "Yazılım güncellemesi"; - -/* Carb error description: invalid start time is out of range. */ -"Start time is out of range: %@" = "Başlangıç zamanı aralığın dışında: %@"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "%@ tarihinde başladı"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Bolus başlatılıyor"; - -/* Section title for Support -The title of the support section in settings */ -"Support" = "Destek"; - -/* The title text in settings */ -"Suspend Threshold" = "Eşiği Askıya Al"; - -/* Descriptive text for button to add CGM device */ -"Tap here to set up a CGM" = "Bir CGM ayarlamak için buraya dokunun"; - -/* Descriptive text for button to add pump device */ -"Tap here to set up a pump" = "Bir pompa ayarlamak için buraya dokunun"; - -/* The descriptive text of the add service button in settings */ -"Tap here to set up a Service" = "Bir Servis ayarlamak için buraya dokunun"; - -/* The subtitle of the cell displaying an action to add a manually measurement glucose value */ -"Tap to Add" = "Eklemek için dokunun"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Sürdürmek için dokunun"; - -/* Message presented in the status row instructing the user to tap this row to stop a bolus */ -"Tap to Stop" = "Durdurmak için dokunun"; - -/* Alert message for a bolus too small validation error */ -"The bolus amount entered is smaller than the minimum deliverable." = "Girilen bolus miktarı, minimum teslim edilebilir miktardan daha küçük."; - -/* Forecast explanation modal on bolus view */ -"The bolus dosing algorithm uses a more conservative estimate of forecasted blood glucose than what is used to adjust your basal rate.\n\nAs a result, your forecasted blood glucose after a bolus may still be higher than your target range." = "Bolus dozlama algoritması, bazal hızınızı ayarlamak için kullanılandan daha ihtiyatlı bir kan şekeri tahmini kullanır. \n\n Sonuç olarak, bir bolustan sonra tahmin edilen kan şekeriniz, hedef aralığınızdan daha yüksek olabilir."; - -/* Alert message for an updated bolus recommendation */ -"The bolus recommendation has updated. Please reconfirm the bolus amount." = "Bolus önerisi güncellendi. Lütfen bolus miktarını yeniden onaylayın."; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Loop tarafından kullanılan ve eylem süresinin özelleştirilmesine izin veren eski model."; - -/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */ -"The maximum allowed amount is %@ grams." = "İzin verilen maksimum miktar %@ gramdır."; - -/* Warning for simple bolus when carbohydrate entry is too large. (1: maximum carbohydrate entry) */ -"The maximum amount allowed is %1$@." = "İzin verilen maksimum tutar %1$@."; - -/* Alert message for a maximum bolus validation error (1: max bolus value) */ -"The maximum bolus amount is %@ U." = "Maksimum bolus miktarı %@ Ü."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Maksimum bolus miktarı %@ Ünitedir"; - -/* Alert message for a missing maximum bolus setting error */ -"The maximum bolus setting must be configured before a bolus can be delivered." = "Bir bolus verilmeden önce maksimum bolus ayarı yapılandırılmalıdır."; - -/* Title text for button to Therapy Settings */ -"Therapy Settings" = "Tedavi Ayarları"; - -/* Time Sensitive Status text */ -"Time Sensitive Notifications" = "Zamana Duyarlı Bildirimler"; - -/* Critical event log export error alert try again button */ -"Try Again" = "Tekrar deneyin"; - -/* Bluetooth off foreground alert body */ -"Turn on Bluetooth to receive alerts, alarms or sensor glucose readings." = "Uyarıları, alarmları veya sensör KŞ okumalarını almak için Bluetooth'u açın."; - -/* The short unit display string for international units of insulin */ -"U" = "Ü"; - -/* Title for alert shown when alert acknowledgement fails */ -"Unable To Clear Alert" = "Uyarı Silinemiyor"; - -/* Title for alert shown when delivery status is uncertain */ -"Unable To Reach Pump" = "Pompaya Ulaşılamıyor"; - -/* Alert title for a carb entry persistence error */ -"Unable to Save Carb Entry" = "Karb Girişi Kaydedilemiyor"; - -/* Alert title for a manual glucose entry persistence error */ -"Unable to Save Manual Glucose Entry" = "Manuel KŞ Girişi Kaydedilemiyor"; - -/* The alert body for an error while canceling a bolus */ -"Unable to stop the bolus in progress. Move your iPhone closer to the pump and try again. Check your insulin delivery history for details, and monitor your glucose closely." = "Devam etmekte olan bolus durdurulamıyor. iPhone'unuzu pompaya yaklaştırın ve tekrar deneyin. Ayrıntılar için insülin uygulama geçmişinizi kontrol edin ve kan şekerinizi yakından takip edin."; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Bilinmeyen"; - -/* The error message displayed for unknown errors. (1: unknown error) */ -"Unknown Error: %1$@" = "Bilinmeyen Hata: %1$@"; - -/* Override error description: unknown preset (1: preset name). */ -"Unknown preset: %1$@" = "Bilinmeyen ön ayar: %1$@"; - -/* Unknown amount of time in settings' profile expiration section */ -"Unknown time" = "Bilinmeyen zaman"; - -/* The format for the description of a temporary override end date */ -"until %@" = "%@ tarihine kadar"; - -/* The title of a target alert action specifying pre-meal targets duration for 1 hour or until the user enters carbs (whichever comes first). */ -"Until I enter carbs" = "Karb girene kadar"; - -/* The title of a target alert action specifying workout targets duration until it is turned off by the user */ -"Until I turn off" = "Ben kapatana kadar"; - -/* The title of the alert controller used to select a duration for pre-meal targets */ -"Use Pre-Meal Preset" = "Yemek Öncesi Ön Ayarı Kullanın"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Egzersiz KŞ Hedeflerini Kullanın"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Preset" = "Egzersiz Ön Ayarını Kullan"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Alert Permissions Need Attention alert title */ -"Warning! Safety notifications are turned OFF" = "Uyarı! Güvenlik bildirimleri KAPALI"; - -/* Explanation of glucose safety limit */ -"When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Mevcut veya tahmin edilen KŞ, KŞ güvenlik sınırının altında olduğunda Loop bir bolus önermez ve her zaman saatte 0 ünite geçici bazal oran önerir."; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Mevcut veya tahmin edilen KŞ askıya alma eşiğinin altında olduğunda, Loop bir bolus önermez ve her zaman saatte 0 birimlik geçici bir bazal hız önerir."; - -/* Description of missed meal notifications. */ -"When enabled, Loop can notify you when it detects a meal that wasn't logged." = "Etkinleştirildiğinde Loop, günlüğe kaydedilmemiş bir öğün tespit ettiğinde sizi bilgilendirebilir."; - -/* No comment provided by engineer. */ -"When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." = "Uygulama, Kapalı Döngü modundan çıktığında, tipik bir pompa gibi basitleştirilmiş bir bolus hesaplayıcı kullanır."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Egzersiz Hedefleri"; - -/* Workout override still on reminder alert body. */ -"Workout Temp Adjust has been turned on for more than 24 hours. Make sure you still want it enabled, or turn it off in the app." = "Geçici Egzersiz Ayarı 24 saatten uzun süredir açık. Hala etkin olmasını istediğinizden emin olun veya uygulamadan kapatın."; - -/* Workout override still on reminder alert title */ -"Workout Temp Adjust Still On" = "Geçici Egzersiz Ayarı Hala Açık"; - -/* The title of the action used when confirming entered amount of carbohydrates. */ -"Yes" = "Evet"; - -/* Format for Notifications permissions disabled alert body. (1: app name) */ -"You may not get sound, visual or vibration alerts regarding critical safety information.\n\nTo fix the issue, tap ‘Settings’ and make sure Notifications, Critical Alerts and Time Sensitive Notifications are turned ON." = "Kritik güvenlik bilgileriyle ilgili sesli, görsel veya titreşimli uyarılar alamayabilirsiniz. \n\n Sorunu çözmek için 'Ayarlar'a dokunun ve Bildirimlerin, Kritik Uyarıların ve Zamana Duyarlı Bildirimlerin AÇIK olduğundan emin olun."; - -/* Time change alert body. (1: app name) */ -"Your %1$@’s time has been changed. %2$@ needs accurate time records to make predictions about your glucose and adjust your insulin accordingly.\n\nCheck in your %1$@ Settings (General / Date & Time) and verify that 'Set Automatically' is turned ON. Failure to resolve could lead to serious under-delivery or over-delivery of insulin." = "%1$@ 'inizin saati değiştirildi. %2$@ KŞ ile ilgili tahminlerde bulunmak ve insülininizi buna göre ayarlamak için doğru zaman kayıtlarına ihtiyaç duyar. \n\n %1$@ Ayarlarınızı (Genel / Tarih ve Saat) kontrol edin ve 'Otomatik Olarak Ayarla' seçeneğinin AÇIK olduğunu doğrulayın. Çözülmemesi, insülinin ciddi şekilde yetersiz veya fazla verilmesine yol açabilir."; - -/* Format string for simple bolus screen warning when glucose is below glucose warning limit. */ -"Your glucose is below %1$@. Are you sure you want to bolus?" = "KŞ %1$@ altında. Bolus yapmak istediğinizden emin misiniz?"; - -/* Caption for bolus screen notice when no bolus is recommended due to prediction dropping below glucose safety limit */ -"Your glucose is below or predicted to go below your glucose safety limit, %@." = "KŞ güvenlik sınırınızın %@ altındadır veya altına düşeceği tahmin edilmektedir."; - -/* Format string for bolus screen warning when no bolus is recommended due input value below glucose safety limit. (1: suspendThreshold) */ -"Your glucose is below your glucose safety limit, %1$@." = "KŞ güvenlik sınırınızın altında, %1$@ ."; - -/* Format string for meal bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold */ -"Your glucose is low. Eat carbs and consider waiting to bolus until your glucose is in a safe range." = "KŞ düşük. Karbonhidrat yiyin ve KŞ güvenli bir aralığa gelene kadar bolus yapmayı erteleyin."; - -/* Bolus screen warning when no bolus is recommended due to glucose input value below recommendation threshold for meal bolus */ -"Your glucose is low. Eat carbs and monitor closely." = "KŞ düşük. Karbonhidrat yiyin ve yakından izleyin."; - -/* Warning for simple bolus when max bolus is exceeded. (1: maximum bolus) */ -"Your maximum bolus amount is %1$@." = "Maksimum bolus miktarınız %1$@ ."; - -/* Caption for bolus screen notice when pump data is missing or stale */ -"Your pump data is stale. %1$@ cannot recommend a bolus amount." = "Pompa verileriniz eski. %1$@ bir bolus miktarı öneremez."; - -/* The description text for the looping enabled switch cell when closed loop is not allowed because the pump is delivering a manual temp basal. */ -"Your pump is delivering a manual temporary basal rate." = "Pompanız manuel bir geçici bazal oran veriyor."; - -/* Warning for simple bolus when recommended bolus exceeds max bolus. (1: maximum bolus) */ -"Your recommended bolus exceeds your maximum bolus amount of %1$@." = "Önerilen bolus miktarı, maksimum bolus miktarınız olan %1$@ değerini aşıyor."; - diff --git a/Loop/tr.lproj/Main.strings b/Loop/tr.lproj/Main.strings deleted file mode 100644 index dcbfc0b379..0000000000 --- a/Loop/tr.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Durum"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 Ü/saat @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Tahmini"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detay"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Etiket"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "KŞ Değişimi"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "gr Toplam"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Gelecekteki KŞ, çoklu girdilerin etkilerini birleştirerek tahmin edilir. Son tahminle nasıl karşılaştırıldıklarını görmek üzere çeşitli girdiler arasında geçiş yapmak için bu aracı kullanın."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Etiket"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "Nihai KŞ 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Gözlendi"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 Ü/saat @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Karbonhidrat Etkileri"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "İnsülin iletiminden modellenen değişiklikler çıkarılarak KŞ değerlerinde gözlemlenen değişiklikler, karbonhidrat emilimini tahmin etmek için kullanılabilir."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detay"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Önerilen Bazal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Etiket"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Etiket"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Tahmini KŞ"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "Nihai KŞ 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "gr Aktif Karb."; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Kan şekeri"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Etiket"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Karbonhidratlar"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Önerilen Bazal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Başlık"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/vi.lproj/InfoPlist.strings b/Loop/vi.lproj/InfoPlist.strings deleted file mode 100644 index 26e6ae78c3..0000000000 --- a/Loop/vi.lproj/InfoPlist.strings +++ /dev/null @@ -1,21 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "Bluetooth được sử dụng để liên lạc với máy bơm insulin và các thiết bị theo dõi đường huyết liên tục/CGM."; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "Bluetooth được sử dụng để liên lạc với máy bơm insulin và các thiết bị theo dõi đường huyết liên tục/CGM."; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "Face ID được sử dụng để xác thực liều insulin cho các bữa ăn."; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Thông số bữa ăn từ app Health được sử dụng để xác định tác động của glucose. Thông số glucose từ app Health được sử dụng cho các tính toán vẽ đồ thị và chuyển động của đường huyết."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Dữ liệu Carbohydrate của bữa ăn được nhập trên phần mềm và trên đồng hồ thông minh sẽ được lưu trữ tại app Health. Các thông số glucose được lấy từ thiết bị theo dõi đường huyết liên tục/CGM sẽ được lưu trữ an toàn trong HealthKit."; - diff --git a/Loop/vi.lproj/Localizable.strings b/Loop/vi.lproj/Localizable.strings deleted file mode 100644 index b9070efbe5..0000000000 --- a/Loop/vi.lproj/Localizable.strings +++ /dev/null @@ -1,481 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (đang chờ xử lý: %@)"; - -/* String denoting lack of a recommended bolus amount in the simple bolus calculator */ -"–" = "—"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ được hấp thụ"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ U Tổng cộng"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string combining carb entry quantity and absorption time emoji */ -"%1$@ %2$@" = "%1$@ %2$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/U"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ U còn lại"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ U còn lại: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ U/giờ @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15 phút hồi quy glucose (b₁), tiếp tục phân rã trên 30 phút."; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30 phút so sánh dự đoán glucose so với thực tế, tiếp tục với sự phân rã hơn 60 phút."; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "Mô hình dựa trên sự hấp thụ được công bố đối với insulin Fiasp."; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "Mô hình dựa trên sự hấp thụ được công bố của các loại insulin Humalog, Novolog và Apidra ở người lớn."; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "AcceptRecommendedBolus"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "Lượng Carbohydrates còn hoạt động"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "Lượng Carbohydrates còn hoạt động: %@"; - -/* Title describing quantity of still-absorbing carbohydrates */ -"Active Carbs" = "Lượng Carbs còn hoạt động"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "Lượng Insulin còn hoạt động"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "Lượng Insulin còn hoạt động: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Khai báo Carb"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "Khai báo CGM"; - -/* The label of the meal button */ -"Add Meal" = "Khai báo bữa ăn"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "Khai báo bơm"; - -/* The title of the Amplitude service */ -"Amplitude" = "Amplitude"; - -/* The title of the amplitude API key credential */ -"API Key" = "API Key"; - -/* The title of the nightscout API secret credential */ -"API Secret" = "API Secret"; - -/* Action sheet confirmation message for pump history deletion */ -"Are you sure you want to delete all history entries?" = "Bạn có chắc muốn xóa hết các dữ liệu cũ?"; - -/* Action sheet confirmation message for reservoir deletion */ -"Are you sure you want to delete all reservoir values?" = "Bạn có chắc muốn xóa hết mọi giá trị của ngăn chứa insulin?"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "Bạn có chắc sẽ xóa CGM này?"; - -/* Format fragment for a specific time */ -"at %@" = "lúc %@"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "Xác thực liều Bolus %@ Units"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "Lịch biểu tiêm liều basal"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "Lịch biểu tiêm liều nền"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "Bolus"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "Đã thực hiện Bolus %1$@ của %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "Đang thực hiện bolus %1$@"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "Hủy bỏ"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "Hủy bỏ liều Bolus"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "các tác động của Carb"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "Carb Ratios"; - -/* The title of the view controller to create a new carb entry */ -"carb-entry-title-add" = "Khai báo Carb"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "Carbohydrates"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "Khối lượng carb tiêu thụ (g) ÷ Tỷ lệ Carb (g/U) × Độ nhạy của Insulin (%1$@/U)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "Thay pin máy bơm ngay"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "Thay ngăn chứa insulin bây giờ"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "Kiểm tra các cài đặt"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "Kiểm tra máy bơm đang trong phạm vi cho phép"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "Kiểm tra nguồn dữ liệu CGM của bạn"; - -/* Carb entry section footer text explaining absorption time */ -"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Lựa chọn khoảng thời gian tiêu hóa dài hơn cho các bữa ăn no, hoặc những bữa ăn nhiều chất béo và protein. Đây chỉ là hướng dẫn cho thuật toán Algorithm và không cần phải chính xác."; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "Vòng lặp kín"; - -/* The format string describing the date of an IOB value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.IOBDateLabel" = "lúc %1$@"; - -/* The format string describing the starting date of a total value. The first format argument is the localized date. */ -"com.loudnate.InsulinKit.totalDateLabel" = "từ lúc %1$@"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "Cấu hình"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "Lỗi cấu hình: %1$@"; - -/* Default alert dismissal */ -"Continue" = "Tiếp tục"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "Kiểm soát đường huyết liên tục"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "Phạm vi liều Bổ sung"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = " Chỉ số glucose hiện tại %1$@ nằm dưới Phạm vi Điều chỉnh."; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "Thói quen Chồng liều"; - -/* Date picker label */ -"Date" = "Ngày"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "Xóa Tài khoản"; - -/* Button title to delete all objects */ -"Delete All" = "Xóa hết"; - -/* Button title to delete CGM */ -"Delete CGM" = "Xóa CGM"; - -/* Button title to delete a service */ -"Delete Service" = "Delete Service"; - -/* Title text for delivery limits */ -"Delivery Limits" = "Giới hạn liều tiêm"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "Vô hiệu hóa"; - -/* Default alert dismissal -The button label of the action used to dismiss an error alert */ -"Dismiss" = "Từ bỏ"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "Cho phép"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "Nhập ngưỡng tạm dừng"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "Lỗi hủy liều Bolus"; - -/* The alert title for a resume error */ -"Error Resuming" = "Lỗi khi đang tái thực hiện"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "Event History"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "Kết quả %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "Vượt quá liều Bolus tối đa"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "For %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "Đường huyết"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "Dữ liệu đường huyết %1$@ cũ"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "Dữ liệu đường huyết không sẵn sàng"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "Chuyển động của Glucose"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "Vô hạn định"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "Thuốc Insulin"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "Lượng insulin tiêu hao (U) × Độ nhạy của insulin (%1$@/U)"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "Khối lượng tiêm insulin"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "Tác dụng của insulin"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "Chủng loại Insulin"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "Độ nhạy của Insulin"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "Dữ liệu vô hiệu: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "Xuất bản Báo cáo"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "Phát hành ứng dụng CGM"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "Đang tải..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop lỗi"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop không hoạt động thành công trong %@"; - -/* Details for configuration error when maximum bolus is missing */ -"Maximum Bolus" = "Liều Bolus tối đa"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "Dữ liệu thiếu: %1$@"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "Hiệu ứng động lượng"; - -/* Text for more info action on notification of upcoming TestFlight expiration -Text for more info action on notification of upcoming profile expiration */ -"More Info" = "Thêm thông tin"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "Cần chú ý"; - -/* The title of the Nightscout service */ -"Nightscout" = "Nightscout"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "Không có thiết bị nào được kết nối, hoặc lỗi trong quá trình kết nối"; - -/* Alert acknowledgment OK button -Critical Alert permissions disabled alert button -Default action for alert when alert acknowledgment fails -Notifications permissions disabled alert button -Text for ok action on notification of upcoming TestFlight expiration -Text for ok action on notification of upcoming profile expiration -The title of the notification action to acknowledge a device alert */ -"OK" = "OK"; - -/* Notification Setting Status is On */ -"On" = "On"; - -/* The title text for the override presets */ -"Override Presets" = "Cài đặt chồng liều"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "Mục tiêu trước bữa ăn"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "Dự đoán đường huyết vào lúc %1$@ là %2$@."; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "Dự đoán đường huyết %1$@ là dưới ngưỡng tạm ngưng trong cài đặt của bạn."; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "Được dự đoán: %1$@\nThực tế: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "Bơm"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "Pin của bơm thấp"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "Dữ liệu bơm %1$@ là cũ"; - -/* The title of the screen displaying a pump event */ -"Pump Event" = "Pump Event"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "Trình quản lý bơm"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "Ngăn chứa hết insulin"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "Ngăn chứa insulin thấp"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "Bơm đã tạm ngưng"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "Thuốc tác động nhanh cho người lớn"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "Thuốc tác động nhanh cho trẻ em"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "Khuyến cáo hết hạn: %1$@ phút"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "Khuyến nghị liều Basal"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "Liều Bolus khuyến nghị: %@ Units"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "Reservoir"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "Liều Bổ sung còn hiệu lực"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "Thử lại"; - -/* The title of the services section in settings */ -"Services" = "Dịch vụ"; - -/* The label of the settings button */ -"Settings" = "Cài đặt"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "Hiển thị lỗi của loop trước đó"; - -/* Format fragment for a start time */ -"since %@" = "từ khi %@"; - -/* The title of the nightscout site URL credential */ -"Site URL" = "Site URL"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "bắt đầu lúc %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "Bắt đầu liều Bolus"; - -/* The title text in settings */ -"Suspend Threshold" = "Ngưỡng Tạm dừng"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "Chạm để tiếp tục"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Mô hình cũ được Loop sử dụng, cho phép tùy chỉnh thời lượng hành động."; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "Số lượng bolus tối đa là %@ Units"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "Không nhận ra"; - -/* The format for the description of a temporary override end date */ -"until %@" = "cho đến khi %@"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "Sử dụng Workout Glucose Targets"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "Khi mức glucose hiện tại hoặc được dự báo thấp hơn ngưỡng tạm dừng, Loop sẽ không khuyến nghị một liều bolus và sẽ luôn khuyến nghị liều basal là 0 unit mỗi giờ."; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "Mục tiêu tập luyện"; - diff --git a/Loop/vi.lproj/Main.strings b/Loop/vi.lproj/Main.strings deleted file mode 100644 index 67161d9fd6..0000000000 --- a/Loop/vi.lproj/Main.strings +++ /dev/null @@ -1,84 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "Tình trạng"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5 U/hour @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "Được dự đoán"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "Detail"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "Label"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "Mức đường huyết thay đổi"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "g Tổng cộng"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "Glucose trong tương lai được dự đoán bằng cách kết hợp các tác động của nhiều dữ liệu đầu vào. Sử dụng công cụ này để chuyển đổi các đầu vào khác nhau để xem cách chúng so sánh với dự đoán cuối cùng."; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "Label"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "kết quả là 92 mg/dL"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "Được quan sát"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "fWV-jg-ICt"; */ -"fWV-jg-ICt.text" = "3.5 U/hour @ 12:12 PM"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = "Carbohydrate Effects"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "Những thay đổi quan sát được trong glucose, trừ đi những thay đổi được mô hình hóa từ việc cung cấp insulin, có thể được sử dụng để ước tính sự hấp thụ carbohydrate."; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "Detail"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "Khuyến nghị liều Basal"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "Label"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "Label"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "Đường huyết được dự đoán"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "kết quả là 92 mg/dL"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "g Active Carbs"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "Đường huyết"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "Label"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "Carbohydrates"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "xhx-PI-bBI"; */ -"xhx-PI-bBI.text" = "Khuyến nghị liều Basal"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "Title"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/Loop/zh-Hans.lproj/InfoPlist.strings b/Loop/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index 09fb0ea7e5..0000000000 --- a/Loop/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1,18 +0,0 @@ -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - -/* Privacy - Bluetooth Always Usage Description */ -"NSBluetoothAlwaysUsageDescription" = "蓝牙用于与胰岛素泵和连续血糖监测设备进行通信"; - -/* Privacy - Bluetooth Peripheral Usage Description */ -"NSBluetoothPeripheralUsageDescription" = "蓝牙用于与胰岛素泵和连续血糖监测设备进行通信"; - -/* Privacy - Face ID Usage Description */ -"NSFaceIDUsageDescription" = "使用人脸解锁来确认输注胰岛素剂量"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "数据库中的膳食数据用于确定葡萄糖影响。健康数据库中的葡萄糖数据用于绘图和动量计算。"; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "在应用程序和手表中输入的碳水化合物膳食数据存储在健康数据库中。从CGM检索的葡萄糖数据安全地存储在HealthKit中。"; - diff --git a/Loop/zh-Hans.lproj/Localizable.strings b/Loop/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index ca2f12eeec..0000000000 --- a/Loop/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,401 +0,0 @@ -/* The string format appended to active insulin that describes pending insulin. (1: pending insulin) */ -" (pending: %@)" = " (待执行: %@)"; - -/* The format for an active override preset. (1: preset symbol)(2: preset name) */ -"%@ %@" = "%1$@ %2$@"; - -/* Formats absorbed carb value */ -"%@ absorbed" = "%@ 已吸收"; - -/* The subtitle format describing total insulin. (1: localized insulin total) */ -"%@ U Total" = "%@ 单位 总量"; - -/* Appends a full-stop to a statement */ -"%@." = "%@."; - -/* Format string for glucose target range. (1: Min target)(2: Max target)(3: glucose unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* Format string for carb ratio average. (1: value)(2: carb unit) */ -"%1$@ %2$@/U" = "%1$@ %2$@/单位"; - -/* Formats (1: carb start time) and (2: carb absorption duration) */ -"%1$@ + %2$@" = "%1$@ + %2$@"; - -/* Low reservoir alert format string. (1: Number of units remaining) */ -"%1$@ U left" = "%1$@ 单位 剩余"; - -/* Low reservoir alert with time remaining format string. (1: Number of units remaining)(2: approximate time remaining) */ -"%1$@ U left: %2$@" = "%1$@ 单位 剩余: %2$@"; - -/* The format for recommended temp basal rate and time. (1: localized rate number)(2: localized time) */ -"%1$@ U/hour @ %2$@" = "%1$@ 单位/小时 @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Formats (1: carb value) and (2: food type) */ -"%1$@: %2$@" = "%1$@: %2$@"; - -/* Description of the prediction input effect for glucose momentum */ -"15 min glucose regression coefficient (b₁), continued with decay over 30 min" = "15分钟葡萄糖回归系数(b1),持续30分钟衰减"; - -/* Description of the prediction input effect for retrospective correction */ -"30 min comparison of glucose prediction vs actual, continued with decay over 60 min" = "30分钟葡萄糖预测与实际比较,持续60分钟以上衰减"; - -/* Subtitle of Fiasp preset */ -"A model based on the published absorption of Fiasp insulin." = "基于公布的Fiasp胰岛素吸收的模型"; - -/* Subtitle of Rapid-Acting – Adult preset */ -"A model based on the published absorption of Humalog, Novolog, and Apidra insulin in adults." = "基于已公布的Humalog,Novolog和Apidra胰岛素在成人中吸收的模型。"; - -/* Action to copy the recommended Bolus value to the actual Bolus Field */ -"AcceptRecommendedBolus" = "按照推荐的大剂量输注"; - -/* The title of the Carbs On-Board graph */ -"Active Carbohydrates" = "活性碳水化合物"; - -/* The string format describing active carbohydrates. (1: localized glucose value description) */ -"Active Carbohydrates: %@" = "活性碳水化合物: %@"; - -/* The title of the Insulin On-Board graph */ -"Active Insulin" = "活性胰岛素"; - -/* The string format describing active insulin. (1: localized insulin value description) */ -"Active Insulin: %@" = "活性胰岛素: %@"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "添加碳水化合物"; - -/* Action sheet title selecting CGM - Title text for button to set up a CGM */ -"Add CGM" = "添加CGM"; - -/* The label of the meal button */ -"Add Meal" = "添加用餐信息"; - -/* Action sheet title selecting Pump - Title text for button to set up a new pump */ -"Add Pump" = "添加泵"; - -/* Title text for button to set up a service */ -"Add Service" = "Add Service"; - -/* The title of the section containing algorithm settings */ -"Algorithm Settings" = "算法设置"; - -/* Confirmation message for deleting a CGM */ -"Are you sure you want to delete this CGM?" = "确定要删除该CGM数据源?"; - -/* Confirmation message for deleting a service */ -"Are you sure you want to delete this service?" = "Are you sure you want to delete this service?"; - -/* Format fragment for a specific time */ -"at %@" = "%@分钟内"; - -/* The message displayed during a device authentication prompt for bolus specification */ -"Authenticate to Bolus %@ Units" = "解锁以输注大剂量 %@ 单位"; - -/* Details for configuration error when basal rate schedule is missing */ -"Basal Rate Schedule" = "基础率表"; - -/* The title of the basal rate profile screen - The title text for the basal rate schedule */ -"Basal Rates" = "基础率"; - -/* The label of the bolus entry button - The notification title for a bolus failure */ -"Bolus" = "大剂量"; - -/* The format string for bolus progress. (1: delivered volume)(2: total volume) */ -"Bolused %1$@ of %2$@" = "大剂量已输注%1$@ of %2$@"; - -/* The format string for bolus in progress showing total volume. (1: total volume) */ -"Bolusing %1$@" = "%1$@大剂量注射中"; - -/* The title of the cancel action in an action sheet */ -"Cancel" = "取消"; - -/* The title of the cell indicating a bolus is being canceled */ -"Canceling Bolus" = "取消大剂量"; - -/* Details for missing data error when carb effects are missing */ -"Carb effects" = "碳水效果"; - -/* The title of the carb ratios schedule screen - The title text for the carb ratio schedule */ -"Carb Ratios" = "碳水化合物吸收率"; - -/* Title of the prediction input effect for carbohydrates */ -"Carbohydrates" = "碳水化合物"; - -/* Description of the prediction input effect for carbohydrates. (1: The glucose unit string) */ -"Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" = "已吸收碳水化合物(克)÷碳水化合物吸收率(克 / 单位)×胰岛素敏感系数 (%1$@/单位)"; - -/* The notification alert describing a low pump battery */ -"Change the pump battery immediately" = "立即更换胰岛素泵电池"; - -/* The notification alert describing an empty pump reservoir */ -"Change the pump reservoir now" = "立即更换储药器"; - -/* Details for configuration error when one or more loop settings are missing */ -"Check settings" = "检查设置"; - -/* Recovery suggestion when reservoir data is missing */ -"Check that your pump is in range" = "请检查你的泵是否在范围内"; - -/* Recovery suggestion when glucose data is missing */ -"Check your CGM data source" = "请检查你的动态血糖数据来源"; - -/* The title text for the looping enabled switch cell */ -"Closed Loop" = "开启闭环"; - -/* The title of the action used to dismiss an error alert */ -"com.loudnate.LoopKit.errorAlertActionTitle" = "OK"; - -/* The title of the configuration section in settings */ -"Configuration" = "配置"; - -/* The error message displayed for configuration errors. (1: configuration error details) */ -"Configuration Error: %1$@" = "配置错误:%1$@"; - -/* Default alert dismissal */ -"Continue" = "继续"; - -/* The title of the continuous glucose monitor section in settings */ -"Continuous Glucose Monitor" = "连续葡萄糖监测"; - -/* The title of the glucose target range schedule screen - The title text for the glucose target range schedule */ -"Correction Range" = "修正范围"; - -/* Message when offering bolus recommendation even though bg is below range. (1: glucose value) */ -"Current glucose of %1$@ is below correction range." = "当前葡萄糖%1$@低于修正范围"; - -/* The title of the cell indicating a generic temporary override is enabled */ -"Custom Override" = "自定义覆盖"; - -/* The title of the button to remove the credentials for a service */ -"Delete Account" = "删除账户"; - -/* Button title to delete CGM */ -"Delete CGM" = "删除CGM数据源"; - -/* Button title to delete a service */ -"Delete Service" = "Delete Service"; - -/* Title text for delivery limits */ -"Delivery Limits" = "输注限制"; - -/* The action hint of the workout mode toggle button when enabled */ -"Disables" = "禁用"; - -/* The action hint of the workout mode toggle button when disabled */ -"Enables" = "启用"; - -/* The placeholder text instructing users to enter a suspend treshold */ -"Enter suspend threshold" = "输入暂停阈值"; - -/* The alert title for an error while canceling a bolus */ -"Error Canceling Bolus" = "无法取消大剂量"; - -/* The alert title for a resume error */ -"Error Resuming" = "恢复输注错误"; - -/* Segmented button title for insulin delivery log event history */ -"Event History" = "历史事件"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %@" = "最终 %@"; - -/* The title of the alert describing a maximum bolus validation error */ -"Exceeds Maximum Bolus" = "超过大剂量最大输注限制"; - -/* Title of insulin model preset */ -"Fiasp" = "Fiasp"; - -/* The format string used to describe a finite workout targets duration */ -"For %1$@" = "对于 %1$@"; - -/* The title of the glucose and prediction graph */ -"Glucose" = "葡萄糖"; - -/* The error message when glucose data is too old to be used. (1: glucose data age in minutes) */ -"Glucose data is %1$@ old" = "葡萄糖%1$@分钟未更新"; - -/* Description of error when glucose data is missing */ -"Glucose data not available" = "血糖数据不可用"; - -/* Title of the prediction input effect for glucose momentum */ -"Glucose Momentum" = "葡萄糖增量预测算法"; - -/* The title of a target alert action specifying an indefinitely long workout targets duration */ -"Indefinitely" = "永久"; - -/* Title of the prediction input effect for insulin */ -"Insulin" = "胰岛素"; - -/* Description of the prediction input effect for insulin */ -"Insulin Absorbed (U) × Insulin Sensitivity (%1$@/U)" = "已吸收胰岛素×胰岛素敏感系数"; - -/* The title of the insulin delivery graph */ -"Insulin Delivery" = "已输注胰岛素"; - -/* Details for missing data error when insulin effects are missing */ -"Insulin effects" = "胰岛素效果"; - -/* Details for configuration error when insulin model is missing - The title text for the insulin model setting row */ -"Insulin Model" = "胰岛素模型"; - -/* The title of the insulin sensitivities schedule screen - The title text for the insulin sensitivity schedule */ -"Insulin Sensitivities" = "胰岛素敏感系数"; - -/* The error message when invalid data was encountered. (1: details of invalid data) */ -"Invalid data: %1$@" = "无效数据: %1$@"; - -/* The title text for the issue report cell */ -"Issue Report" = "反馈问题"; - -/* Glucose HUD accessibility hint */ -"Launches CGM app" = "启动CGM软件"; - -/* The loading message for the diagnostic report screen */ -"Loading..." = "读取中..."; - -/* The notification title for a loop failure */ -"Loop Failure" = "Loop失败"; - -/* The notification alert describing a long-lasting loop failure. The substitution parameter is the time interval since the last loop */ -"Loop has not completed successfully in %@" = "Loop运行异常 %@"; - -/* The error message for missing data. (1: missing data details) */ -"Missing data: %1$@" = "数据缺失: %1$@"; - -/* Details for missing data error when momentum effects are missing */ -"Momentum effects" = "葡萄糖动量效应"; - -/* Sensor state description for the non-valid state */ -"Needs Attention" = "请注意"; - -/* The error message displayed for device connection errors. */ -"No connected devices, or failure during device connection" = "没有连接的设备,或设备连接期间发生故障"; - -/* Notification Setting Status is On */ -"On" = "开"; - -/* The title text for the override presets */ -"Override Presets" = "覆盖预设置"; - -/* The label of the pre-meal mode toggle button */ -"Pre-Meal Targets" = "餐前目标"; - -/* Message when offering bolus recommendation even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number) */ -"Predicted glucose at %1$@ is %2$@." = "预测%1$@时的葡萄糖是%2$@"; - -/* Notice message when recommending bolus when BG is below the suspend threshold. (1: glucose value) */ -"Predicted glucose of %1$@ is below your suspend threshold setting." = "预测葡萄糖%1$@低于您的暂停阈值设置"; - -/* Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference) */ -"Predicted: %1$@\nActual: %2$@ (%3$@)" = "预测值: %1$@\n实际值: %2$@ (%3$@)"; - -/* The title of the pump section in settings */ -"Pump" = "胰岛素泵"; - -/* The notification title for a low pump battery */ -"Pump Battery Low" = "胰岛素泵电量低"; - -/* The error message when pump data is too old to be used. (1: pump data age in minutes) */ -"Pump data is %1$@ old" = "胰岛素泵数据%1$@分钟未更新"; - -/* Details for configuration error when pump manager is missing */ -"Pump Manager" = "泵管理"; - -/* The notification title for an empty pump reservoir */ -"Pump Reservoir Empty" = "储药器药量已用完"; - -/* The notification title for a low pump reservoir */ -"Pump Reservoir Low" = "药量低"; - -/* The title of the cell indicating the pump is suspended */ -"Pump Suspended" = "泵已暂停输注"; - -/* Title of insulin model preset */ -"Rapid-Acting – Adults" = "速效胰岛素 - 成人模型"; - -/* Title of insulin model preset */ -"Rapid-Acting – Children" = "速效胰岛素 - 儿童模型"; - -/* The error message when a recommendation has expired. (1: age of recommendation in minutes) */ -"Recommendation expired: %1$@ old" = "%1$@分钟前推荐剂量已过期"; - -/* The title of the cell displaying a recommended temp basal value */ -"Recommended Basal" = "推荐基础率"; - -/* Accessibility hint describing recommended bolus units */ -"Recommended Bolus: %@ Units" = "推荐大剂量:%@单位"; - -/* Details for missing data error when reservoir data is missing */ -"Reservoir" = "胰岛素容量"; - -/* Title of the prediction input effect for retrospective correction */ -"Retrospective Correction" = "回顾性修正"; - -/* The title of the notification action to retry a bolus command */ -"Retry" = "重试"; - -/* The title of the services section in settings */ -"Services" = "服务"; - -/* The label of the settings button */ -"Settings" = "设置"; - -/* Loop Completion HUD accessibility hint */ -"Shows last loop error" = "显示Loop上一次的错误"; - -/* Format fragment for a start time */ -"since %@" = "自从%@分钟前"; - -/* The format for the description of a temporary override start date */ -"starting at %@" = "开始于 %@"; - -/* The title of the cell indicating a bolus is being sent */ -"Starting Bolus" = "开始输注大剂量"; - -/* The title text in settings */ -"Suspend Threshold" = "暂停阈值"; - -/* The subtitle of the cell displaying an action to resume insulin delivery */ -"Tap to Resume" = "点击恢复输注"; - -/* Subtitle description of Walsh insulin model setting */ -"The legacy model used by Loop, allowing customization of action duration." = "Loop使用的默认模型参数,您可以自行修改胰岛素代谢时间。"; - -/* Body of the alert describing a maximum bolus validation error. (1: The localized max bolus value) */ -"The maximum bolus amount is %@ Units" = "大剂量输注最大限制为%@单位"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Event title displayed when StoredPumpEvent.title is not set -The default description to use when an entry has no dose description -label for when the alert mute end time is unknown -result when time cannot be formatted */ -"Unknown" = "未知"; - -/* The format for the description of a temporary override end date */ -"until %@" = "直到 %@"; - -/* The title of the alert controller used to select a duration for workout targets */ -"Use Workout Glucose Targets" = "使用运动状态的血糖目标"; - -/* Title of insulin model setting */ -"Walsh" = "Walsh"; - -/* Explanation of suspend threshold */ -"When current or forecasted glucose is below the suspend threshold, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." = "当前或预测的葡萄糖低于暂停阈值时,Loop不推荐推注,并且总是建议每小时0单位的临时基础速率。"; - -/* The label of the workout mode toggle button */ -"Workout Targets" = "运动模式血糖目标"; - diff --git a/Loop/zh-Hans.lproj/Main.strings b/Loop/zh-Hans.lproj/Main.strings deleted file mode 100644 index ed66f0b26f..0000000000 --- a/Loop/zh-Hans.lproj/Main.strings +++ /dev/null @@ -1,78 +0,0 @@ -/* Class = "UINavigationItem"; title = "Status"; ObjectID = "3kU-n2-fha"; */ -"3kU-n2-fha.title" = "状态"; - -/* Class = "UILabel"; text = "3.5 U/hour @ 12:12 PM"; ObjectID = "5gz-kZ-iF1"; */ -"5gz-kZ-iF1.text" = "3.5u/小时 @ 12:12 PM"; - -/* Class = "UILabel"; text = "Predicted"; ObjectID = "87H-N1-0vJ"; */ -"87H-N1-0vJ.text" = "预计"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "aCb-Qs-bpu"; */ -"aCb-Qs-bpu.text" = "详细"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "bIL-Ub-qYp"; */ -"bIL-Ub-qYp.text" = "标签"; - -/* Class = "UILabel"; text = "Glucose Change"; ObjectID = "bq4-98-cQU"; */ -"bq4-98-cQU.text" = "葡萄糖变化"; - -/* Class = "UILabel"; text = "g Total"; ObjectID = "d3X-AN-tA5"; */ -"d3X-AN-tA5.text" = "克 总计"; - -/* Class = "UILabel"; text = "Future glucose is predicted by combining the effects of multiple inputs. Use this tool to toggle various inputs to see how they compare to the final prediction."; ObjectID = "D4C-I2-dhA"; */ -"D4C-I2-dhA.text" = "未来血糖根据您输入的多种参数计算,选中不同选项可以观察不同输入对最终血糖预测的影响"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "d6m-qV-wWi"; */ -"d6m-qV-wWi.text" = "标签"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "E41-FN-nkk"; */ -"E41-FN-nkk.text" = "最终血糖为92 毫克/分升"; - -/* Class = "UILabel"; text = "Observed"; ObjectID = "EAn-Ja-S1d"; */ -"EAn-Ja-S1d.text" = "观察值"; - -/* Class = "UITableViewController"; title = "Carbohydrate Effects"; ObjectID = "hZZ-2S-lrd"; */ -"hZZ-2S-lrd.title" = " 碳水化合物的影响"; - -/* Class = "UILabel"; text = "Observed changes in glucose, subtracting changes modeled from insulin delivery, can be used to estimate carbohydrate absorption."; ObjectID = "IxU-As-glo"; */ -"IxU-As-glo.text" = "观察到的葡萄糖变化,减去以胰岛素递送为模型的变化,可用于估计碳水化合物吸收。"; - -/* Class = "UILabel"; text = "Detail"; ObjectID = "J7x-W5-gwo"; */ -"J7x-W5-gwo.text" = "详情"; - -/* Class = "UILabel"; text = "Recommended Basal"; ObjectID = "k3F-Na-7mn"; */ -"k3F-Na-7mn.text" = "推荐基础率"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "Krd-Aa-ret"; */ -"Krd-Aa-ret.text" = "标签"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "OFA-qT-ZAg"; */ -"OFA-qT-ZAg.text" = "标签"; - -/* Class = "UITableViewController"; title = "Predicted Glucose"; ObjectID = "PA3-sP-cWY"; */ -"PA3-sP-cWY.title" = "预测的血糖"; - -/* Class = "UILabel"; text = "eventually 92 mg/dL"; ObjectID = "Rse-x8-amW"; */ -"Rse-x8-amW.text" = "最终血糖为92 毫克/分升"; - -/* Class = "UILabel"; text = "g Active Carbs"; ObjectID = "SQx-au-ZcM"; */ -"SQx-au-ZcM.text" = "活性碳水化合物 克"; - -/* Class = "UILabel"; text = "Glucose"; ObjectID = "tuw-av-A3x"; */ -"tuw-av-A3x.text" = "葡萄糖"; - -/* Class = "UILabel"; text = "Label"; ObjectID = "ufi-Kj-33k"; */ -"ufi-Kj-33k.text" = "标签"; - -/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Vpi-5b-bY5"; */ -"Vpi-5b-bY5.title" = "碳水化合物"; - -/* Class = "UILabel"; text = "0"; ObjectID = "yn7-2M-jZz"; */ -"yn7-2M-jZz.text" = "0"; - -/* Class = "UILabel"; text = "Title"; ObjectID = "zbc-87-wxZ"; */ -"zbc-87-wxZ.text" = "标题"; - -/* Class = "UILabel"; text = "0"; ObjectID = "zvZ-uf-zMX"; */ -"zvZ-uf-zMX.text" = "0"; - diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings new file mode 100644 index 0000000000..6935e0de67 --- /dev/null +++ b/LoopCore/Localizable.xcstrings @@ -0,0 +1,291 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "%1$@ v%2$@" : { + "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ версии %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + } + } + }, + "Automatic Bolus" : { + "comment" : "Title string for automatic bolus dosing strategy", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisk bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatischer Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo automático" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automaattinen bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Automatique" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo automatico" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisk bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisch Bolussen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatyczny bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus automat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Автоматические болюсы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Automatisk bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otomatik Bolus" + } + } + } + }, + "Temp Basal Only" : { + "comment" : "Title string for temp basal only dosing strategy", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun midlertidig basal" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nur temporäre Basalrate" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solo basal temporal" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vain tilapäinen basaali" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal temporaire uniquement" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Solo basale temporanea" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kun midlertidig basal" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alleen Tijdelijk Basaal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tymczasowa dawka podstawowa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Doar bazală temporară" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Только ВБС (без автоболюсов)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Endast temporär basal" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sadece Geçici Bazal" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/LoopCore/ar.lproj/Localizable.strings b/LoopCore/ar.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/LoopCore/ar.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/LoopCore/da.lproj/Localizable.strings b/LoopCore/da.lproj/Localizable.strings deleted file mode 100644 index 27d6531a53..0000000000 --- a/LoopCore/da.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatisk bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Kun midlertidig basal"; - diff --git a/LoopCore/de.lproj/Localizable.strings b/LoopCore/de.lproj/Localizable.strings deleted file mode 100644 index a427cdcfa1..0000000000 --- a/LoopCore/de.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatischer Bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Nur temporäre Basalrate"; - diff --git a/LoopCore/en.lproj/Localizable.strings b/LoopCore/en.lproj/Localizable.strings deleted file mode 100644 index e6696dee56..0000000000 --- a/LoopCore/en.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatic Bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Temp Basal Only"; - diff --git a/LoopCore/es.lproj/Localizable.strings b/LoopCore/es.lproj/Localizable.strings deleted file mode 100644 index 9093a7b504..0000000000 --- a/LoopCore/es.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Bolo automático"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Solo basal temporal"; - diff --git a/LoopCore/fi.lproj/Localizable.strings b/LoopCore/fi.lproj/Localizable.strings deleted file mode 100644 index ec6c550592..0000000000 --- a/LoopCore/fi.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automaattinen bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Vain tilapäinen basaali"; - diff --git a/LoopCore/fr.lproj/Localizable.strings b/LoopCore/fr.lproj/Localizable.strings deleted file mode 100644 index fe045511be..0000000000 --- a/LoopCore/fr.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Bolus Automatique"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Basal temporaire uniquement"; - diff --git a/LoopCore/he.lproj/Localizable.strings b/LoopCore/he.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/LoopCore/he.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/LoopCore/it.lproj/Localizable.strings b/LoopCore/it.lproj/Localizable.strings deleted file mode 100644 index 8a2f211935..0000000000 --- a/LoopCore/it.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Bolo automatico"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Solo basale temporanea"; - diff --git a/LoopCore/ja.lproj/Localizable.strings b/LoopCore/ja.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/LoopCore/ja.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/LoopCore/nb.lproj/Localizable.strings b/LoopCore/nb.lproj/Localizable.strings deleted file mode 100644 index 42420f59bb..0000000000 --- a/LoopCore/nb.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatisk bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Kun midlertidig basal"; - diff --git a/LoopCore/nl.lproj/Localizable.strings b/LoopCore/nl.lproj/Localizable.strings deleted file mode 100644 index 42056d378b..0000000000 --- a/LoopCore/nl.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatisch Bolussen"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Alleen Tijdelijk Basaal"; - diff --git a/LoopCore/pl.lproj/Localizable.strings b/LoopCore/pl.lproj/Localizable.strings deleted file mode 100644 index 21d751b260..0000000000 --- a/LoopCore/pl.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatyczny bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Tymczasowa dawka podstawowa"; - diff --git a/LoopCore/pt-BR.lproj/Localizable.strings b/LoopCore/pt-BR.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/LoopCore/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/LoopCore/ro.lproj/Localizable.strings b/LoopCore/ro.lproj/Localizable.strings deleted file mode 100644 index 0941237859..0000000000 --- a/LoopCore/ro.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Bolus automat"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Doar bazală temporară"; - diff --git a/LoopCore/ru.lproj/Localizable.strings b/LoopCore/ru.lproj/Localizable.strings deleted file mode 100644 index 8f7f4cee35..0000000000 --- a/LoopCore/ru.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ версии %2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Автоматические болюсы"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Только ВБС (без автоболюсов)"; - diff --git a/LoopCore/sk.lproj/Localizable.strings b/LoopCore/sk.lproj/Localizable.strings deleted file mode 100644 index 0039fc241d..0000000000 --- a/LoopCore/sk.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - diff --git a/LoopCore/sv.lproj/Localizable.strings b/LoopCore/sv.lproj/Localizable.strings deleted file mode 100644 index 17a990cf25..0000000000 --- a/LoopCore/sv.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Automatisk bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Endast temporär basal"; - diff --git a/LoopCore/tr.lproj/Localizable.strings b/LoopCore/tr.lproj/Localizable.strings deleted file mode 100644 index bcee9de97d..0000000000 --- a/LoopCore/tr.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Title string for automatic bolus dosing strategy */ -"Automatic Bolus" = "Otomatik Bolus"; - -/* Title string for temp basal only dosing strategy */ -"Temp Basal Only" = "Sadece Geçici Bazal"; - diff --git a/LoopCore/vi.lproj/Localizable.strings b/LoopCore/vi.lproj/Localizable.strings deleted file mode 100644 index f4d2b4576f..0000000000 --- a/LoopCore/vi.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - diff --git a/LoopUI/Base.lproj/InfoPlist.strings b/LoopUI/Base.lproj/InfoPlist.strings deleted file mode 100644 index 5c1fb13406..0000000000 --- a/LoopUI/Base.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "LoopUI"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/Base.lproj/Localizable.strings b/LoopUI/Base.lproj/Localizable.strings deleted file mode 100644 index 0afa563329..0000000000 --- a/LoopUI/Base.lproj/Localizable.strings +++ /dev/null @@ -1,32 +0,0 @@ -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ at %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ units per hour at %2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ ago"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Closed loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop ran %@ ago"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Needs attention"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Open loop"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Unknown"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Waiting for first run"; diff --git a/LoopUI/InfoPlist.xcstrings b/LoopUI/InfoPlist.xcstrings new file mode 100644 index 0000000000..796050aaed --- /dev/null +++ b/LoopUI/InfoPlist.xcstrings @@ -0,0 +1,227 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "comment" : "Bundle display name", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "LoopUI" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "LoopUI" + } + } + } + }, + "CFBundleName" : { + "comment" : "Bundle name", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/LoopUI/Localizable.xcstrings b/LoopUI/Localizable.xcstrings new file mode 100644 index 0000000000..a061eaef1d --- /dev/null +++ b/LoopUI/Localizable.xcstrings @@ -0,0 +1,3573 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." : { + "comment" : "Green closed loop ON message (1: last loop string) (2: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n%2$@ kører med Lukket Loop i ON-position." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n%2$@ wird mit Closed Loop in der Position EIN betrieben." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@\n\n%2$@ está funcionando con Loop Cerrado en posición de prendido." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n %2$@ fonctionne avec la boucle fermée en position MARCHE." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n%2$@ sta funzionando con il Loop chiuso attivato." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@\n\n%2$@ opererer med Closed Loop i ON-posisjon." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n%2$@ werkt met Gesloten Loop in de AAN stand" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n %2$@ działa z zamkniętą pętlą w pozycji WŁĄCZONA." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n %2$@ operează cu bucla închisă în poziția ON." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n%2$@ работает с замкнутым циклом в положении ON." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n%2$@ Kapalı Döngü AÇIK konumdayken çalışıyor." + } + } + } + }, + "\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." : { + "comment" : "Red loop message (1: last loop string) (2: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nTryk på dine CGM- og insulinpumpestatussymboler for at få flere oplysninger. %2$@ fortsætter med at forsøge at fuldføre et loop, men kontrollér, om der er potentielle kommunikationsproblemer med din pumpe og CGM." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nTippe auf die Statussymbole für das CGM oder die Insulinpumpe, um weitere Informationen zu erhalten. %2$@ wird weiterhin versuchen, einen Loop abzuschließen, aber achte auf mögliche Kommunikationsprobleme mit Deiner Pumpe und CGM." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nPulse los iconos de estado del CGM y de la bomba de insulina para obtener más información. %2$@ continuará intentando completarel loop, pero compruebe si existen posibles problemas de comunicación con la bomba y el CGM." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nAppuyer sur les icônes du CGM ou de la pompe à insulie pour plus d'information. %2$@ va continuer de tenter de compléter une boucle, mais vérifiez pour des problèmes de communication potentiels avec votre pompe et le CGM." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ \n \nTocca le icone di stato del CGM e della pompa per ulteriori informazioni. %2$@ continuerà a provare a completare un ciclo, ma controlla eventuali problemi di comunicazione con la pompa e il CGM." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@\n\n Trykk på statusikonene for CGM og insulinpumpe for mer informasjon. %2$@ vil fortsette å prøve å fullføre en sløyfe, men se etter potensielle kommunikasjonsproblemer med pumpen og CGM." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nTik op je CGM- en insulinepompstatuspictogram voor meer informatie. %2$@ blijft proberen een loop te voltooien, maar let op mogelijke communicatieproblemen met je pomp en CGM." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nStuknij ikonę stanu CGM i pompy insulinowej, aby uzyskać więcej informacji. %2$@ będzie nadal próbował ukończyć pętlę, ale uważaj na potencjalne problemy z komunikacją z pompą i CGM." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nAtingeți pictogramele de stare ale CGM și ale pompei de insulină pentru mai multe informații. %2$@ va continua să încerce să finalizeze o buclă, dar verificați eventualele probleme de comunicare cu pompa și CGM-ul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nДля получения дополнительной информации коснитесь значков состояния мониторинга и инсулиновой помпы. %2$@ будет продолжать попытки завершить цикл, но следите за возможными проблемами связи с вашей помпой и мониторингом." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nDaha fazla bilgi için CGM ve insülin pompası durum simgelerine dokunun. %2$@ döngüyü tamamlamaya çalışacak, ancak pompanız ve CGM ile olası iletişim sorunlarını kontrol edin." + } + } + } + }, + "\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." : { + "comment" : "Yellow loop message (1: last loop string) (2: app name)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nTryk på dine CGM- og insulinpumpestatussymboler for at få flere oplysninger. %2$@ fortsætter med at forsøge at fuldføre et loop, men hold øje med potentielle kommunikationsproblemer med din pumpe og CGM." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nTippe auf die Statussymbole für das CGM oder die Insulinpumpe, um weitere Informationen zu erhalten. %2$@ wird weiterhin versuchen, einen Loop abzuschließen, aber achte auf mögliche Kommunikationsprobleme mit Deiner Pumpe und CGM." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nPulse los iconos de estado del CGM y de la bomba de insulina para obtener más información. %2$@ seguirá intentando completar el loop, pero esté atento a posibles problemas de comunicación con la bomba y el CGM." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nAppuyer sur les icônes du CGM ou de la pompe à insuline pour plus d'information. %2$@ va continuer de tenter de compléter une boucle, mais surveillez pour des problèmes de communication potentiels avec votre pompe et le CGM." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ \n \nTocca le icone di stato del CGM e della pompa per ulteriori informazioni. %2$@ continuerà a provare a completare un ciclo, ma fai attenzione a potenziali problemi di comunicazione con la pompa e il CGM." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@\n\nTrykk på statusikonene for CGM og insulinpumpe for mer informasjon. %2$@ vil fortsette å prøve å fullføre en loop, men se etter potensielle kommunikasjonsproblemer med pumpen og CGM." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nTik op je CGM- en insulinepompstatuspictogram voor meer informatie. %2$@ blijft proberen een loop te voltooien, maar let op mogelijke communicatieproblemen met je pomp en CGM." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nStuknij ikony stanu CGM i pompy insulinowej, aby uzyskać więcej informacji. %2$@ będzie nadal próbował ukończyć pętlę, ale uważaj na potencjalne problemy z komunikacją z pompą i CGM." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\n Atingeți pictogramele de stare pentru CGM și pompa de insulină pentru mai multe informații. %2$@ va continua să încerce să finalizeze o buclă, dar urmăriți eventualele probleme de comunicare cu pompa și CGM." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nДля получения дополнительной информации коснитесь значков состояния мониторинга и инсулиновой помпы. %2$@ будет продолжать попытки завершить цикл, но следите за возможными проблемами связи с вашей помпой и мониторингом." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@\n\nDaha fazla bilgi için CGM ve insülin pompası durum simgelerinize dokunun. %2$@ döngüyü tamamlamaya çalışacak, ancak pompanız ve CGM ile olası iletişim sorunlarına dikkat edin." + } + } + } + }, + "\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" : { + "comment" : "Green closed loop OFF message (1: app name)(2: reason for open loop)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ kører med Lukket Loop i OFF-positionen. Din pumpe og CGM fortsætter med at fungere, men appen justerer ikke doseringen automatisk.\n\n%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ arbeitet mit geschlossenem Regelkreis in der AUS-Position. Deine Pumpe und CGM funktionieren weiter, aber die App passt die Dosierung nicht automatisch an.\n\n%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ está funcionando con el circuito cerrado en la posición de apagado. La bomba y el CGM seguirán funcionando, pero la aplicación no ajustará la dosis automáticamente.\n\n%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ fonctionne avec la boucle fermée en position ARRÊT. Votre pompe et votre CGM continueront de fonctionner, mais l'application n'ajustera pas automatiquement le dosage.\n\n%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ è in funzione con il Loop chiuso disattivato. La pompa e il CGM continueranno a funzionare, ma l'app non regolerà automaticamente il dosaggio. \n\n%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ opererer med Lukket Loop i AV-posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk.\n\n%2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ werkt met Gesloten Loop in de UIT stand. Je pomp en CGM blijven werken, maar de app past de dosering niet automatisch aan.\n\n%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ działa z zamkniętą pętlą w pozycji WYŁĄCZONA. Twoja pompa i CGM będą nadal działać, ale aplikacja nie będzie automatycznie dostosowywać dawkowania. \n\n %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ operează cu bucla închisă în poziția OFF. Pompa și CGM vor continua să funcționeze, dar aplicația nu va ajusta automat dozarea. \n\n %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ работает с замкнутым контуром в положении ВЫКЛ. Ваша помпа и мониторинг будут продолжать работать, но приложение не будет автоматически регулировать дозировку.\n\n%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n%1$@ KAPALI konumda ve Kapalı Döngü ile çalışıyor. Pompanız ve CGM çalışmaya devam edecek, ancak uygulama dozajı otomatik olarak ayarlamayacaktır. \n\n%2$@" + } + } + } + }, + "– – –" : { + "comment" : "No glucose value representation (3 dashes for mg/dL)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "%@ ago" : { + "comment" : "Format string describing the time interval since the last completion date. (1: The localized date components", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ago" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ siden" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "vor %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hace %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il y a %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ago" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ fa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 前" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ siden" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ geleden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ temu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ atrás" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ în urmă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ назад" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "pred %@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ sedan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ önce" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ trước đó" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "之前%@" + } + } + } + }, + "%@ U" : { + "comment" : "The format string describing the basal rate.", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ 单位" + } + } + } + }, + "%1$@ ago" : { + "comment" : "Format string describing last completion. (1: time ago", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ siden" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ vor" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hace %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il y a %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ fa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ siden" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ geleden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ temu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ în urmă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ назад" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ önce" + } + } + } + }, + "%1$@ ago at %2$@" : { + "comment" : "Format string describing last completion. (1: time ago, (2: the date", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ siden ved %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor %1$@ am %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hace %1$@ a las %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Il y a %@ à %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ fa a %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ siden kl. %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ geleden om %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ temu o %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acum %1$@ la %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ назад в %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ önce %2$@" + } + } + } + }, + "%1$@ at %2$@" : { + "comment" : "Accessbility format value describing glucose: (1: glucose number)(2: glucose time)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ at %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ved %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ in %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ en %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ klo %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ à %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ at %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ a %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ - %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ kl. %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ om %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ o %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ at %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ la %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ в %2$@ " + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ at %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ lúc %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%2$@ 分钟时为 %1$@" + } + } + } + }, + "%1$@ units per hour at %2$@" : { + "comment" : "Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ units per hour at %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ enheder per time ved %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ Einheiten pro Stunde in %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ unidades por hora en %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ yksikköä tunnissa klo %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ unités par heure à %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ units per hour at %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ unità all'ora a %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U/時 @ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ enheter pr. time kl. %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ eenheden per uur om %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ jednostek na godzinę o %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ unidades por hora em %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ unități pe oră la %2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ ед/час в %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ enheter/h kl. %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "her %2$@ saatte %1$@ ünite" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ units một giờ lúc %2$@" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 每小时的单位 %2$@" + } + } + } + }, + "%1$@ v%2$@" : { + "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ версии %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } + } + } + }, + "%1$@/min" : { + "comment" : "Format string describing glucose units per minute (1: glucose unit string)", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/分" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/минут" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/min" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/dk" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/phút" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@/分钟" + } + } + } + }, + "<1 min ago" : { + "comment" : "Format string describing last completion", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "<1 min siden" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "vor <1 min" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hace <1 minuto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "moins qu'une minute" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "<1 minuto fa" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "< 1 min siden" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "<1 min geleden" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "< 1 minutę temu" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "< 1 min în urmă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "<1 мин. назад" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "< 1 dakika önce" + } + } + } + }, + "Closed loop" : { + "comment" : "Accessibility hint describing completion HUD for a closed loop", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geschlossener Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asa cerrada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suljettu säätö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boucle fermée" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "クローズドループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla zamknięta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ciclo fechado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop automat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Алгоритм замкнутого цикла" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluten loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed loop" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启动闭环" + } + } + } + }, + "Closed Loop OFF" : { + "comment" : "Title of green open loop OFF message", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket loop FRA" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop AUS" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asa cerrada APAGADA" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suljettu säätö pois päältä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boucle Ouverte" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso disattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop AV" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten Loop UIT" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla zamknięta WYŁĄCZONA" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buclă închisă dezactivata" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замкнутый цикл ВЫКЛ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluten Loop är AV" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü KAPALI" + } + } + } + }, + "Closed Loop ON" : { + "comment" : "Title of green closed loop ON message", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket loop TIL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Closed Loop AN" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asa cerrada ACTIVADA" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suljettu säätö päällä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Boucle Fermée" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop chiuso attivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lukket Loop PÅ" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gesloten Loop AAN" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zamknięta pętla WŁĄCZONA" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Buclă închisă activata" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Замкнутый контур ВКЛ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluten Loop är PÅ" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı Döngü AÇIK" + } + } + } + }, + "dB" : { + "comment" : "The short unit display string for decibles", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "дБ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + } + } + }, + "g" : { + "comment" : "The short unit display string for grams", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + } + } + }, + "HIGH" : { + "comment" : "String displayed instead of a glucose value above the CGM range", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "HØJ" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "HOCH" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALTO" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "KORKEA" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "HAUT" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "גבוה" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "HIGH" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "ALTO" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "HØY" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "HOOG" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "WYSOKI" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "HIPER" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ВЫСОКИЙ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "VYSOKÁ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "HÖGT" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "YÜKSEK" + } + } + } + }, + "Last completed loop %1$@." : { + "comment" : "Last loop time completed message (1: last loop time string)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sidst afsluttet Loop %1$@." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop wurde nicht erfolgreich abgeschlossen seit %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Último loop completado %1$@." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dernière boucle terminée %1$@." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultimo ciclo completato %1$@." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sist fullført loop %1$@." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laatst voltooide loop %1$@." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostatnia ukończona pętla %1$@ ." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ultima buclă finalizată %1$@ ." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Последняя завершенная петля %1$@." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Son tamamlanan döngü %1$@ ." + } + } + } + }, + "Loop Failure" : { + "comment" : "Title of red loop message", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فشل في الحلقة المغلقة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop-fejl" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop fehlgeschlagen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falla del Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopin häiriö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Echec de Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Failure" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Malfunzionamento di Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループの不良" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop-feil" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopstoring" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Awaria pętli" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falha no Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eșec Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка в работе петли" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopfel" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü Hatası" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop lỗi" + } + } + } + }, + "Loop ran %@ ago" : { + "comment" : "Accessbility format label describing the time interval since the last completion date. (1: The localized date components)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ran %@ ago" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop kørte for %@ siden" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop lief seit %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop corrió hace %@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Viimeisin säätö %@ sitten" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop a bouclé il y a %@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ran %@ ago" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop eseguito %@ fa" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループは %@ 前に作動しました" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop kjørte %@ siden" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop heeft %@ geleden gedraaid" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pętla była uruchomiona %@ temu" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ciclo executado %@ atrás" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop a rulat acum %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Алгоритм цикла запущен %@ назад" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop kördes för %@ sedan" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü %@ önce çalıştı" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop hoạt động %@ trước đó" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "闭环已停止运行%@" + } + } + } + }, + "Loop Warning" : { + "comment" : "Title of yellow loop message", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop advarsel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Warnung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Advertencia de Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avertissement de Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avviso Loop" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop Varsel" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loopwaarschuwing" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ostrzeżenie o pętli" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avertizare Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Предупреждение о петле" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Döngü Uyarısı" + } + } + } + }, + "LOW" : { + "comment" : "String displayed instead of a glucose value below the CGM range", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "LAV" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "NIEDRIG" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "BAJO" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "MATALA" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "BAS" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נמוך" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "LOW" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "BASSO" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "LAV" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "LAAG" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "NISKI" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "HIPO" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "НИЗКИЙ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "NÍZKA" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "LÅGT" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "DÜŞÜK" + } + } + } + }, + "mg/dL" : { + "comment" : "The short unit display string for milligrams of glucose per decilter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + } + } + }, + "mmol/L" : { + "comment" : "The short unit display string for millimoles of glucose per liter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ммоль/л" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + } + } + }, + "Needs attention" : { + "comment" : "Accessibility label component for glucose HUD describing an invalid state", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Needs attention" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Handling påkrævet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Erfordert Aufmerksamkeit" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necesita atención" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tarvitsee huomiota" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nécessite de l'attention" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Needs attention" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Richiede attenzione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "注意が必要です" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trenger tilsyn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aandacht vereist" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wymaga uwagi" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Precisa de atenção" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necesită atenție" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Требует внимания" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kräver åtgärd" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlgilenmeniz gerekiyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cần chú ý" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请注意" + } + } + } + }, + "Open loop" : { + "comment" : "Accessbility hint describing completion HUD for an open loop", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åben Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Offener Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asa abierta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avoin säätö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop ouverte" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop aperto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オープンループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Åpen Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Otwarta Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ciclo aberto" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop manual" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Алгоритм открытого цикла" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öppen loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Açık döngü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Open loop" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关闭闭环" + } + } + } + }, + "QUANTITY_VALUE_AND_UNIT" : { + "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." : { + "comment" : "Instructions for user to close loop if it is allowed.", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tryk på Indstillinger for at slå Lukket Loop til, hvis du ønsker, at appen skal automatisere dit insulin." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe auf Einstellungen, um Closed Loop einzuschalten, wenn Du möchtest, dass die App Dein Insulin automatisiert." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pulse Ajustes para activar el loop cerrado si desea que la aplicación automatice su administracion de insulina." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appuyez sur Paramètres pour activer la boucle fermée si vous souhaitez que l'application automatise l'administration d'insuline." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tocca \"Impostazioni\" per attivare Loop chiuso se si desidera che l'app automatizzi l'insulina." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trykk på Innstillinger for å slå Closed Loop PÅ om du ønsker at appen skal automatisere insulinet ditt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tik op Instellingen om Gesloten Loop AAN te zetten als je wilt dat de app je insulinetoediening automatiseert." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stuknij Ustawienia, aby włączyć Pętlę zamkniętą, jeśli chcesz, aby aplikacja zautomatyzowała podawanie insuliny." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atingeți Setări pentru a activa bucla închisă dacă doriți ca aplicația să vă automatizeze administrarea de insulină." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите \"Настройки\", чтобы включить \"Замкнутый цикл\", если вы хотите, чтобы приложение автоматизировало подачу инсулина." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulamanın insülininizi otomatikleştirmesini istiyorsanız, Kapalı Döngüyü AÇIK duruma getirmek için Ayarlar'a dokunun." + } + } + } + }, + "U" : { + "comment" : "The short unit display string for international units of insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + } + } + }, + "Unknown" : { + "comment" : "Accessibility value for an unknown value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unknown" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukendt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unbekannt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desconocido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tuntematon" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inconnu" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unknown" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sconosciuto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "不明" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ukjent" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Onbekend" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nieznany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Desconhecido" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Necunoscut" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Неизвестно" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neznáme" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okänd" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bilinmeyen" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Không nhận ra" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未知" + } + } + } + }, + "Waiting for first run" : { + "comment" : "Accessibility label describing completion HUD waiting for first run", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Waiting for first run" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venter på første kørsel" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Warten auf die erste Ausführung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esperando el primer uso" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odotetaan ensimmäistä säätöä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En attente de la première exécution" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Waiting for first run" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In attesa della prima esecuzione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開始待機中" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Venter på første kjøring" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aan het wachten op eerste run" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oczekiwanie na pierwsze uruchomienie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aguardando a primeira execução" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se așteaptă prima rulare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ожидает первичного запуска" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Väntar på första körning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İlk çalıştırma için bekleniyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đang chờ cho lần chạy đầu tiên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "等待第一次运行" + } + } + } + }, + "was at %1$@" : { + "comment" : "Format string describing last completion. (1: the date", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "var %1$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zuletzt abgeschlossen %1$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "estaba en %1$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "était à %1$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "era a %1$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "var på %1$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "was om %1$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "był na %1$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "a fost la %1$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "был в %1$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ de idi" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/LoopUI/ar.lproj/InfoPlist.strings b/LoopUI/ar.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/ar.lproj/Localizable.strings b/LoopUI/ar.lproj/Localizable.strings deleted file mode 100644 index 7da2dd2672..0000000000 --- a/LoopUI/ar.lproj/Localizable.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ ago"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ at %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ units per hour at %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Closed loop"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Title of red loop message */ -"Loop Failure" = "فشل في الحلقة المغلقة"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop ran %@ ago"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Needs attention"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Open loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "وحدة"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Unknown"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Waiting for first run"; - diff --git a/LoopUI/cs.lproj/Localizable.strings b/LoopUI/cs.lproj/Localizable.strings deleted file mode 100644 index cf9c1665a4..0000000000 --- a/LoopUI/cs.lproj/Localizable.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - diff --git a/LoopUI/da.lproj/InfoPlist.strings b/LoopUI/da.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/da.lproj/Localizable.strings b/LoopUI/da.lproj/Localizable.strings deleted file mode 100644 index df0acc7364..0000000000 --- a/LoopUI/da.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ kører med Lukket Loop i ON-position."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nTryk på dine CGM- og insulinpumpestatussymboler for at få flere oplysninger. %2$@ fortsætter med at forsøge at fuldføre et loop, men kontrollér, om der er potentielle kommunikationsproblemer med din pumpe og CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nTryk på dine CGM- og insulinpumpestatussymboler for at få flere oplysninger. %2$@ fortsætter med at forsøge at fuldføre et loop, men hold øje med potentielle kommunikationsproblemer med din pumpe og CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ kører med Lukket Loop i OFF-positionen. Din pumpe og CGM fortsætter med at fungere, men appen justerer ikke doseringen automatisk.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ siden"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ E"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ siden"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ siden ved %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ ved %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ enheder per time ved %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "<1 min siden"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Lukket loop"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Lukket loop FRA"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Lukket loop TIL"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HØJ"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Sidst afsluttet Loop %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Loop-fejl"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop kørte for %@ siden"; - -/* Title of yellow loop message */ -"Loop Warning" = "Loop advarsel"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "LAV"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Handling påkrævet"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Åben Loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Tryk på Indstillinger for at slå Lukket Loop til, hvis du ønsker, at appen skal automatisere dit insulin."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Ukendt"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Venter på første kørsel"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "var %1$@"; - diff --git a/LoopUI/de.lproj/InfoPlist.strings b/LoopUI/de.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/de.lproj/Localizable.strings b/LoopUI/de.lproj/Localizable.strings deleted file mode 100644 index 158e385de6..0000000000 --- a/LoopUI/de.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ wird mit Closed Loop in der Position EIN betrieben."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nTippe auf die Statussymbole für das CGM oder die Insulinpumpe, um weitere Informationen zu erhalten. %2$@ wird weiterhin versuchen, einen Loop abzuschließen, aber achte auf mögliche Kommunikationsprobleme mit Deiner Pumpe und CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nTippe auf die Statussymbole für das CGM oder die Insulinpumpe, um weitere Informationen zu erhalten. %2$@ wird weiterhin versuchen, einen Loop abzuschließen, aber achte auf mögliche Kommunikationsprobleme mit Deiner Pumpe und CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ arbeitet mit geschlossenem Regelkreis in der AUS-Position. Deine Pumpe und CGM funktionieren weiter, aber die App passt die Dosierung nicht automatisch an.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "vor %@"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ IE"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ vor"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "Vor %1$@ am %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ in %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ Einheiten pro Stunde in %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "vor <1 min"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Geschlossener Loop"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Closed Loop AUS"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Closed Loop AN"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HOCH"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Loop wurde nicht erfolgreich abgeschlossen seit %@"; - -/* Title of red loop message */ -"Loop Failure" = "Loop fehlgeschlagen"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop lief seit %@"; - -/* Title of yellow loop message */ -"Loop Warning" = "Loop Warnung"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "NIEDRIG"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Erfordert Aufmerksamkeit"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Offener Loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Tippe auf Einstellungen, um Closed Loop einzuschalten, wenn Du möchtest, dass die App Dein Insulin automatisiert."; - -/* The short unit display string for international units of insulin */ -"U" = "IE"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Unbekannt"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Warten auf die erste Ausführung"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "Zuletzt abgeschlossen %1$@"; - diff --git a/LoopUI/en.lproj/Localizable.strings b/LoopUI/en.lproj/Localizable.strings deleted file mode 100644 index 0afa563329..0000000000 --- a/LoopUI/en.lproj/Localizable.strings +++ /dev/null @@ -1,32 +0,0 @@ -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ at %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ units per hour at %2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ ago"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Closed loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop ran %@ ago"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Needs attention"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Open loop"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Unknown"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Waiting for first run"; diff --git a/LoopUI/es.lproj/InfoPlist.strings b/LoopUI/es.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/es.lproj/Localizable.strings b/LoopUI/es.lproj/Localizable.strings deleted file mode 100644 index 34d3a8c848..0000000000 --- a/LoopUI/es.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "%1$@\n\n%2$@ está funcionando con Loop Cerrado en posición de prendido."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nPulse los iconos de estado del CGM y de la bomba de insulina para obtener más información. %2$@ continuará intentando completarel loop, pero compruebe si existen posibles problemas de comunicación con la bomba y el CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nPulse los iconos de estado del CGM y de la bomba de insulina para obtener más información. %2$@ seguirá intentando completar el loop, pero esté atento a posibles problemas de comunicación con la bomba y el CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ está funcionando con el circuito cerrado en la posición de apagado. La bomba y el CGM seguirán funcionando, pero la aplicación no ajustará la dosis automáticamente.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "Hace %@"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "Hace %@"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "Hace %1$@ a las %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ en %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ unidades por hora en %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "Hace <1 minuto"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Asa cerrada"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Asa cerrada APAGADA"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Asa cerrada ACTIVADA"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "ALTO"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Último loop completado %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Falla del Loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop corrió hace %@"; - -/* Title of yellow loop message */ -"Loop Warning" = "Advertencia de Loop"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "BAJO"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Necesita atención"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Asa abierta"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Pulse Ajustes para activar el loop cerrado si desea que la aplicación automatice su administracion de insulina."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Desconocido"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Esperando el primer uso"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "estaba en %1$@"; - diff --git a/LoopUI/fi.lproj/InfoPlist.strings b/LoopUI/fi.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/fi.lproj/Localizable.strings b/LoopUI/fi.lproj/Localizable.strings deleted file mode 100644 index d50b185502..0000000000 --- a/LoopUI/fi.lproj/Localizable.strings +++ /dev/null @@ -1,72 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ klo %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ yksikköä tunnissa klo %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Suljettu säätö"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Suljettu säätö pois päältä"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Suljettu säätö päällä"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "KORKEA"; - -/* Title of red loop message */ -"Loop Failure" = "Loopin häiriö"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Viimeisin säätö %@ sitten"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "MATALA"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Tarvitsee huomiota"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Avoin säätö"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Tuntematon"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Odotetaan ensimmäistä säätöä"; - diff --git a/LoopUI/fr.lproj/InfoPlist.strings b/LoopUI/fr.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/fr.lproj/Localizable.strings b/LoopUI/fr.lproj/Localizable.strings deleted file mode 100644 index dd5d08fca6..0000000000 --- a/LoopUI/fr.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n %2$@ fonctionne avec la boucle fermée en position MARCHE."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nAppuyer sur les icônes du CGM ou de la pompe à insulie pour plus d'information. %2$@ va continuer de tenter de compléter une boucle, mais vérifiez pour des problèmes de communication potentiels avec votre pompe et le CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nAppuyer sur les icônes du CGM ou de la pompe à insuline pour plus d'information. %2$@ va continuer de tenter de compléter une boucle, mais surveillez pour des problèmes de communication potentiels avec votre pompe et le CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ fonctionne avec la boucle fermée en position ARRÊT. Votre pompe et votre CGM continueront de fonctionner, mais l'application n'ajustera pas automatiquement le dosage.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "Il y a %@"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "Il y a %@"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "Il y a %@ à %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ à %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ unités par heure à %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "moins qu'une minute"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Boucle fermée"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Boucle Ouverte"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Boucle Fermée"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HAUT"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Dernière boucle terminée %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Echec de Loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop a bouclé il y a %@"; - -/* Title of yellow loop message */ -"Loop Warning" = "Avertissement de Loop"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "BAS"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Nécessite de l'attention"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Loop ouverte"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Appuyez sur Paramètres pour activer la boucle fermée si vous souhaitez que l'application automatise l'administration d'insuline."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Inconnu"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "En attente de la première exécution"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "était à %1$@"; - diff --git a/LoopUI/he.lproj/InfoPlist.strings b/LoopUI/he.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/he.lproj/Localizable.strings b/LoopUI/he.lproj/Localizable.strings deleted file mode 100644 index 6177f0dd64..0000000000 --- a/LoopUI/he.lproj/Localizable.strings +++ /dev/null @@ -1,66 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ ago"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ at %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ units per hour at %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Closed loop"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "גבוה"; - -/* Title of red loop message */ -"Loop Failure" = "Loop Failure"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop ran %@ ago"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "נמוך"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Needs attention"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Open loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Unknown"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Waiting for first run"; - diff --git a/LoopUI/hi.lproj/Localizable.strings b/LoopUI/hi.lproj/Localizable.strings deleted file mode 100644 index b30804332b..0000000000 --- a/LoopUI/hi.lproj/Localizable.strings +++ /dev/null @@ -1,9 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HIGH"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "LOW"; - diff --git a/LoopUI/it.lproj/InfoPlist.strings b/LoopUI/it.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/it.lproj/Localizable.strings b/LoopUI/it.lproj/Localizable.strings deleted file mode 100644 index 977d55c51e..0000000000 --- a/LoopUI/it.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ sta funzionando con il Loop chiuso attivato."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@ \n \nTocca le icone di stato del CGM e della pompa per ulteriori informazioni. %2$@ continuerà a provare a completare un ciclo, ma controlla eventuali problemi di comunicazione con la pompa e il CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@ \n \nTocca le icone di stato del CGM e della pompa per ulteriori informazioni. %2$@ continuerà a provare a completare un ciclo, ma fai attenzione a potenziali problemi di comunicazione con la pompa e il CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ è in funzione con il Loop chiuso disattivato. La pompa e il CGM continueranno a funzionare, ma l'app non regolerà automaticamente il dosaggio. \n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ fa"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ fa"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ fa a %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ a %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ unità all'ora a %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "<1 minuto fa"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Loop chiuso"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Loop chiuso disattivato"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Loop chiuso attivato"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "ALTO"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Ultimo ciclo completato %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Malfunzionamento di Loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop eseguito %@ fa"; - -/* Title of yellow loop message */ -"Loop Warning" = "Avviso Loop"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "BASSO"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Richiede attenzione"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Loop aperto"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Tocca \"Impostazioni\" per attivare Loop chiuso se si desidera che l'app automatizzi l'insulina."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Sconosciuto"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "In attesa della prima esecuzione"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "era a %1$@"; - diff --git a/LoopUI/ja.lproj/InfoPlist.strings b/LoopUI/ja.lproj/InfoPlist.strings deleted file mode 100644 index bbcf8f9040..0000000000 --- a/LoopUI/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/ja.lproj/Localizable.strings b/LoopUI/ja.lproj/Localizable.strings deleted file mode 100644 index 6e658af6b2..0000000000 --- a/LoopUI/ja.lproj/Localizable.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ 前"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ - %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ U/時 @ %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/分"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "クローズドループ"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Title of red loop message */ -"Loop Failure" = "ループの不良"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "ループは %@ 前に作動しました"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "注意が必要です"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "オープンループ"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "不明"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "開始待機中"; - diff --git a/LoopUI/nb.lproj/InfoPlist.strings b/LoopUI/nb.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/nb.lproj/Localizable.strings b/LoopUI/nb.lproj/Localizable.strings deleted file mode 100644 index e40fb78eb1..0000000000 --- a/LoopUI/nb.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "%1$@\n\n%2$@ opererer med Closed Loop i ON-posisjon."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "%1$@\n\n Trykk på statusikonene for CGM og insulinpumpe for mer informasjon. %2$@ vil fortsette å prøve å fullføre en sløyfe, men se etter potensielle kommunikasjonsproblemer med pumpen og CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "%1$@\n\nTrykk på statusikonene for CGM og insulinpumpe for mer informasjon. %2$@ vil fortsette å prøve å fullføre en loop, men se etter potensielle kommunikasjonsproblemer med pumpen og CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "%1$@ opererer med Lukket Loop i AV-posisjon. Pumpen og CGM vil fortsette å fungere, men appen vil ikke justere doseringen automatisk.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ siden"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ E"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ siden"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ siden kl. %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ kl. %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ enheter pr. time kl. %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "< 1 min siden"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Lukket Loop"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Lukket Loop AV"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Lukket Loop PÅ"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HØY"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Sist fullført loop %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Loop-feil"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop kjørte %@ siden"; - -/* Title of yellow loop message */ -"Loop Warning" = "Loop Varsel"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "LAV"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Trenger tilsyn"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Åpen Loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Trykk på Innstillinger for å slå Closed Loop PÅ om du ønsker at appen skal automatisere insulinet ditt."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Ukjent"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Venter på første kjøring"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "var på %1$@"; - diff --git a/LoopUI/nl.lproj/InfoPlist.strings b/LoopUI/nl.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/nl.lproj/Localizable.strings b/LoopUI/nl.lproj/Localizable.strings deleted file mode 100644 index c806ba96ac..0000000000 --- a/LoopUI/nl.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ werkt met Gesloten Loop in de AAN stand"; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nTik op je CGM- en insulinepompstatuspictogram voor meer informatie. %2$@ blijft proberen een loop te voltooien, maar let op mogelijke communicatieproblemen met je pomp en CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nTik op je CGM- en insulinepompstatuspictogram voor meer informatie. %2$@ blijft proberen een loop te voltooien, maar let op mogelijke communicatieproblemen met je pomp en CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ werkt met Gesloten Loop in de UIT stand. Je pomp en CGM blijven werken, maar de app past de dosering niet automatisch aan.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ geleden"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ E"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ geleden"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ geleden om %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ om %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ eenheden per uur om %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "<1 min geleden"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Gesloten loop"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Gesloten Loop UIT"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Gesloten Loop AAN"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HOOG"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Laatst voltooide loop %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Loopstoring"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop heeft %@ geleden gedraaid"; - -/* Title of yellow loop message */ -"Loop Warning" = "Loopwaarschuwing"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "LAAG"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Aandacht vereist"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Open loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Tik op Instellingen om Gesloten Loop AAN te zetten als je wilt dat de app je insulinetoediening automatiseert."; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Onbekend"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Aan het wachten op eerste run"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "was om %1$@"; - diff --git a/LoopUI/pl.lproj/InfoPlist.strings b/LoopUI/pl.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/pl.lproj/Localizable.strings b/LoopUI/pl.lproj/Localizable.strings deleted file mode 100644 index e1364eb1ba..0000000000 --- a/LoopUI/pl.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n %2$@ działa z zamkniętą pętlą w pozycji WŁĄCZONA."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nStuknij ikonę stanu CGM i pompy insulinowej, aby uzyskać więcej informacji. %2$@ będzie nadal próbował ukończyć pętlę, ale uważaj na potencjalne problemy z komunikacją z pompą i CGM."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nStuknij ikony stanu CGM i pompy insulinowej, aby uzyskać więcej informacji. %2$@ będzie nadal próbował ukończyć pętlę, ale uważaj na potencjalne problemy z komunikacją z pompą i CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ działa z zamkniętą pętlą w pozycji WYŁĄCZONA. Twoja pompa i CGM będą nadal działać, ale aplikacja nie będzie automatycznie dostosowywać dawkowania. \n\n %2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ temu"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ J"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ temu"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ temu o %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ o %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ jednostek na godzinę o %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "< 1 minutę temu"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Pętla zamknięta"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Pętla zamknięta WYŁĄCZONA"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Zamknięta pętla WŁĄCZONA"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "WYSOKI"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Ostatnia ukończona pętla %1$@ ."; - -/* Title of red loop message */ -"Loop Failure" = "Awaria pętli"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Pętla była uruchomiona %@ temu"; - -/* Title of yellow loop message */ -"Loop Warning" = "Ostrzeżenie o pętli"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "NISKI"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Wymaga uwagi"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Otwarta Loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Stuknij Ustawienia, aby włączyć Pętlę zamkniętą, jeśli chcesz, aby aplikacja zautomatyzowała podawanie insuliny."; - -/* The short unit display string for international units of insulin */ -"U" = "J"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Nieznany"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Oczekiwanie na pierwsze uruchomienie"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "był na %1$@"; - diff --git a/LoopUI/pt-BR.lproj/InfoPlist.strings b/LoopUI/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index bbcf8f9040..0000000000 --- a/LoopUI/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/pt-BR.lproj/Localizable.strings b/LoopUI/pt-BR.lproj/Localizable.strings deleted file mode 100644 index 917f3065f2..0000000000 --- a/LoopUI/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ atrás"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ at %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ unidades por hora em %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Ciclo fechado"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Title of red loop message */ -"Loop Failure" = "Falha no Loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Ciclo executado %@ atrás"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Precisa de atenção"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Ciclo aberto"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Desconhecido"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Aguardando a primeira execução"; - diff --git a/LoopUI/ro.lproj/InfoPlist.strings b/LoopUI/ro.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/ro.lproj/Localizable.strings b/LoopUI/ro.lproj/Localizable.strings deleted file mode 100644 index 640e17f369..0000000000 --- a/LoopUI/ro.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n %2$@ operează cu bucla închisă în poziția ON."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nAtingeți pictogramele de stare ale CGM și ale pompei de insulină pentru mai multe informații. %2$@ va continua să încerce să finalizeze o buclă, dar verificați eventualele probleme de comunicare cu pompa și CGM-ul dvs."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\n Atingeți pictogramele de stare pentru CGM și pompa de insulină pentru mai multe informații. %2$@ va continua să încerce să finalizeze o buclă, dar urmăriți eventualele probleme de comunicare cu pompa și CGM."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ operează cu bucla închisă în poziția OFF. Pompa și CGM vor continua să funcționeze, dar aplicația nu va ajusta automat dozarea. \n\n %2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ în urmă"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%@ în urmă"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "Acum %1$@ la %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ la %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ unități pe oră la %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Format string describing last completion */ -"<1 min ago" = "< 1 min în urmă"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Loop automat"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Buclă închisă dezactivata"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Buclă închisă activata"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HIPER"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Ultima buclă finalizată %1$@ ."; - -/* Title of red loop message */ -"Loop Failure" = "Eșec Loop"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop a rulat acum %@"; - -/* Title of yellow loop message */ -"Loop Warning" = "Avertizare Loop"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "HIPO"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Necesită atenție"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Loop manual"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@%2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Atingeți Setări pentru a activa bucla închisă dacă doriți ca aplicația să vă automatizeze administrarea de insulină."; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Necunoscut"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Se așteaptă prima rulare"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "a fost la %1$@"; - diff --git a/LoopUI/ru.lproj/InfoPlist.strings b/LoopUI/ru.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/ru.lproj/Localizable.strings b/LoopUI/ru.lproj/Localizable.strings deleted file mode 100644 index 0684b33138..0000000000 --- a/LoopUI/ru.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ работает с замкнутым циклом в положении ON."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nДля получения дополнительной информации коснитесь значков состояния мониторинга и инсулиновой помпы. %2$@ будет продолжать попытки завершить цикл, но следите за возможными проблемами связи с вашей помпой и мониторингом."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nДля получения дополнительной информации коснитесь значков состояния мониторинга и инсулиновой помпы. %2$@ будет продолжать попытки завершить цикл, но следите за возможными проблемами связи с вашей помпой и мониторингом."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ работает с замкнутым контуром в положении ВЫКЛ. Ваша помпа и мониторинг будут продолжать работать, но приложение не будет автоматически регулировать дозировку.\n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ назад"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ ед"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ назад"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ назад в %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ в %2$@ "; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ ед/час в %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ версии %2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/минут"; - -/* Format string describing last completion */ -"<1 min ago" = "<1 мин. назад"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Алгоритм замкнутого цикла"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Замкнутый цикл ВЫКЛ"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Замкнутый контур ВКЛ"; - -/* The short unit display string for decibles */ -"dB" = "дБ"; - -/* The short unit display string for grams */ -"g" = "г"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "ВЫСОКИЙ"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Последняя завершенная петля %1$@."; - -/* Title of red loop message */ -"Loop Failure" = "Ошибка в работе петли"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Алгоритм цикла запущен %@ назад"; - -/* Title of yellow loop message */ -"Loop Warning" = "Предупреждение о петле"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "НИЗКИЙ"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "мг/дл"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "ммоль/л"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Требует внимания"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Алгоритм открытого цикла"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Нажмите \"Настройки\", чтобы включить \"Замкнутый цикл\", если вы хотите, чтобы приложение автоматизировало подачу инсулина."; - -/* The short unit display string for international units of insulin */ -"U" = "Ед"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Неизвестно"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Ожидает первичного запуска"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "был в %1$@"; - diff --git a/LoopUI/sk.lproj/Localizable.strings b/LoopUI/sk.lproj/Localizable.strings deleted file mode 100644 index 38e5a37cea..0000000000 --- a/LoopUI/sk.lproj/Localizable.strings +++ /dev/null @@ -1,39 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "pred %@"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ j"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "VYSOKÁ"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "NÍZKA"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "j"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Neznáme"; - diff --git a/LoopUI/sv.lproj/InfoPlist.strings b/LoopUI/sv.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/sv.lproj/Localizable.strings b/LoopUI/sv.lproj/Localizable.strings deleted file mode 100644 index 542e0e6240..0000000000 --- a/LoopUI/sv.lproj/Localizable.strings +++ /dev/null @@ -1,72 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ sedan"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ E"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ at %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ enheter/h kl. %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/min"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Sluten loop"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Sluten Loop är AV"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Sluten Loop är PÅ"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "HÖGT"; - -/* Title of red loop message */ -"Loop Failure" = "Loopfel"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop kördes för %@ sedan"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "LÅGT"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Kräver åtgärd"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Öppen loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Okänd"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Väntar på första körning"; - diff --git a/LoopUI/tr.lproj/InfoPlist.strings b/LoopUI/tr.lproj/InfoPlist.strings deleted file mode 100644 index 13ab538314..0000000000 --- a/LoopUI/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "LoopUI"; - -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/tr.lproj/Localizable.strings b/LoopUI/tr.lproj/Localizable.strings deleted file mode 100644 index 87166dd6bf..0000000000 --- a/LoopUI/tr.lproj/Localizable.strings +++ /dev/null @@ -1,105 +0,0 @@ -/* Green closed loop ON message (1: last loop string) (2: app name) */ -"\n%1$@\n\n%2$@ is operating with Closed Loop in the ON position." = "\n%1$@\n\n%2$@ Kapalı Döngü AÇIK konumdayken çalışıyor."; - -/* Red loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but check for potential communication issues with your pump and CGM." = "\n%1$@\n\nDaha fazla bilgi için CGM ve insülin pompası durum simgelerine dokunun. %2$@ döngüyü tamamlamaya çalışacak, ancak pompanız ve CGM ile olası iletişim sorunlarını kontrol edin."; - -/* Yellow loop message (1: last loop string) (2: app name) */ -"\n%1$@\n\nTap your CGM and insulin pump status icons for more information. %2$@ will continue trying to complete a loop, but watch for potential communication issues with your pump and CGM." = "\n%1$@\n\nDaha fazla bilgi için CGM ve insülin pompası durum simgelerinize dokunun. %2$@ döngüyü tamamlamaya çalışacak, ancak pompanız ve CGM ile olası iletişim sorunlarına dikkat edin."; - -/* Green closed loop OFF message (1: app name)(2: reason for open loop) */ -"\n%1$@ is operating with Closed Loop in the OFF position. Your pump and CGM will continue operating, but the app will not adjust dosing automatically.\n\n%2$@" = "\n%1$@ KAPALI konumda ve Kapalı Döngü ile çalışıyor. Pompanız ve CGM çalışmaya devam edecek, ancak uygulama dozajı otomatik olarak ayarlamayacaktır. \n\n%2$@"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ önce"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ Ü"; - -/* Format string describing last completion. (1: time ago */ -"%1$@ ago" = "%1$@ önce"; - -/* Format string describing last completion. (1: time ago, (2: the date */ -"%1$@ ago at %2$@" = "%1$@ önce %2$@"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "her %2$@ saatte %1$@ ünite"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/dk"; - -/* Format string describing last completion */ -"<1 min ago" = "< 1 dakika önce"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Kapalı Döngü"; - -/* Title of green open loop OFF message */ -"Closed Loop OFF" = "Kapalı Döngü KAPALI"; - -/* Title of green closed loop ON message */ -"Closed Loop ON" = "Kapalı Döngü AÇIK"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "gr"; - -/* String displayed instead of a glucose value above the CGM range */ -"HIGH" = "YÜKSEK"; - -/* Last loop time completed message (1: last loop time string) */ -"Last completed loop %1$@." = "Son tamamlanan döngü %1$@ ."; - -/* Title of red loop message */ -"Loop Failure" = "Döngü Hatası"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Döngü %@ önce çalıştı"; - -/* Title of yellow loop message */ -"Loop Warning" = "Döngü Uyarısı"; - -/* String displayed instead of a glucose value below the CGM range */ -"LOW" = "DÜŞÜK"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "İlgilenmeniz gerekiyor"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Açık döngü"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Instructions for user to close loop if it is allowed. */ -"Tap Settings to toggle Closed Loop ON if you wish for the app to automate your insulin." = "Uygulamanın insülininizi otomatikleştirmesini istiyorsanız, Kapalı Döngüyü AÇIK duruma getirmek için Ayarlar'a dokunun."; - -/* The short unit display string for international units of insulin */ -"U" = "Ü"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Bilinmeyen"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "İlk çalıştırma için bekleniyor"; - -/* Format string describing last completion. (1: the date */ -"was at %1$@" = "%1$@ de idi"; - diff --git a/LoopUI/vi.lproj/InfoPlist.strings b/LoopUI/vi.lproj/InfoPlist.strings deleted file mode 100644 index bbcf8f9040..0000000000 --- a/LoopUI/vi.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle name */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/LoopUI/vi.lproj/Localizable.strings b/LoopUI/vi.lproj/Localizable.strings deleted file mode 100644 index 18ad4de1d1..0000000000 --- a/LoopUI/vi.lproj/Localizable.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "%@ trước đó"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ U"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%1$@ lúc %2$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ units một giờ lúc %2$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/phút"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "Closed loop"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* Title of red loop message */ -"Loop Failure" = "Loop lỗi"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "Loop hoạt động %@ trước đó"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "Cần chú ý"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "Open loop"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* Accessibility value for an unknown value */ -"Unknown" = "Không nhận ra"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "Đang chờ cho lần chạy đầu tiên"; - diff --git a/LoopUI/zh-Hans.lproj/Localizable.strings b/LoopUI/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index 222ee96771..0000000000 --- a/LoopUI/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* Format string describing the time interval since the last completion date. (1: The localized date components */ -"%@ ago" = "之前%@"; - -/* The format string describing the basal rate. */ -"%@ U" = "%@ 单位"; - -/* Accessbility format value describing glucose: (1: glucose number)(2: glucose time) */ -"%1$@ at %2$@" = "%2$@ 分钟时为 %1$@"; - -/* Accessibility format string describing the basal rate. (1: localized basal rate value)(2: last updated time) */ -"%1$@ units per hour at %2$@" = "%1$@ 每小时的单位 %2$@"; - -/* Format string describing glucose units per minute (1: glucose unit string) */ -"%1$@/min" = "%1$@/分钟"; - -/* Accessibility hint describing completion HUD for a closed loop */ -"Closed loop" = "启动闭环"; - -/* Accessbility format label describing the time interval since the last completion date. (1: The localized date components) */ -"Loop ran %@ ago" = "闭环已停止运行%@"; - -/* Accessibility label component for glucose HUD describing an invalid state */ -"Needs attention" = "请注意"; - -/* Accessbility hint describing completion HUD for an open loop */ -"Open loop" = "关闭闭环"; - -/* Accessibility value for an unknown value */ -"Unknown" = "未知"; - -/* Acessibility label describing completion HUD waiting for first run */ -"Waiting for first run" = "等待第一次运行"; - diff --git a/WatchApp Extension/Base.lproj/Localizable.strings b/WatchApp Extension/Base.lproj/Localizable.strings deleted file mode 100644 index 4cbccfb6cc..0000000000 --- a/WatchApp Extension/Base.lproj/Localizable.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* HUD row title for COB */ -"Active Carbs" = "Active Carbs"; - -/* HUD row title for IOB */ -"Active Insulin" = "Active Insulin"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Failed"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Dismiss"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Make sure your iPhone is nearby and try again"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Net Basal Rate"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoir Volume"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Send Failed"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/hr"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Workout"; diff --git a/WatchApp Extension/Base.lproj/ckcomplication.strings b/WatchApp Extension/Base.lproj/ckcomplication.strings deleted file mode 100644 index 0aa78a1ee4..0000000000 --- a/WatchApp Extension/Base.lproj/ckcomplication.strings +++ /dev/null @@ -1,19 +0,0 @@ -/* - ckcomplication.strings - Loop - - Created by Nate Racklyeft on 9/18/16. - Copyright © 2016 Nathan Racklyeft. All rights reserved. -*/ - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; diff --git a/WatchApp Extension/InfoPlist.xcstrings b/WatchApp Extension/InfoPlist.xcstrings new file mode 100644 index 0000000000..c3cd38b7b1 --- /dev/null +++ b/WatchApp Extension/InfoPlist.xcstrings @@ -0,0 +1,408 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "comment" : "Bundle display name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-udvidelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-Erweiterung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "WatchApp Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensión de WatchApp" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-laajennus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extension" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estensione WatchApp" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-utvidelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extensie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extension" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensie WatchApp" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Расширение WatchApp" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extension" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Uzantısı" + } + } + } + }, + "CFBundleName" : { + "comment" : "Bundle name", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-udvidelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-Erweiterung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "WatchApp Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensión de WatchApp" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-laajennus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extension" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estensione WatchApp" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp-utvidelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extensie" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extension" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Extensie WatchApp" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Расширение WatchApp" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Extension" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "WatchApp Uzantısı" + } + } + } + }, + "NSHealthShareUsageDescription" : { + "comment" : "Privacy - Health Share Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mad-data fra Health-databasen bruges til at bestemme blodsukkereffekten. Blodsukkerdata fra Health-databasen bruges til graftegning og momentumberegning. Søvndata fra sundhedsdatabasen bruges til at optimere leveringen af opdateringer om komplikationer af Apple Watch i den tid, du er vågen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mahlzeitendaten aus der Health Datenbank werden verwendet, um die Glukoseeffekte zu bestimmen. Glukosedaten aus der Health Datenbank werden zur grafischen Darstellung und Impulsberechnung verwendet. Schlafdaten aus der Health-Datenbank werden verwendet, um die Bereitstellung von Apple Watch-Komplikationsupdates während Deiner Wachzeit zu optimieren." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Meal data from the Health database is used to determine glucose effects. Glucose data from the Health database is used for graphing and momentum calculation. Sleep data from the Health database is used to optimize delivery of Apple Watch complication updates during the time you are awake." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Los datos de alimentos de la base de datos de Salud se utilizan para determinar los efectos en el nivel de glucosa. Los datos de glucosa de la base de datos de Salud se utilizan para graficar y determinar cálculos de momento. Los datos de Sueño de la base de datos de Salud se utilizan para optimizar la entrega de actualizaciones de las complicaciones del Apple Watch durante el tiempo que está despierto." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terveys-sovelluksen ateriatietoja käytetään glukoosivaikutusten määrittämiseen. Terveys-sovelluksen glukoositietoja käytetään graafeissa ja laskelmissa. Unitietoja käytetään Apple Watch -komplikaation toiminnan optimointiin hereillä olon aikana." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données sur les repas provenant de la base de données Santé sont utilisées pour déterminer les effets du glucose. Les données relatives au glucose provenant de la base de données Santé sont utilisées pour la création de graphiques et le calcul de l'élan. Les données relatives au sommeil provenant de la base de données Santé sont utilisées pour optimiser l'envoi des mises à jour des complications de l'Apple Watch pendant la période où vous êtes éveillé(e)." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati sui pasti del database Salute vengono utilizzati per determinare gli effetti del glucosio. I dati sul glucosio del database Salute vengono utilizzati per la rappresentazione grafica e il calcolo del momento. I dati sul sonno del database Salute vengono utilizzati per ottimizzare la consegna degli aggiornamenti delle complicazioni di Apple Watch durante il periodo di veglia." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Måltidsdata fra helsedatabasen brukes til å bestemme glukoseeffekter. Glukosedata fra helsedatabasen brukes til grafer og momentumberegning. Søvndata fra helsedatabasen brukes til å optimalisere leveringen av Apple Watch-komplikasjonsoppdateringer når du er våken." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maaltijdgegevens uit de database Gezondheid worden gebruikt om glucose-effecenten te bepalen. Glucosegegevens uit de database Gezondheid worden gebruikt voor grafieken en het berekenen van trendlijnen. Slaapgegevens uit de database Gezondheid worden gebruikt om de Apple Watch complicatie bij te werken wanneer je wakker bent." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dane posiłków z bazy danych aplikacji Zdrowie służą do określania wpływu glukozy. Dane dotyczące glukozy z bazy danych aplikacji Zdrowie są wykorzystywane do tworzenia wykresów i wyznaczania trendu. Dane dotyczące snu z bazy danych aplikacji Zdrowie służą do optymalizacji dostarczania aktualizacji komplikacji Apple Watch w czasie, gdy nie śpisz." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datele mesei din baza de date din aplicația Sănătate sunt folosite pentru a determina efectele glicemice. Datele despre glicemie din baza de date Sănătate sunt folosite pentru construirea graficelor și calcularea influențelor glicemice. Datele de somn din baza de date Sănătate sunt folosite pentru a optimiza livrarea de actualizări de date pentru ceasul Apple pe perioada când sunteți treaz." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные о приеме пищи из базы данных Health используются для определения влияния глюкозы. Данные о глюкозе из базы данных Health используются для построения графиков и расчетов. Данные о сне из базы данных Health используются для оптимизации доставки обновлений усложнений Apple Watch во время вашего бодрствования." + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Údaje o jedle z databázy Health sa používajú na určenie účinkov glukózy. Údaje o glukóze z databázy Health sa používajú na vytváranie grafov a výpočet hybnosti. Údaje o spánku z databázy Health sa používajú na optimalizáciu doručovania aktualizácií komplikácií Apple Watch v čase, keď ste hore." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydratdata från Apple Health-databasen används för att avgöra blodsockereffekt. Blodsockervärden från Apple Health-databasen används i diagram och för beräkning av förändring." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sağlık veri tabanından alınan yemek verileri, KŞ etkilerini belirlemek için kullanılır. Sağlık veri tabanından alınan KŞ verileri, grafik ve momentum hesaplaması için kullanılır. Sağlık veritabanındaki uyku verileri, uyanık olduğunuz süre boyunca Apple Watch komplikasyon güncellemelerinin teslimini optimize etmek için kullanılır." + } + } + } + }, + "NSHealthUpdateUsageDescription" : { + "comment" : "Privacy - Health Update Usage Description", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "بيانات كربوهيدرات الوجبة المدخلة للتطبيق و الساعة محفوظة في قواعد بيانات تطبيق صحتي. يتم تخزين بيانات سكر الدم المستردة من نظام متابعة سكر الدم المستمرة بشكل آمن في تطبيق صحتي." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data om kulhydratmåltider, der indtastes i appen og på uret, gemmes i Apples Health-database. Glukosedata, der hentes fra CGM'en, gemmes sikkert i HealthKit." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In der App und auf der Uhr eingegebene Daten zu Kohlenhydratmahlzeiten werden in der HealthKit-Datenbank gespeichert. Vom CGM abgerufene Glukosewerte werden sicher in HealthKit-Datenbank gespeichert." + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Carbohydrate meal data entered in the app and on the watch is stored in the Health database. Glucose data retrieved from the CGM is stored securely in HealthKit." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datos de alimentos ingresados en la aplicación y en el reloj son almacenados en la base de datos de Salud. Los datos de glucosa extraídos del monitor continuo de glucosa se almacenan de manera segura en HealthKit." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sovelluksen ja kellon kautta tallennetut hiilihydraattitiedot tallennetaan Terveys-sovellukseen. Glukoosiseurannan kautta saadut glukoositiedot tallennetaan turvallisesti HealthKitiin." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Les données de glucides des repas entrées dans l'application ou la montre sont enregistrées dans la base de donnée Santé. Les données de taux de glucose provenant du CGM sont enregistrées de manière sécurisée dans HealthKit." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohydrate meal data entered in the app and on the watch is stored in the Health database. Glucose data retrieved from the CGM is stored securely in HealthKit." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "健康データベースからの食事データは、グルコース効果を決定するために使用される。 グルコースデータはグラフ作成と解析のためにHealthKitから検索されます" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydratmåltidsdata som legges inn i appen og på klokken lagres i Helsedatabasen. Glukosedata hentet fra CGM lagres sikkert i HealthKit." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Maaltijdkoolhydraten die worden ingevoerd in de app en met de watch worden opgeslagen in de database Gezondheid. Ontvangen glucosegegevens van de CGM worden veilig opgeslagen in HealthKit." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Posiłek węglowodanowy wprowadzony w aplikacji i na zegarku oraz dane o poziomie cukru pobrane z ciągłego monitoringu glukozy są bezpiecznie przechowywane w aplikacji Zdrowie." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dados de carboidratos inseridos no aplicativo e no Apple Watch são armazenados no banco de dados de saúde. Dados de glicemia recebidos do CGM são armazenados de modo seguro no HealthKit." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrații introduși în aplicație și pe ceas sunt stocați în baza de date Sănătate. Glicemiile din GCM sunt stocate în siguranță în HealthKit." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Данные об углеводах в приложении и на смарт-часах хранятся в базе данных Здоровье. Данные о гликемии полученные от систем непрерывного мониторинга хранятся в безопасности в Комплексе Здоровья HealthKit " + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Údaje o uhlohydrátoch zadané v aplikácii a na hodinkách sú uložené v databáze Health. Údaje o glukóze získané z CGM sú bezpečne uložené v HealthKit." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydratvärden inmatade i appen i klockan lagras i Apple Health-databasen. Glukosvärden mottagna från CGM lagras krypterat i HealthKit." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uygulamaya ve saate girilen öğün karbonhidrat verileri Sağlık veritabanında saklanır. CGM'den alınan KŞ verileri, HealthKit'te güvenli bir şekilde saklanır." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dữ liệu Carbohydrate của bữa ăn được nhập trên phần mềm và trên đồng hồ thông minh sẽ được lưu trữ tại app Health. Các thông số glucose được lấy từ thiết bị theo dõi đường huyết liên tục/CGM sẽ được lưu trữ an toàn trong HealthKit." + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings new file mode 100644 index 0000000000..caab9cdbb9 --- /dev/null +++ b/WatchApp Extension/Localizable.xcstrings @@ -0,0 +1,4312 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "---" : { + "comment" : "No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication)", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "--" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "– – –" : { + "comment" : "No glucose value representation (3 dashes for mg/dL)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "%@" : { + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@" + } + } + } + }, + "%1$@ – %2$@ %3$@" : { + "comment" : "Format string for glucose range (1: lower bound)(2: upper bound)(3: unit)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ - %2$@ %3$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } + } + } + }, + "Active Carbs" : { + "comment" : "HUD row title for COB", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "كارب النشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive KH" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos Activos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. hiilari" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides actifs" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Carbs" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati attivi" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywne węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidratos Ativos" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați activi" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активные углеводы" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívne sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiva kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif Karb." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Carbs còn hoạt động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物" + } + } + } + }, + "Active Insulin" : { + "comment" : "HUD row title for IOB", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "أنسولين نشط" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktives Insulin" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina activa" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Akt. insuliini" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insuline active" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Active Insulin" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina attiva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存インスリン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actieve Insuline" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktywna insulina" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulina Ativa" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Insulină activă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Активный инсулин" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktívny inzulín" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivt insulin" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktif İnsülin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lượng Insulin còn hoạt động" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性胰岛素" + } + } + } + }, + "Add Carb Entry" : { + "comment" : "Title of the user activity for adding carbs", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Carb Entry" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilføj kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kohlenhydrate hinzufügen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar Entrada de Carb" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lisää hiilihydraatteja" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajouter des glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Add Carb Entry" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aggiungi inserimento carboidrati" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "糖質の記入を追加" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Legg til karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kh. Inv. Toevoegen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wprowadź węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adicionar Carb" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adaugă carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Добавить запись углеводов" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zadať sacharidy" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lägg till kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb Girişi Ekle" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khai báo Carb" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加碳水化合物" + } + } + } + }, + "Bolus" : { + "comment" : "Button text to confirm manual bolus on Apple Watch", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + } + } + }, + "Bolus Failed" : { + "comment" : "The title of the alert controller displayed after a bolus attempt fails", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Failed" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus fejlede" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus fehlgeschlagen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo Falló" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus epäonnistui" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Échec du bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Failed" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo fallito" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス不成功" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus mislyktes" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Mislukt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus nie podany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Falhou" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus eșuat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс не состоялся" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus misslyckades" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Başarısız" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus lỗi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量输注失败" + } + } + } + }, + "Bolus Recommendation Updated" : { + "comment" : "Alert title for updated bolus recommendation on Apple Watch", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusanbefaling opdateret" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisierte Bolusempfehlung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recomendación de bolo fue actualicada" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolussuositus päivitetty" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Recommandation de Bolus modifiée" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Raccomandazione bolo aggiornata" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolusanbefaling oppdatert" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aanbevolen Bolus Bijgewerkt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zaktualizowano rekomendowanego Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Actualizare Recomandare bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендации по болюсу обновлены" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det finns en ny bolusrekommendation" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Önerisi Güncellendi" + } + } + } + }, + "Continue" : { + "comment" : "Button text to continue from carb entry to bolus entry on Apple Watch", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokračovat" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsæt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Weiter" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jatka" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continue" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "जारी" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continua" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "次へ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ga Verder" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kontynuuj" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Continuă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Продолжить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pokračovať" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fortsätt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Devam et" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tiếp tục" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "继续" + } + } + } + }, + "dB" : { + "comment" : "The short unit display string for decibles", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "дБ" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "dB" + } + } + } + }, + "Dismiss" : { + "comment" : "The action button title to dismiss an error message", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تجاهل" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Afvis" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schließen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ignorar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ohita" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fermer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dismiss" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "閉じる" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avvis" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sluiten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rozumiem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispensar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Renunță" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Отклонить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Avfärda" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reddet" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Từ bỏ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略" + } + } + } + }, + "g" : { + "comment" : "Short unit label for gram measurement\nThe short unit display string for grams", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "г" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "gr" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "g" + } + } + } + }, + "Make sure your iPhone is nearby and try again" : { + "comment" : "The recovery message displayed after a glucose range override send attempt fails", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تأكد من أن الآيفون الخاص بك قريب ثم حاول مرة أخرى" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sørg for, at din iPhone er i nærheden og prøv igen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stelle sicher, dass Dein iPhone in der Nähe ist, und versuche es erneut." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asegúrate que tu iPhone se encuentre cerca e inténtalo de nuevo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varmista, että iPhone on riittävän lähellä ja yritä uudelleen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Assurez-vous que votre iPhone est à proximité et réessayez" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Make sure your iPhone is nearby and try again" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Assicurati che il tuo iPhone sia vicino e riprova" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone が近くにあることを確認して、再実行してください" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pass på at iPhone er i nærheten, og prøv igjen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zorg dat je iPhone in de buurt is en probeer opnieuw" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upewnij się, że Twój iPhone jest w pobliżu i spróbuj ponownie" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verifique se o iPhone está próximo e tente novamente" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asigurați-vă că iPhone-ul este în apropiere, după care încercați din nou" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Убедитесь, что ваш iPhone поблизости и повторите попытку" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säkerställ att telefonen är inom räckhåll och försök igen" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone'nunuzun yakında olduğundan emin olun ve tekrar deneyin" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đảm bảo rằng iPhone của bạn đang ở gần và thử lại" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请确保苹果手机接近设备并重试" + } + } + } + }, + "Make sure your iPhone is nearby and try again." : { + "comment" : "The recovery message displayed after a bolus attempt fails\nThe recovery message displayed after a potential carb entry send attempt fails", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sørg for, at din iPhone er tæt på og prøv igen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stelle sicher, dass Dein iPhone in der Nähe ist, und versuche es erneut." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asegúrate que tu iPhone se encuentre cerca e inténtalo de nuevo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Varmista, että iPhone on riittävän lähellä ja yritä uudelleen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Assurez-vous que votre iPhone est à proximité et réessayez." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Assicurati che il tuo iPhone sia vicino e riprova." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sjekk at din iPhone er i nærheten og prøv igjen." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zorg dat je iPhone in de buurt is en probeer het opnieuw." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Upewnij się, że Twój iPhone jest w pobliżu i spróbuj ponownie." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Asigurați-vă că iPhone-ul este în apropiere, după care încercați din nou." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Убедитесь, что ваш iPhone находится поблизости, и повторите попытку." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säkerställ att din telefon är inom räckhåll och försök igen." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone'unuzun yakında olduğundan emin olun ve tekrar deneyin." + } + } + } + }, + "mg/dL" : { + "comment" : "The short unit display string for milligrams of glucose per decilter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "мг/дл" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dl" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } + } + } + }, + "mmol/L" : { + "comment" : "The short unit display string for millimoles of glucose per liter", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ммоль/л" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } + } + } + }, + "Net Basal Rate" : { + "comment" : "HUD row title for Net Basal Rate", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "صافي الضخ المستمر" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Netto basalrate" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Netto Basalrate" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tasa basal neta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basaali netto" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Débit basal net" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Net Basal Rate" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Velocità basale netta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "正味基礎インスリン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Netto Basaldose" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Netto Basaalsnelheid" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dawka podstawowa netto" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Taxa Basal Líquida" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rată bazală netă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Чистая базальная доза" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nettobasaldos" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Net Bazal Oran" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tỷ lệ liều basal ròng" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "净基础率" + } + } + } + }, + "Off" : { + "comment" : "Label for off button", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnuto" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Slukket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apagado" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pois päältä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactivé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבוי" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disattivato" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Av" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uit" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyłącz" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oprit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выключено" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vypnuté" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Av" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kapalı" + } + } + } + }, + "OK" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "موافق" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ok" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tamam" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + } + } + }, + "On" : { + "comment" : "Label for on button", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "On" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapnuto" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tændt" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "An" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Encendido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Päällä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "דולק" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Attivato" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オン" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "På" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ligado" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pornit" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включено" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapnuté" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "På" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Açık" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "On" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开" + } + } + } + }, + "Override" : { + "comment" : "The text for the Watch button for enabling a temporary override", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellung" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobreescritura" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilapäisas." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustement" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オーバーライド" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overstyr" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cel Tymczasowy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobrepor" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înlocuire" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz kıl" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chồng lên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "覆盖" + } + } + } + }, + "Please reconfirm the bolus amount." : { + "comment" : "Alert message for updated bolus recommendation on Apple Watch", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekræft venligst bolus igen." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bitte Bolus erneut bestätigen." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Por favor, vuelva a confirmar la cantidad del bolo." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista bolus uudelleen." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Veuillez reconfirmer le bolus." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si prega di riconfermare la quantità di bolo." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vennligst bekreft bolus på nytt." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bevestig bolus opnieuw." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Potwierdź ponownie wielkość bolusa." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vă rugăm să reconfirmați valoarea bolusului." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пожалуйста, подтвердите болюс." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bekräfta bolusmängd." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lütfen bolus miktarını tekrar onaylayın." + } + } + } + }, + "Pre-Meal" : { + "comment" : "Title for sheet to enable/disable pre-meal on watch", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Før-måltid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor dem Essen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Comida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennen ateriaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pré-Repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-pasto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "食前" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przed posiłkiem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pré-Refeição" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preprandial" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "До еды" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Före måltid" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yemek öncesi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trước bữa ăn" + } + } + } + }, + "Preset" : { + "comment" : "The text for the Watch button for enabling a custom preset", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forudindstillet" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellung" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preestablecido" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Esiasetus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Préréglage" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preset" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overstyring" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ustawienie wstępne" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Presetare" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пресеты" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förinställning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "ön ayar" + } + } + } + }, + "QUANTITY_VALUE_AND_UNIT" : { + "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ %2$@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ %2$@" + } + } + } + }, + "Rec: %@ U" : { + "comment" : "The label and value showing the recommended bolus", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التوصية: %@ U" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anb: %@ E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlen: %@ IE" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suosit: %@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rac: %@ U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "推奨: %@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorgesteld: %@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rekomendowane: %@ J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендовано: %@ ед" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rek: %@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önrln: %@ Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khuyến nghị: %@ U" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐: %@ 单位" + } + } + } + }, + "REC: %@ U" : { + "comment" : "Recommended bolus amount label on Apple Watch", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rec: %@ U" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlen: %@ IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: %@ U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SUOSIT: %@ U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC : %@ U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "RAC: %@ U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: %@ E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AANBEVOLEN: %@ E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rek: %@ J" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: %@ U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендовано: %@ ед" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rek: %@ E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen: %@ Ü" + } + } + } + }, + "REC: Calculating..." : { + "comment" : "Indicator that recommended bolus computation is in progress on Apple Watch", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: Beregner..." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Empfohlen: berechne…" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: Calculando..." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "SUOSIT: Lasketaan..." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: Calcul en cours..." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "RAC: Calcolo in corso..." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beregner anbefalt bolus..." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AANBEVOLEN: Berekenen..." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rek: Obliczanie..." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "REC: Se calculează..." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Рекомендовано: Расчет..." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rek: Beräknar..." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Önerilen: Hesaplanıyor..." + } + } + } + }, + "Reservoir Volume" : { + "comment" : "HUD row title for remaining reservoir volume", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حجم الخزان" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoimængde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir Inhalt" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volumen de Reservorio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Säiliön määrä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volume du réservoir" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir Volume" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volume serbatoio" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "リザーバ残量" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoarstørrelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoirinhoud" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Objętość w zbiorniku" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volume do Reservatório" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Volum rezervor" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Остаток резервуара" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoarvolym" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervuar Hacmi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Khối lượng ngăn chứa insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "储药器容量" + } + } + } + }, + "Save" : { + "comment" : "Button text to confirm carb entry without bolusing on Apple Watch", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uložit" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gem" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agregar" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tallenna" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sauvegarder" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Save" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opslaan" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvar" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сохранить" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Uložiť" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spara" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaydet" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lưu" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存" + } + } + } + }, + "Save & Bolus" : { + "comment" : "Button text to confirm carb entry and bolus on Apple Watch", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gem & bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern & Bolus abgeben" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Guardar & administrar bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tallenna & Bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sauvegarder & envoyer Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salva & Bolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lagre & bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Opslaan & Bolussen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zapisz i bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvează & Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сохранить и ввести болюс" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Spara & Bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kaydet & Bolus" + } + } + } + }, + "Send Failed" : { + "comment" : "The title of the alert controller displayed after a glucose range override send attempt fails", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فشل الإرسال" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send mislykkedes" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senden fehlgeschlagen" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envío Falló" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lähetys epäonnistui" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Echec de l'envoi" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send Failed" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Invio fallito" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "送信に失敗" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Send mislyktes" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Versturen Mislukt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wysyłanie nie powiodło się" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Envio falhou" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Transmitere eșuată" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка отправки" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sändning misslyckades" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gönderme Başarısız" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chuyển bị lỗi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "发送失败" + } + } + } + }, + "Turn Digital Crown\nto bolus" : { + "comment" : "Help text for bolus confirmation on Apple Watch", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drej det digitale hjul for bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Drehe die digitale \nKrone für einen Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gire el Digital Crown \npara administrar bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vahvista pyörittämällä Digital Crownia" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tourner la Digital Crown pour envoyer le bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ruota la corona digitale\nper il bolo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Snu \"Digital Crown\" for å gi bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Turn Digital Crown\nom te bolussen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przekręć Digital Crown, aby podać bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rotiți pentru a confirma bolusul" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Покрутите колесико\nдля болюса" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vrid på krona för att ge bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Digital Crown'u bolusa\nçevirin" + } + } + } + }, + "U" : { + "comment" : "The short unit display string for international units of insulin", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "J" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ед" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "j" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ü" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U" + } + } + } + }, + "U/hr" : { + "comment" : "The short unit display string for international units of insulin delivery per hour", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "وحدة لكل ساعة" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "E/t" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IE/h" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/hra" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/h" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/h" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/hr" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/ora" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/時" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "E/t" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "E/uur" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "J/h" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/hr" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/oră" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ед/ч" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "E/timme" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ü/sa" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/giờ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "U/小时" + } + } + } + }, + "Unable to Reach iPhone" : { + "comment" : "The title of the alert controller displayed after a potential carb entry send attempt fails", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone er uden for urets rækkevidde" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dein iPhone kann nicht erreicht werden" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se puede contactar al iPhone" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhoneen ei saada yhteyttä" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible d’atteindre l’iPhone" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile contattare iPhone" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan ikke nå iPhone" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kan iPhone niet bereiken" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nie można połączyć się z iPhone'em" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu se poate conecta la iPhone" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удается подключиться к iPhone" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Det går inte att nå iPhone" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "iPhone'a Ulaşılamıyor" + } + } + } + }, + "Workout" : { + "comment" : "The text for the Watch button for enabling workout mode\nTitle for sheet to enable/disable workout mode on watch", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التمارين" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Motion" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Training" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ejercicio" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Liikunta" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exercice" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Workout" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Allenamento" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "運動" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trening" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Training" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wysiłek fizyczny" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Exercício" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activitate sportivă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Физическая нагрузка" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Träning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Egzersiz" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Workout" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运动" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/WatchApp Extension/ar.lproj/InfoPlist.strings b/WatchApp Extension/ar.lproj/InfoPlist.strings deleted file mode 100644 index f77dc07d1c..0000000000 --- a/WatchApp Extension/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "بيانات كربوهيدرات الوجبة المدخلة للتطبيق و الساعة محفوظة في قواعد بيانات تطبيق صحتي. يتم تخزين بيانات سكر الدم المستردة من نظام متابعة سكر الدم المستمرة بشكل آمن في تطبيق صحتي."; - diff --git a/WatchApp Extension/ar.lproj/Localizable.strings b/WatchApp Extension/ar.lproj/Localizable.strings deleted file mode 100644 index 35141444a8..0000000000 --- a/WatchApp Extension/ar.lproj/Localizable.strings +++ /dev/null @@ -1,79 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "كارب النشط"; - -/* HUD row title for IOB */ -"Active Insulin" = "أنسولين نشط"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Add Carb Entry"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Failed"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "تجاهل"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "تأكد من أن الآيفون الخاص بك قريب ثم حاول مرة أخرى"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "صافي الضخ المستمر"; - -/* No comment provided by engineer. */ -"OK" = "موافق"; - -/* Label for on button */ -"On" = "On"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-Meal"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "التوصية: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "حجم الخزان"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "فشل الإرسال"; - -/* The short unit display string for international units of insulin */ -"U" = "وحدة"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "وحدة لكل ساعة"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "التمارين"; - diff --git a/WatchApp Extension/ar.lproj/ckcomplication.strings b/WatchApp Extension/ar.lproj/ckcomplication.strings deleted file mode 100644 index 8c414cbcf9..0000000000 --- a/WatchApp Extension/ar.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/ckcomplication.xcstrings b/WatchApp Extension/ckcomplication.xcstrings new file mode 100644 index 0000000000..bbde2258f7 --- /dev/null +++ b/WatchApp Extension/ckcomplication.xcstrings @@ -0,0 +1,341 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "3MIN" : { + "comment" : "The complication template example time string", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "3 min" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "3MIN" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "3МИН" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "3DK" + } + } + } + }, + "120" : { + "comment" : "The complication template example glucose string", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "6,5" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "6,7" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "120" + } + } + } + }, + "120↘︎" : { + "comment" : "The complication template example glucose and trend string", + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "6,5↘︎" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "6,7 ↘︎" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "120↘︎" + } + } + } + }, + "UtilitarianLargeFlat" : { + "comment" : "Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time)", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ %@ %@" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ %@ %@" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@%@" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ %@ %@" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ %@" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/WatchApp Extension/cs.lproj/Localizable.strings b/WatchApp Extension/cs.lproj/Localizable.strings deleted file mode 100644 index 74ce94ddb8..0000000000 --- a/WatchApp Extension/cs.lproj/Localizable.strings +++ /dev/null @@ -1,18 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Pokračovat"; - -/* Label for off button */ -"Off" = "Vypnuto"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Zapnuto"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Uložit"; - diff --git a/WatchApp Extension/da.lproj/InfoPlist.strings b/WatchApp Extension/da.lproj/InfoPlist.strings deleted file mode 100644 index 4cfb717ce2..0000000000 --- a/WatchApp Extension/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp-udvidelse"; - -/* Bundle name */ -"CFBundleName" = "WatchApp-udvidelse"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Mad-data fra Health-databasen bruges til at bestemme blodsukkereffekten. Blodsukkerdata fra Health-databasen bruges til graftegning og momentumberegning. Søvndata fra sundhedsdatabasen bruges til at optimere leveringen af opdateringer om komplikationer af Apple Watch i den tid, du er vågen."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Data om kulhydratmåltider, der indtastes i appen og på uret, gemmes i Apples Health-database. Glukosedata, der hentes fra CGM'en, gemmes sikkert i HealthKit."; - diff --git a/WatchApp Extension/da.lproj/Localizable.strings b/WatchApp Extension/da.lproj/Localizable.strings deleted file mode 100644 index 037bdcc6cc..0000000000 --- a/WatchApp Extension/da.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktive kulhydrater"; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktivt insulin"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Tilføj kulhydrater"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus fejlede"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Bolusanbefaling opdateret"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Fortsæt"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Afvis"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Sørg for, at din iPhone er i nærheden og prøv igen"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Sørg for, at din iPhone er tæt på og prøv igen."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Netto basalrate"; - -/* Label for off button */ -"Off" = "Slukket"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Tændt"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Bekræft venligst bolus igen."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Før-måltid"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Forudindstillet"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Anb: %@ E"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "Rec: %@ U"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "REC: Beregner..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoimængde"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Gem"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Gem & bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Send mislykkedes"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Drej det digitale hjul for bolus"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "E/t"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "iPhone er uden for urets rækkevidde"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Motion"; - diff --git a/WatchApp Extension/da.lproj/ckcomplication.strings b/WatchApp Extension/da.lproj/ckcomplication.strings deleted file mode 100644 index 5a6c193ff5..0000000000 --- a/WatchApp Extension/da.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "6,5"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "6,5↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/de.lproj/InfoPlist.strings b/WatchApp Extension/de.lproj/InfoPlist.strings deleted file mode 100644 index abbc3a72a6..0000000000 --- a/WatchApp Extension/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp-Erweiterung"; - -/* Bundle name */ -"CFBundleName" = "WatchApp-Erweiterung"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Mahlzeitendaten aus der Health Datenbank werden verwendet, um die Glukoseeffekte zu bestimmen. Glukosedaten aus der Health Datenbank werden zur grafischen Darstellung und Impulsberechnung verwendet. Schlafdaten aus der Health-Datenbank werden verwendet, um die Bereitstellung von Apple Watch-Komplikationsupdates während Deiner Wachzeit zu optimieren."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "In der App und auf der Uhr eingegebene Daten zu Kohlenhydratmahlzeiten werden in der HealthKit-Datenbank gespeichert. Vom CGM abgerufene Glukosewerte werden sicher in HealthKit-Datenbank gespeichert."; - diff --git a/WatchApp Extension/de.lproj/Localizable.strings b/WatchApp Extension/de.lproj/Localizable.strings deleted file mode 100644 index 80e05d012c..0000000000 --- a/WatchApp Extension/de.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktive KH"; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktives Insulin"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Kohlenhydrate hinzufügen"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus fehlgeschlagen"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Aktualisierte Bolusempfehlung"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Weiter"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Schließen"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Stelle sicher, dass Dein iPhone in der Nähe ist, und versuche es erneut."; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Stelle sicher, dass Dein iPhone in der Nähe ist, und versuche es erneut."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Netto Basalrate"; - -/* Label for off button */ -"Off" = "Aus"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "An"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Voreinstellung"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Bitte Bolus erneut bestätigen."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Vor dem Essen"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Voreinstellung"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Empfohlen: %@ IE"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "Empfohlen: %@ IE"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "Empfohlen: berechne…"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoir Inhalt"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Speichern"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Speichern & Bolus abgeben"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Senden fehlgeschlagen"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Drehe die digitale \nKrone für einen Bolus"; - -/* The short unit display string for international units of insulin */ -"U" = "IE"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "IE/h"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Dein iPhone kann nicht erreicht werden"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Training"; - diff --git a/WatchApp Extension/de.lproj/ckcomplication.strings b/WatchApp Extension/de.lproj/ckcomplication.strings deleted file mode 100644 index 8c414cbcf9..0000000000 --- a/WatchApp Extension/de.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/en.lproj/Localizable.strings b/WatchApp Extension/en.lproj/Localizable.strings deleted file mode 100644 index 4cbccfb6cc..0000000000 --- a/WatchApp Extension/en.lproj/Localizable.strings +++ /dev/null @@ -1,38 +0,0 @@ -/* HUD row title for COB */ -"Active Carbs" = "Active Carbs"; - -/* HUD row title for IOB */ -"Active Insulin" = "Active Insulin"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Failed"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Dismiss"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Make sure your iPhone is nearby and try again"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Net Basal Rate"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoir Volume"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Send Failed"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/hr"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Workout"; diff --git a/WatchApp Extension/es.lproj/InfoPlist.strings b/WatchApp Extension/es.lproj/InfoPlist.strings deleted file mode 100644 index 6b2f80b2af..0000000000 --- a/WatchApp Extension/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Extensión de WatchApp"; - -/* Bundle name */ -"CFBundleName" = "Extensión de WatchApp"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Los datos de alimentos de la base de datos de Salud se utilizan para determinar los efectos en el nivel de glucosa. Los datos de glucosa de la base de datos de Salud se utilizan para graficar y determinar cálculos de momento. Los datos de Sueño de la base de datos de Salud se utilizan para optimizar la entrega de actualizaciones de las complicaciones del Apple Watch durante el tiempo que está despierto."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Datos de alimentos ingresados en la aplicación y en el reloj son almacenados en la base de datos de Salud. Los datos de glucosa extraídos del monitor continuo de glucosa se almacenan de manera segura en HealthKit."; - diff --git a/WatchApp Extension/es.lproj/Localizable.strings b/WatchApp Extension/es.lproj/Localizable.strings deleted file mode 100644 index 124b9af0b0..0000000000 --- a/WatchApp Extension/es.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Carbohidratos Activos"; - -/* HUD row title for IOB */ -"Active Insulin" = "Insulina activa"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Agregar Entrada de Carb"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolo"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolo Falló"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Recomendación de bolo fue actualicada"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Continuar"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Ignorar"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Asegúrate que tu iPhone se encuentre cerca e inténtalo de nuevo"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Asegúrate que tu iPhone se encuentre cerca e inténtalo de nuevo."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Tasa basal neta"; - -/* Label for off button */ -"Off" = "Apagado"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Encendido"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Sobreescritura"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Por favor, vuelva a confirmar la cantidad del bolo."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-Comida"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Preestablecido"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "REC: %@ U"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "REC: Calculando..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Volumen de Reservorio"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Agregar"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Guardar & administrar bolo"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Envío Falló"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Gire el Digital Crown \npara administrar bolo"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/hra"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "No se puede contactar al iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Ejercicio"; - diff --git a/WatchApp Extension/es.lproj/ckcomplication.strings b/WatchApp Extension/es.lproj/ckcomplication.strings deleted file mode 100644 index 5b1e3674cc..0000000000 --- a/WatchApp Extension/es.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@ %@ %@"; - diff --git a/WatchApp Extension/fi.lproj/InfoPlist.strings b/WatchApp Extension/fi.lproj/InfoPlist.strings deleted file mode 100644 index eca830a0a9..0000000000 --- a/WatchApp Extension/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp-laajennus"; - -/* Bundle name */ -"CFBundleName" = "WatchApp-laajennus"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Terveys-sovelluksen ateriatietoja käytetään glukoosivaikutusten määrittämiseen. Terveys-sovelluksen glukoositietoja käytetään graafeissa ja laskelmissa. Unitietoja käytetään Apple Watch -komplikaation toiminnan optimointiin hereillä olon aikana."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Sovelluksen ja kellon kautta tallennetut hiilihydraattitiedot tallennetaan Terveys-sovellukseen. Glukoosiseurannan kautta saadut glukoositiedot tallennetaan turvallisesti HealthKitiin."; - diff --git a/WatchApp Extension/fi.lproj/Localizable.strings b/WatchApp Extension/fi.lproj/Localizable.strings deleted file mode 100644 index d97c7e52d7..0000000000 --- a/WatchApp Extension/fi.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Akt. hiilari"; - -/* HUD row title for IOB */ -"Active Insulin" = "Akt. insuliini"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Lisää hiilihydraatteja"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus epäonnistui"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Bolussuositus päivitetty"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Jatka"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Ohita"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Varmista, että iPhone on riittävän lähellä ja yritä uudelleen"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Varmista, että iPhone on riittävän lähellä ja yritä uudelleen."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Basaali netto"; - -/* Label for off button */ -"Off" = "Pois päältä"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Päällä"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Tilapäisas."; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Vahvista bolus uudelleen."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Ennen ateriaa"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Esiasetus"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Suosit: %@ U"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "SUOSIT: %@ U"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "SUOSIT: Lasketaan..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Säiliön määrä"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Tallenna"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Tallenna & Bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Lähetys epäonnistui"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Vahvista pyörittämällä Digital Crownia"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/h"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "iPhoneen ei saada yhteyttä"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Liikunta"; - diff --git a/WatchApp Extension/fr.lproj/InfoPlist.strings b/WatchApp Extension/fr.lproj/InfoPlist.strings deleted file mode 100644 index 77897147b9..0000000000 --- a/WatchApp Extension/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp Extension"; - -/* Bundle name */ -"CFBundleName" = "WatchApp Extension"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Les données sur les repas provenant de la base de données Santé sont utilisées pour déterminer les effets du glucose. Les données relatives au glucose provenant de la base de données Santé sont utilisées pour la création de graphiques et le calcul de l'élan. Les données relatives au sommeil provenant de la base de données Santé sont utilisées pour optimiser l'envoi des mises à jour des complications de l'Apple Watch pendant la période où vous êtes éveillé(e)."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Les données de glucides des repas entrées dans l'application ou la montre sont enregistrées dans la base de donnée Santé. Les données de taux de glucose provenant du CGM sont enregistrées de manière sécurisée dans HealthKit."; - diff --git a/WatchApp Extension/fr.lproj/Localizable.strings b/WatchApp Extension/fr.lproj/Localizable.strings deleted file mode 100644 index 00d645b8bd..0000000000 --- a/WatchApp Extension/fr.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Glucides actifs"; - -/* HUD row title for IOB */ -"Active Insulin" = "Insuline active"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Ajouter des glucides"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Échec du bolus"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Recommandation de Bolus modifiée"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Continuer"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Fermer"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Assurez-vous que votre iPhone est à proximité et réessayez"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Assurez-vous que votre iPhone est à proximité et réessayez."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Débit basal net"; - -/* Label for off button */ -"Off" = "Désactivé"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Activé"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Ajustement"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Veuillez reconfirmer le bolus."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pré-Repas"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Préréglage"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "REC : %@ U"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "REC: Calcul en cours..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Volume du réservoir"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Sauvegarder"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Sauvegarder & envoyer Bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Echec de l'envoi"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Tourner la Digital Crown pour envoyer le bolus"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/h"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Impossible d’atteindre l’iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Exercice"; - diff --git a/WatchApp Extension/fr.lproj/ckcomplication.strings b/WatchApp Extension/fr.lproj/ckcomplication.strings deleted file mode 100644 index 8c414cbcf9..0000000000 --- a/WatchApp Extension/fr.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/he.lproj/InfoPlist.strings b/WatchApp Extension/he.lproj/InfoPlist.strings deleted file mode 100644 index 7d477d677c..0000000000 --- a/WatchApp Extension/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Carbohydrate meal data entered in the app and on the watch is stored in the Health database. Glucose data retrieved from the CGM is stored securely in HealthKit."; - diff --git a/WatchApp Extension/he.lproj/Localizable.strings b/WatchApp Extension/he.lproj/Localizable.strings deleted file mode 100644 index dd41617793..0000000000 --- a/WatchApp Extension/he.lproj/Localizable.strings +++ /dev/null @@ -1,88 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Active Carbs"; - -/* HUD row title for IOB */ -"Active Insulin" = "Active Insulin"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Add Carb Entry"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Failed"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Continue"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Dismiss"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Make sure your iPhone is nearby and try again"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Net Basal Rate"; - -/* Label for off button */ -"Off" = "כבוי"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "דולק"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-Meal"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoir Volume"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Save"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Send Failed"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/hr"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Workout"; - diff --git a/WatchApp Extension/hi.lproj/Localizable.strings b/WatchApp Extension/hi.lproj/Localizable.strings deleted file mode 100644 index 6af2a264c5..0000000000 --- a/WatchApp Extension/hi.lproj/Localizable.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "जारी"; - diff --git a/WatchApp Extension/it.lproj/InfoPlist.strings b/WatchApp Extension/it.lproj/InfoPlist.strings deleted file mode 100644 index 15dcd10c34..0000000000 --- a/WatchApp Extension/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Estensione WatchApp"; - -/* Bundle name */ -"CFBundleName" = "Estensione WatchApp"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "I dati sui pasti del database Salute vengono utilizzati per determinare gli effetti del glucosio. I dati sul glucosio del database Salute vengono utilizzati per la rappresentazione grafica e il calcolo del momento. I dati sul sonno del database Salute vengono utilizzati per ottimizzare la consegna degli aggiornamenti delle complicazioni di Apple Watch durante il periodo di veglia."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "I dati sui carboidrati dei pasti inseriti nell'app e sull'orologio sono trasferiti nel database di Salute. I dati recuperati dal sensore CGM sono storati nel database di HealthKit."; - diff --git a/WatchApp Extension/it.lproj/Localizable.strings b/WatchApp Extension/it.lproj/Localizable.strings deleted file mode 100644 index c4cb33de06..0000000000 --- a/WatchApp Extension/it.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Carboidrati attivi"; - -/* HUD row title for IOB */ -"Active Insulin" = "Insulina attiva"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Aggiungi inserimento carboidrati"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolo"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolo fallito"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Raccomandazione bolo aggiornata"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Continua"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "OK"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Assicurati che il tuo iPhone sia vicino e riprova"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Assicurati che il tuo iPhone sia vicino e riprova."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Velocità basale netta"; - -/* Label for off button */ -"Off" = "Disattivato"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Attivato"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Si prega di riconfermare la quantità di bolo."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-pasto"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Preset"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rac: %@ U"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "RAC: %@ U"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "RAC: Calcolo in corso..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Volume serbatoio"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Salva"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Salva & Bolo"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Invio fallito"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Ruota la corona digitale\nper il bolo"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/ora"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Impossibile contattare iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Allenamento"; - diff --git a/WatchApp Extension/it.lproj/ckcomplication.strings b/WatchApp Extension/it.lproj/ckcomplication.strings deleted file mode 100644 index 8c414cbcf9..0000000000 --- a/WatchApp Extension/it.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/ja.lproj/InfoPlist.strings b/WatchApp Extension/ja.lproj/InfoPlist.strings deleted file mode 100644 index 697e081734..0000000000 --- a/WatchApp Extension/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "健康データベースからの食事データは、グルコース効果を決定するために使用される。 グルコースデータはグラフ作成と解析のためにHealthKitから検索されます"; - diff --git a/WatchApp Extension/ja.lproj/Localizable.strings b/WatchApp Extension/ja.lproj/Localizable.strings deleted file mode 100644 index f462cab002..0000000000 --- a/WatchApp Extension/ja.lproj/Localizable.strings +++ /dev/null @@ -1,85 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "残存糖質"; - -/* HUD row title for IOB */ -"Active Insulin" = "残存インスリン"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "糖質の記入を追加"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "ボーラス"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "ボーラス不成功"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "次へ"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "閉じる"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "iPhone が近くにあることを確認して、再実行してください"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "正味基礎インスリン"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "オン"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "オーバーライド"; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "食前"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "推奨: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "リザーバ残量"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "保存"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "送信に失敗"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/時"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "運動"; - diff --git a/WatchApp Extension/nb.lproj/InfoPlist.strings b/WatchApp Extension/nb.lproj/InfoPlist.strings deleted file mode 100644 index ef0afdf065..0000000000 --- a/WatchApp Extension/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp-utvidelse"; - -/* Bundle name */ -"CFBundleName" = "WatchApp-utvidelse"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Måltidsdata fra helsedatabasen brukes til å bestemme glukoseeffekter. Glukosedata fra helsedatabasen brukes til grafer og momentumberegning. Søvndata fra helsedatabasen brukes til å optimalisere leveringen av Apple Watch-komplikasjonsoppdateringer når du er våken."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Karbohydratmåltidsdata som legges inn i appen og på klokken lagres i Helsedatabasen. Glukosedata hentet fra CGM lagres sikkert i HealthKit."; - diff --git a/WatchApp Extension/nb.lproj/Localizable.strings b/WatchApp Extension/nb.lproj/Localizable.strings deleted file mode 100644 index fb857579a4..0000000000 --- a/WatchApp Extension/nb.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktive karbohydrater"; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktivt insulin"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Legg til karbohydrater"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus mislyktes"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Bolusanbefaling oppdatert"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Fortsett"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Avvis"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Pass på at iPhone er i nærheten, og prøv igjen"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Sjekk at din iPhone er i nærheten og prøv igjen."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Netto Basaldose"; - -/* Label for off button */ -"Off" = "Av"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "På"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Overstyr"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Vennligst bekreft bolus på nytt."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-måltid"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Overstyring"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ E"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "REC: %@ E"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "Beregner anbefalt bolus..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoarstørrelse"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Lagre"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Lagre & bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Send mislyktes"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Snu \"Digital Crown\" for å gi bolus"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "E/t"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Kan ikke nå iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Trening"; - diff --git a/WatchApp Extension/nb.lproj/ckcomplication.strings b/WatchApp Extension/nb.lproj/ckcomplication.strings deleted file mode 100644 index 5b1e3674cc..0000000000 --- a/WatchApp Extension/nb.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@ %@ %@"; - diff --git a/WatchApp Extension/nl.lproj/InfoPlist.strings b/WatchApp Extension/nl.lproj/InfoPlist.strings deleted file mode 100644 index 7460a2f47b..0000000000 --- a/WatchApp Extension/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp Extensie"; - -/* Bundle name */ -"CFBundleName" = "WatchApp Extensie"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Maaltijdgegevens uit de database Gezondheid worden gebruikt om glucose-effecenten te bepalen. Glucosegegevens uit de database Gezondheid worden gebruikt voor grafieken en het berekenen van trendlijnen. Slaapgegevens uit de database Gezondheid worden gebruikt om de Apple Watch complicatie bij te werken wanneer je wakker bent."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Maaltijdkoolhydraten die worden ingevoerd in de app en met de watch worden opgeslagen in de database Gezondheid. Ontvangen glucosegegevens van de CGM worden veilig opgeslagen in HealthKit."; - diff --git a/WatchApp Extension/nl.lproj/Localizable.strings b/WatchApp Extension/nl.lproj/Localizable.strings deleted file mode 100644 index 192c2c3f99..0000000000 --- a/WatchApp Extension/nl.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "--"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ - %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Actieve Koolhydraten"; - -/* HUD row title for IOB */ -"Active Insulin" = "Actieve Insuline"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Kh. Inv. Toevoegen"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Mislukt"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Aanbevolen Bolus Bijgewerkt"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Ga Verder"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Sluiten"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Zorg dat je iPhone in de buurt is en probeer opnieuw"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Zorg dat je iPhone in de buurt is en probeer het opnieuw."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Netto Basaalsnelheid"; - -/* Label for off button */ -"Off" = "Uit"; - -/* No comment provided by engineer. */ -"OK" = "Ok"; - -/* Label for on button */ -"On" = "Aan"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Bevestig bolus opnieuw."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pre-Meal"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Override"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Voorgesteld: %@ E"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "AANBEVOLEN: %@ E"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "AANBEVOLEN: Berekenen..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoirinhoud"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Opslaan"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Opslaan & Bolussen"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Versturen Mislukt"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Turn Digital Crown\nom te bolussen"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "E/uur"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Kan iPhone niet bereiken"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Training"; - diff --git a/WatchApp Extension/nl.lproj/ckcomplication.strings b/WatchApp Extension/nl.lproj/ckcomplication.strings deleted file mode 100644 index 3cb7cc5e4b..0000000000 --- a/WatchApp Extension/nl.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "6,7"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "6,7 ↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@%@"; - diff --git a/WatchApp Extension/pl.lproj/InfoPlist.strings b/WatchApp Extension/pl.lproj/InfoPlist.strings deleted file mode 100644 index ba5be3fab7..0000000000 --- a/WatchApp Extension/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp Extension"; - -/* Bundle name */ -"CFBundleName" = "WatchApp Extension"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Dane posiłków z bazy danych aplikacji Zdrowie służą do określania wpływu glukozy. Dane dotyczące glukozy z bazy danych aplikacji Zdrowie są wykorzystywane do tworzenia wykresów i wyznaczania trendu. Dane dotyczące snu z bazy danych aplikacji Zdrowie służą do optymalizacji dostarczania aktualizacji komplikacji Apple Watch w czasie, gdy nie śpisz."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Posiłek węglowodanowy wprowadzony w aplikacji i na zegarku oraz dane o poziomie cukru pobrane z ciągłego monitoringu glukozy są bezpiecznie przechowywane w aplikacji Zdrowie."; - diff --git a/WatchApp Extension/pl.lproj/Localizable.strings b/WatchApp Extension/pl.lproj/Localizable.strings deleted file mode 100644 index a7f5d3d080..0000000000 --- a/WatchApp Extension/pl.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktywne węglowodany"; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktywna insulina"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Wprowadź węglowodany"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus nie podany"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Zaktualizowano rekomendowanego Bolus"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Kontynuuj"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Rozumiem"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Upewnij się, że Twój iPhone jest w pobliżu i spróbuj ponownie"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Upewnij się, że Twój iPhone jest w pobliżu i spróbuj ponownie."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Dawka podstawowa netto"; - -/* Label for off button */ -"Off" = "Wyłącz"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Włącz"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Cel Tymczasowy"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Potwierdź ponownie wielkość bolusa."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Przed posiłkiem"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Ustawienie wstępne"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rekomendowane: %@ J"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "Rek: %@ J"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "Rek: Obliczanie..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Objętość w zbiorniku"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Zapisz"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Zapisz i bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Wysyłanie nie powiodło się"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Przekręć Digital Crown, aby podać bolus"; - -/* The short unit display string for international units of insulin */ -"U" = "J"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "J/h"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Nie można połączyć się z iPhone'em"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Wysiłek fizyczny"; - diff --git a/WatchApp Extension/pl.lproj/ckcomplication.strings b/WatchApp Extension/pl.lproj/ckcomplication.strings deleted file mode 100644 index f35448fda5..0000000000 --- a/WatchApp Extension/pl.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3 min"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/pt-BR.lproj/InfoPlist.strings b/WatchApp Extension/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index 4be038b8fb..0000000000 --- a/WatchApp Extension/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Dados de carboidratos inseridos no aplicativo e no Apple Watch são armazenados no banco de dados de saúde. Dados de glicemia recebidos do CGM são armazenados de modo seguro no HealthKit."; - diff --git a/WatchApp Extension/pt-BR.lproj/Localizable.strings b/WatchApp Extension/pt-BR.lproj/Localizable.strings deleted file mode 100644 index 5a3b603c77..0000000000 --- a/WatchApp Extension/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,85 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Carboidratos Ativos"; - -/* HUD row title for IOB */ -"Active Insulin" = "Insulina Ativa"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Adicionar Carb"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Falhou"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Continuar"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Dispensar"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Verifique se o iPhone está próximo e tente novamente"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Taxa Basal Líquida"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Ligado"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Sobrepor"; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Pré-Refeição"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Volume do Reservatório"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Salvar"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Envio falhou"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/hr"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Exercício"; - diff --git a/WatchApp Extension/ro.lproj/InfoPlist.strings b/WatchApp Extension/ro.lproj/InfoPlist.strings deleted file mode 100644 index 8a41547138..0000000000 --- a/WatchApp Extension/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Extensie WatchApp"; - -/* Bundle name */ -"CFBundleName" = "Extensie WatchApp"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Datele mesei din baza de date din aplicația Sănătate sunt folosite pentru a determina efectele glicemice. Datele despre glicemie din baza de date Sănătate sunt folosite pentru construirea graficelor și calcularea influențelor glicemice. Datele de somn din baza de date Sănătate sunt folosite pentru a optimiza livrarea de actualizări de date pentru ceasul Apple pe perioada când sunteți treaz."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Carbohidrații introduși în aplicație și pe ceas sunt stocați în baza de date Sănătate. Glicemiile din GCM sunt stocate în siguranță în HealthKit."; - diff --git a/WatchApp Extension/ro.lproj/Localizable.strings b/WatchApp Extension/ro.lproj/Localizable.strings deleted file mode 100644 index 4110a055a8..0000000000 --- a/WatchApp Extension/ro.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Carbohidrați activi"; - -/* HUD row title for IOB */ -"Active Insulin" = "Insulină activă"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Adaugă carbohidrați"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus eșuat"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Actualizare Recomandare bolus"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Continuă"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Renunță"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Asigurați-vă că iPhone-ul este în apropiere, după care încercați din nou"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Asigurați-vă că iPhone-ul este în apropiere, după care încercați din nou."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Rată bazală netă"; - -/* Label for off button */ -"Off" = "Oprit"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Pornit"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Înlocuire"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Vă rugăm să reconfirmați valoarea bolusului."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Preprandial"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Presetare"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@%2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rec: %@ U"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "REC: %@ U"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "REC: Se calculează..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Volum rezervor"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Salvează"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Salvează & Bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Transmitere eșuată"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Rotiți pentru a confirma bolusul"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/oră"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Nu se poate conecta la iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Activitate sportivă"; - diff --git a/WatchApp Extension/ro.lproj/ckcomplication.strings b/WatchApp Extension/ro.lproj/ckcomplication.strings deleted file mode 100644 index 5b1e3674cc..0000000000 --- a/WatchApp Extension/ro.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3MIN"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@ %@ %@"; - diff --git a/WatchApp Extension/ru.lproj/InfoPlist.strings b/WatchApp Extension/ru.lproj/InfoPlist.strings deleted file mode 100644 index e21f47fdc1..0000000000 --- a/WatchApp Extension/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Расширение WatchApp"; - -/* Bundle name */ -"CFBundleName" = "Расширение WatchApp"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Данные о приеме пищи из базы данных Health используются для определения влияния глюкозы. Данные о глюкозе из базы данных Health используются для построения графиков и расчетов. Данные о сне из базы данных Health используются для оптимизации доставки обновлений усложнений Apple Watch во время вашего бодрствования."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Данные об углеводах в приложении и на смарт-часах хранятся в базе данных Здоровье. Данные о гликемии полученные от систем непрерывного мониторинга хранятся в безопасности в Комплексе Здоровья HealthKit "; - diff --git a/WatchApp Extension/ru.lproj/Localizable.strings b/WatchApp Extension/ru.lproj/Localizable.strings deleted file mode 100644 index 1b54bb09b7..0000000000 --- a/WatchApp Extension/ru.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Активные углеводы"; - -/* HUD row title for IOB */ -"Active Insulin" = "Активный инсулин"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Добавить запись углеводов"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Болюс"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Болюс не состоялся"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Рекомендации по болюсу обновлены"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Продолжить"; - -/* The short unit display string for decibles */ -"dB" = "дБ"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Отклонить"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "г"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Убедитесь, что ваш iPhone поблизости и повторите попытку"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Убедитесь, что ваш iPhone находится поблизости, и повторите попытку."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "мг/дл"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "ммоль/л"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Чистая базальная доза"; - -/* Label for off button */ -"Off" = "Выключено"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Включено"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Включить"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Пожалуйста, подтвердите болюс."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "До еды"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Пресеты"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Рекомендовано: %@ ед"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "Рекомендовано: %@ ед"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "Рекомендовано: Расчет..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Остаток резервуара"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Сохранить"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Сохранить и ввести болюс"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Ошибка отправки"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Покрутите колесико\nдля болюса"; - -/* The short unit display string for international units of insulin */ -"U" = "Ед"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "Ед/ч"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Не удается подключиться к iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Физическая нагрузка"; - diff --git a/WatchApp Extension/ru.lproj/ckcomplication.strings b/WatchApp Extension/ru.lproj/ckcomplication.strings deleted file mode 100644 index 3936ce995a..0000000000 --- a/WatchApp Extension/ru.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3МИН"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/sk.lproj/InfoPlist.strings b/WatchApp Extension/sk.lproj/InfoPlist.strings deleted file mode 100644 index 075d65454b..0000000000 --- a/WatchApp Extension/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Údaje o jedle z databázy Health sa používajú na určenie účinkov glukózy. Údaje o glukóze z databázy Health sa používajú na vytváranie grafov a výpočet hybnosti. Údaje o spánku z databázy Health sa používajú na optimalizáciu doručovania aktualizácií komplikácií Apple Watch v čase, keď ste hore."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Údaje o uhlohydrátoch zadané v aplikácii a na hodinkách sú uložené v databáze Health. Údaje o glukóze získané z CGM sú bezpečne uložené v HealthKit."; - diff --git a/WatchApp Extension/sk.lproj/Localizable.strings b/WatchApp Extension/sk.lproj/Localizable.strings deleted file mode 100644 index f74275e347..0000000000 --- a/WatchApp Extension/sk.lproj/Localizable.strings +++ /dev/null @@ -1,52 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktívne sacharidy"; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktívny inzulín"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Zadať sacharidy"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Pokračovať"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Label for off button */ -"Off" = "Vypnuté"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "Zapnuté"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Uložiť"; - -/* The short unit display string for international units of insulin */ -"U" = "j"; - diff --git a/WatchApp Extension/sv.lproj/InfoPlist.strings b/WatchApp Extension/sv.lproj/InfoPlist.strings deleted file mode 100644 index 4bd26fa9db..0000000000 --- a/WatchApp Extension/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp Extension"; - -/* Bundle name */ -"CFBundleName" = "WatchApp Extension"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Kolhydratdata från Apple Health-databasen används för att avgöra blodsockereffekt. Blodsockervärden från Apple Health-databasen används i diagram och för beräkning av förändring."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Kolhydratvärden inmatade i appen i klockan lagras i Apple Health-databasen. Glukosvärden mottagna från CGM lagras krypterat i HealthKit."; - diff --git a/WatchApp Extension/sv.lproj/Localizable.strings b/WatchApp Extension/sv.lproj/Localizable.strings deleted file mode 100644 index 76d880ed56..0000000000 --- a/WatchApp Extension/sv.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktiva kolhydrater"; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktivt insulin"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Lägg till kolhydrater"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus misslyckades"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Det finns en ny bolusrekommendation"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Fortsätt"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Avfärda"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Säkerställ att telefonen är inom räckhåll och försök igen"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "Säkerställ att din telefon är inom räckhåll och försök igen."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Nettobasaldos"; - -/* Label for off button */ -"Off" = "Av"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "På"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Override"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Bekräfta bolusmängd."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Före måltid"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "Förinställning"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Rek: %@ E"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "Rek: %@ E"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "Rek: Beräknar..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Reservoarvolym"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Spara"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Spara & Bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Sändning misslyckades"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Vrid på krona för att ge bolus"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "E/timme"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "Det går inte att nå iPhone"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Träning"; - diff --git a/WatchApp Extension/tr.lproj/InfoPlist.strings b/WatchApp Extension/tr.lproj/InfoPlist.strings deleted file mode 100644 index 78bab3d446..0000000000 --- a/WatchApp Extension/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "WatchApp Uzantısı"; - -/* Bundle name */ -"CFBundleName" = "WatchApp Uzantısı"; - -/* Privacy - Health Share Usage Description */ -"NSHealthShareUsageDescription" = "Sağlık veri tabanından alınan yemek verileri, KŞ etkilerini belirlemek için kullanılır. Sağlık veri tabanından alınan KŞ verileri, grafik ve momentum hesaplaması için kullanılır. Sağlık veritabanındaki uyku verileri, uyanık olduğunuz süre boyunca Apple Watch komplikasyon güncellemelerinin teslimini optimize etmek için kullanılır."; - -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Uygulamaya ve saate girilen öğün karbonhidrat verileri Sağlık veritabanında saklanır. CGM'den alınan KŞ verileri, HealthKit'te güvenli bir şekilde saklanır."; - diff --git a/WatchApp Extension/tr.lproj/Localizable.strings b/WatchApp Extension/tr.lproj/Localizable.strings deleted file mode 100644 index 2637ba19f2..0000000000 --- a/WatchApp Extension/tr.lproj/Localizable.strings +++ /dev/null @@ -1,122 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL; no spaces as this will get truncated in the watch complication) */ -"---" = "---"; - -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "– – –"; - -/* No comment provided by engineer. */ -"%@" = "%@"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Aktif Karb."; - -/* HUD row title for IOB */ -"Active Insulin" = "Aktif İnsülin"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Karb Girişi Ekle"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus Başarısız"; - -/* Alert title for updated bolus recommendation on Apple Watch */ -"Bolus Recommendation Updated" = "Bolus Önerisi Güncellendi"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Devam et"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Reddet"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "gr"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "iPhone'nunuzun yakında olduğundan emin olun ve tekrar deneyin"; - -/* The recovery message displayed after a bolus attempt fails -The recovery message displayed after a potential carb entry send attempt fails */ -"Make sure your iPhone is nearby and try again." = "iPhone'unuzun yakında olduğundan emin olun ve tekrar deneyin."; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Net Bazal Oran"; - -/* Label for off button */ -"Off" = "Kapalı"; - -/* No comment provided by engineer. */ -"OK" = "Tamam"; - -/* Label for on button */ -"On" = "Açık"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Geçersiz kıl"; - -/* Alert message for updated bolus recommendation on Apple Watch */ -"Please reconfirm the bolus amount." = "Lütfen bolus miktarını tekrar onaylayın."; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Yemek öncesi"; - -/* The text for the Watch button for enabling a custom preset */ -"Preset" = "ön ayar"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Önrln: %@ Ü"; - -/* Recommended bolus amount label on Apple Watch */ -"REC: %@ U" = "Önerilen: %@ Ü"; - -/* Indicator that recommended bolus computation is in progress on Apple Watch */ -"REC: Calculating..." = "Önerilen: Hesaplanıyor..."; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Rezervuar Hacmi"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Kaydet"; - -/* Button text to confirm carb entry and bolus on Apple Watch */ -"Save & Bolus" = "Kaydet & Bolus"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Gönderme Başarısız"; - -/* Help text for bolus confirmation on Apple Watch */ -"Turn Digital Crown\nto bolus" = "Digital Crown'u bolusa\nçevirin"; - -/* The short unit display string for international units of insulin */ -"U" = "Ü"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "Ü/sa"; - -/* The title of the alert controller displayed after a potential carb entry send attempt fails */ -"Unable to Reach iPhone" = "iPhone'a Ulaşılamıyor"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Egzersiz"; - diff --git a/WatchApp Extension/tr.lproj/ckcomplication.strings b/WatchApp Extension/tr.lproj/ckcomplication.strings deleted file mode 100644 index 15532b5b45..0000000000 --- a/WatchApp Extension/tr.lproj/ckcomplication.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* The complication template example time string */ -"3MIN" = "3DK"; - -/* The complication template example glucose string */ -"120" = "120"; - -/* The complication template example glucose and trend string */ -"120↘︎" = "120↘︎"; - -/* Utilitarian large flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */ -"UtilitarianLargeFlat" = "%@%@ %@"; - diff --git a/WatchApp Extension/vi.lproj/InfoPlist.strings b/WatchApp Extension/vi.lproj/InfoPlist.strings deleted file mode 100644 index 20fe32df1b..0000000000 --- a/WatchApp Extension/vi.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Privacy - Health Update Usage Description */ -"NSHealthUpdateUsageDescription" = "Dữ liệu Carbohydrate của bữa ăn được nhập trên phần mềm và trên đồng hồ thông minh sẽ được lưu trữ tại app Health. Các thông số glucose được lấy từ thiết bị theo dõi đường huyết liên tục/CGM sẽ được lưu trữ an toàn trong HealthKit."; - diff --git a/WatchApp Extension/vi.lproj/Localizable.strings b/WatchApp Extension/vi.lproj/Localizable.strings deleted file mode 100644 index 0e1f6e5cc8..0000000000 --- a/WatchApp Extension/vi.lproj/Localizable.strings +++ /dev/null @@ -1,85 +0,0 @@ -/* No glucose value representation (3 dashes for mg/dL) */ -"– – –" = "---"; - -/* Format string for glucose range (1: lower bound)(2: upper bound)(3: unit) */ -"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@"; - -/* HUD row title for COB */ -"Active Carbs" = "Lượng Carbs còn hoạt động"; - -/* HUD row title for IOB */ -"Active Insulin" = "Lượng Insulin còn hoạt động"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "Khai báo Carb"; - -/* Button text to confirm manual bolus on Apple Watch */ -"Bolus" = "Bolus"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "Bolus lỗi"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "Tiếp tục"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "Từ bỏ"; - -/* Short unit label for gram measurement -The short unit display string for grams */ -"g" = "g"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "Đảm bảo rằng iPhone của bạn đang ở gần và thử lại"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "Tỷ lệ liều basal ròng"; - -/* No comment provided by engineer. */ -"OK" = "OK"; - -/* Label for on button */ -"On" = "On"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "Chồng lên"; - -/* Title for sheet to enable/disable pre-meal on watch */ -"Pre-Meal" = "Trước bữa ăn"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "Khuyến nghị: %@ U"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "Khối lượng ngăn chứa insulin"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "Lưu"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "Chuyển bị lỗi"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/giờ"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "Workout"; - diff --git a/WatchApp Extension/zh-Hans.lproj/Localizable.strings b/WatchApp Extension/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index e03baf967a..0000000000 --- a/WatchApp Extension/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,51 +0,0 @@ -/* HUD row title for COB */ -"Active Carbs" = "活性碳水化合物"; - -/* HUD row title for IOB */ -"Active Insulin" = "活性胰岛素"; - -/* Title of the user activity for adding carbs */ -"Add Carb Entry" = "添加碳水化合物"; - -/* The title of the alert controller displayed after a bolus attempt fails */ -"Bolus Failed" = "大剂量输注失败"; - -/* Button text to continue from carb entry to bolus entry on Apple Watch */ -"Continue" = "继续"; - -/* The action button title to dismiss an error message */ -"Dismiss" = "忽略"; - -/* The recovery message displayed after a bolus attempt fails - The recovery message displayed after a carb entry send attempt fails - The recovery message displayed after a glucose range override send attempt fails */ -"Make sure your iPhone is nearby and try again" = "请确保苹果手机接近设备并重试"; - -/* HUD row title for Net Basal Rate */ -"Net Basal Rate" = "净基础率"; - -/* Label for on button */ -"On" = "开"; - -/* The text for the Watch button for enabling a temporary override */ -"Override" = "覆盖"; - -/* The label and value showing the recommended bolus */ -"Rec: %@ U" = "推荐: %@ 单位"; - -/* HUD row title for remaining reservoir volume */ -"Reservoir Volume" = "储药器容量"; - -/* Button text to confirm carb entry without bolusing on Apple Watch */ -"Save" = "保存"; - -/* The title of the alert controller displayed after a carb entry send attempt fails - The title of the alert controller displayed after a glucose range override send attempt fails */ -"Send Failed" = "发送失败"; - -/* The short unit display string for international units of insulin delivery per hour */ -"U/hr" = "U/小时"; - -/* The text for the Watch button for enabling workout mode */ -"Workout" = "运动"; - diff --git a/WatchApp/Base.lproj/InfoPlist.strings b/WatchApp/Base.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/Base.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/InfoPlist.xcstrings b/WatchApp/InfoPlist.xcstrings new file mode 100644 index 0000000000..561b6367e8 --- /dev/null +++ b/WatchApp/InfoPlist.xcstrings @@ -0,0 +1,250 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CFBundleDisplayName" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + } + } + }, + "CFBundleName" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "$(PRODUCT_NAME)" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/WatchApp/ar.lproj/InfoPlist.strings b/WatchApp/ar.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/ar.lproj/Interface.strings b/WatchApp/ar.lproj/Interface.strings deleted file mode 100644 index 24928b657b..0000000000 --- a/WatchApp/ar.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "TOTAL CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-Meal"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbs"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus Failed"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Running"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITLE"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Label"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "ACTIVE CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Label"; - diff --git a/WatchApp/cs.lproj/Interface.strings b/WatchApp/cs.lproj/Interface.strings deleted file mode 100644 index 3a926b93b6..0000000000 --- a/WatchApp/cs.lproj/Interface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - diff --git a/WatchApp/da.lproj/InfoPlist.strings b/WatchApp/da.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/da.lproj/Interface.strings b/WatchApp/da.lproj/Interface.strings deleted file mode 100644 index 751049d309..0000000000 --- a/WatchApp/da.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "TOTALE KULHYDRATER"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Før-måltid"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Kulhydrater"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus fejlede"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Kører"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITEL"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etiket"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKTIVE KULHYDRATER"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etiket"; - diff --git a/WatchApp/de.lproj/InfoPlist.strings b/WatchApp/de.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/de.lproj/Interface.strings b/WatchApp/de.lproj/Interface.strings deleted file mode 100644 index e2bd9d8688..0000000000 --- a/WatchApp/de.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "GESAMT KH"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Vor dem Essen"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "KH"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus fehlgeschlagen"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Laufen"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITEL"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Voreinstellung"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Beschriftung"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKTIVE KH"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Beschriftung"; - diff --git a/WatchApp/en.lproj/Interface.strings b/WatchApp/en.lproj/Interface.strings deleted file mode 100644 index de919648ad..0000000000 --- a/WatchApp/en.lproj/Interface.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - diff --git a/WatchApp/es.lproj/InfoPlist.strings b/WatchApp/es.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/es.lproj/Interface.strings b/WatchApp/es.lproj/Interface.strings deleted file mode 100644 index 5611ae9b58..0000000000 --- a/WatchApp/es.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-Comida"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbohidratos"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolo Falló"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Correr"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TÍTULO"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Sobreescritura"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolo"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etiqueta"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "CARBS ACTIVOS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etiqueta"; - diff --git a/WatchApp/fi.lproj/InfoPlist.strings b/WatchApp/fi.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/fi.lproj/Interface.strings b/WatchApp/fi.lproj/Interface.strings deleted file mode 100644 index 5fb2f12a56..0000000000 --- a/WatchApp/fi.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "HIILARI YHT."; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Ennen ateriaa"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Hiilihydraatit"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus epäonnistui"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Juoksu"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "OTSIKKO"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Tilapäisas."; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Nimiö"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKT. HIILARI"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Nimiö"; - diff --git a/WatchApp/fr.lproj/InfoPlist.strings b/WatchApp/fr.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/fr.lproj/Interface.strings b/WatchApp/fr.lproj/Interface.strings deleted file mode 100644 index b05a7fb86a..0000000000 --- a/WatchApp/fr.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "GLUCIDES TOTAUX"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pré-Repas"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Glucides"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Échec du bolus"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "En marche"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITLE"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Ajustement"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Label"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "GLUCIDES ACTIFS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Label"; - diff --git a/WatchApp/he.lproj/InfoPlist.strings b/WatchApp/he.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/he.lproj/Interface.strings b/WatchApp/he.lproj/Interface.strings deleted file mode 100644 index cc20662d50..0000000000 --- a/WatchApp/he.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "-"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "TOTAL CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-Meal"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbs"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "-"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus Failed"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Running"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "-"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITLE"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Label"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "ACTIVE CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Label"; - diff --git a/WatchApp/hi.lproj/Interface.strings b/WatchApp/hi.lproj/Interface.strings deleted file mode 100644 index 3a926b93b6..0000000000 --- a/WatchApp/hi.lproj/Interface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - diff --git a/WatchApp/it.lproj/InfoPlist.strings b/WatchApp/it.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/it.lproj/Interface.strings b/WatchApp/it.lproj/Interface.strings deleted file mode 100644 index daa8e89123..0000000000 --- a/WatchApp/it.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "TOTALE CARBOIDRATI"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-pasto"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbs"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolo fallito"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "In esecuzione"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITOLO"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolo"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etichetta"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "CARBS ATTIVI"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etichetta"; - diff --git a/WatchApp/ja.lproj/InfoPlist.strings b/WatchApp/ja.lproj/InfoPlist.strings deleted file mode 100644 index de9898d5ad..0000000000 --- a/WatchApp/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "ループ"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/ja.lproj/Interface.strings b/WatchApp/ja.lproj/Interface.strings deleted file mode 100644 index fa66ec3dd0..0000000000 --- a/WatchApp/ja.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "カーボ合計"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "食前"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "カーボ"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "ボーラス不成功"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "動作中"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "タイトル"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "オーバーライド"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "ループ"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "ボーラス"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "ラベル"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "ループ"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "残存糖質"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "ラベル"; - diff --git a/WatchApp/mul.lproj/Interface.xcstrings b/WatchApp/mul.lproj/Interface.xcstrings new file mode 100644 index 0000000000..54ad80f67a --- /dev/null +++ b/WatchApp/mul.lproj/Interface.xcstrings @@ -0,0 +1,2575 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "CsQ-fc-KLC.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"–\"; ObjectID = \"CsQ-fc-KLC\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + } + } + }, + "dea-qG-va8.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"TOTAL CARBS\"; ObjectID = \"dea-qG-va8\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "TOTAL CARBS" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "TOTALE KULHYDRATER" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "GESAMT KH" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "TOTAL CARBS" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBS" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "HIILARI YHT." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "GLUCIDES TOTAUX" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "TOTAL CARBS" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "TOTALE CARBOIDRATI" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カーボ合計" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "KARBOHYDRATER TOTALT" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Totaal Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "WĘGLOWODANY OGÓŁEM" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBS TOTAL" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBOHIDRAȚI TOTALI" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "ВСЕГО УГЛЕВОДОВ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolh. totalt" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "TOPLAM KARB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "TỔNG CỘNG LƯỢNG CARBS" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水总量" + } + } + } + }, + "Dt1-kz-jMZ.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"– – –\"; ObjectID = \"Dt1-kz-jMZ\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "f5G-bS-9pd.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Pre-Meal\"; ObjectID = \"f5G-bS-9pd\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Før-måltid" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vor dem Essen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Pre-Meal" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Comida" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennen ateriaa" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pré-Repas" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-pasto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "食前" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-måltid" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pre-Meal" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przed posiłkiem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pré-Refeição" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Preprandial" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "До еды" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Före måltid" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Yemek öncesi" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Trước bữa ăn" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "餐前模式" + } + } + } + }, + "hln-CI-MRP.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Carbs\"; ObjectID = \"hln-CI-MRP\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kulhydrater" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "KH" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Carbs" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidratos" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiilihydraatit" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glucides" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "カーボ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karbohydrater" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Koolhydraten" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Węglowodany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbohidrați" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Углеводы" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kolhydrater" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Karb" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carbs" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水化合物" + } + } + } + }, + "IRi-4t-ESO.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"–\"; ObjectID = \"IRi-4t-ESO\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + } + } + }, + "jj3-Gq-HBy.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Bolus Failed\"; ObjectID = \"jj3-Gq-HBy\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Failed" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus fejlede" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus fehlgeschlagen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Bolus Failed" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo Falló" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus epäonnistui" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Échec du bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Failed" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo fallito" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス不成功" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus feilet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Mislukt" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus nie podany" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Falhou" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus eșuat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс не состоялся" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus misslyckades" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus Başarısız" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus lỗi" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量输注失败" + } + } + } + }, + "JXa-s1-PJx.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Running\"; ObjectID = \"JXa-s1-PJx\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Running" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kører" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Laufen" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Running" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Correr" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Juoksu" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "En marche" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Running" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "In esecuzione" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "動作中" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kjører" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hardlopen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pracuje" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Executando" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se rulează" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Выполнение" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Löpning" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Çalışıyor" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Đang chạy" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "运行中" + } + } + } + }, + "Mhe-aR-kQQ.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"–\"; ObjectID = \"Mhe-aR-kQQ\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "-" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "–" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } + } + } + }, + "MZU-QV-PtZ.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"TITLE\"; ObjectID = \"MZU-QV-PtZ\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITLE" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITEL" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITEL" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "TITLE" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "TÍTULO" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "OTSIKKO" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITLE" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITLE" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITOLO" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "タイトル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITTEL" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITEL" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "TYTUŁ" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "TÍTULO" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITLU" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "НАЗВАНИЕ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITLE" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "BAŞLIK" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "TITLE" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "名称" + } + } + } + }, + "nC0-X3-oFJ.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Override\"; ObjectID = \"nC0-X3-oFJ\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Override" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobreescritura" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tilapäisas." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ajustement" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "オーバーライド" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Overstyr" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cel Tymczasowy" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sobrepor" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înlocuire" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geçersiz kıl" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Chồng lên" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Override" + } + } + } + }, + "rNf-Mh-tID.title" : { + "comment" : "Class = \"WKInterfaceController\"; title = \"Loop\"; ObjectID = \"rNf-Mh-tID\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + } + } + }, + "smL-Rc-IZh.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Bolus\"; ObjectID = \"smL-Rc-IZh\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Bolus" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolo" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ボーラス" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Болюс" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bolus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量" + } + } + } + }, + "T4U-wP-dSW.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Label\"; ObjectID = \"T4U-wP-dSW\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + }, + "UVY-pa-SUL.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"🏃‍♀️\"; ObjectID = \"UVY-pa-SUL\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "🏃‍♀️" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "🏃‍♀️" + } + } + } + }, + "v5b-sO-bb8.title" : { + "comment" : "Class = \"WKInterfaceController\"; title = \"Loop\"; ObjectID = \"v5b-sO-bb8\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Loop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ループ" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + } + } + }, + "XkS-y5-khE.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"\"; ObjectID = \"XkS-y5-khE\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "" + } + } + } + }, + "ycL-5X-a05.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"ACTIVE CARBS\"; ObjectID = \"ycL-5X-a05\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ACTIVE CARBS" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKTIVE KULHYDRATER" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKTIVE KH" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "ACTIVE CARBS" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBS ACTIVOS" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKT. HIILARI" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "GLUCIDES ACTIFS" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ACTIVE CARBS" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBS ATTIVI" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "残存糖質" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKTIVE KARBOHYDRATER" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "ACTIEVE KOOLHYDRATEN" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKTYWNE WĘGLOWODANY" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBS ATIVOS" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "CARBOHIDRAȚI ACTIVI" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "АКТИВНЫЕ УГЛЕВОДЫ" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKTIVA KOLH." + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "AKTİF KARB" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "LƯỢNG CARBS CÒN HOẠT ĐỘNG" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "ACTIVE CARBS" + } + } + } + }, + "yl8-ZP-c3l.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"– – –\"; ObjectID = \"yl8-ZP-c3l\";", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– –" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "---" + } + } + } + }, + "zO8-x6-bZd.text" : { + "comment" : "Class = \"WKInterfaceLabel\"; text = \"Label\"; ObjectID = \"zO8-x6-bZd\";", + "extractionState" : "extracted_with_value", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beschriftung" + } + }, + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Label" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiqueta" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimiö" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetta" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ラベル" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etikett" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etykieta" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rótulo" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etichetă" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ярлык" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Etiket" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Label" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "标签" + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/WatchApp/nb.lproj/InfoPlist.strings b/WatchApp/nb.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/nb.lproj/Interface.strings b/WatchApp/nb.lproj/Interface.strings deleted file mode 100644 index c1dd5548a2..0000000000 --- a/WatchApp/nb.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "KARBOHYDRATER TOTALT"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-måltid"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Karbohydrater"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus feilet"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Kjører"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITTEL"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Overstyr"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etikett"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKTIVE KARBOHYDRATER"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etikett"; - diff --git a/WatchApp/nl.lproj/InfoPlist.strings b/WatchApp/nl.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/nl.lproj/Interface.strings b/WatchApp/nl.lproj/Interface.strings deleted file mode 100644 index daf7473d97..0000000000 --- a/WatchApp/nl.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "Totaal Koolhydraten"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pre-Meal"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Koolhydraten"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus Mislukt"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Hardlopen"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITEL"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etiket"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "ACTIEVE KOOLHYDRATEN"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etiket"; - diff --git a/WatchApp/pl.lproj/InfoPlist.strings b/WatchApp/pl.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/pl.lproj/Interface.strings b/WatchApp/pl.lproj/Interface.strings deleted file mode 100644 index 341bbf4aeb..0000000000 --- a/WatchApp/pl.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "WĘGLOWODANY OGÓŁEM"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Przed posiłkiem"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Węglowodany"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus nie podany"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Pracuje"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TYTUŁ"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Cel Tymczasowy"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etykieta"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKTYWNE WĘGLOWODANY"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etykieta"; - diff --git a/WatchApp/pt-BR.lproj/InfoPlist.strings b/WatchApp/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/pt-BR.lproj/Interface.strings b/WatchApp/pt-BR.lproj/Interface.strings deleted file mode 100644 index c84db2cb98..0000000000 --- a/WatchApp/pt-BR.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "CARBS TOTAL"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Pré-Refeição"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbs"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus Falhou"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Executando"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TÍTULO"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Sobrepor"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Rótulo"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "CARBS ATIVOS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Rótulo"; - diff --git a/WatchApp/ro.lproj/InfoPlist.strings b/WatchApp/ro.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/ro.lproj/Interface.strings b/WatchApp/ro.lproj/Interface.strings deleted file mode 100644 index fc462cb690..0000000000 --- a/WatchApp/ro.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "CARBOHIDRAȚI TOTALI"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Preprandial"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbohidrați"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus eșuat"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Se rulează"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITLU"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Înlocuire"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etichetă"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "CARBOHIDRAȚI ACTIVI"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etichetă"; - diff --git a/WatchApp/ru.lproj/InfoPlist.strings b/WatchApp/ru.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/ru.lproj/Interface.strings b/WatchApp/ru.lproj/Interface.strings deleted file mode 100644 index cf2c90d48d..0000000000 --- a/WatchApp/ru.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "ВСЕГО УГЛЕВОДОВ"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "До еды"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Углеводы"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Болюс не состоялся"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Выполнение"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "НАЗВАНИЕ"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Включить"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Болюс"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Ярлык"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "АКТИВНЫЕ УГЛЕВОДЫ"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Ярлык"; - diff --git a/WatchApp/sk.lproj/InfoPlist.strings b/WatchApp/sk.lproj/InfoPlist.strings deleted file mode 100644 index 273b97d2be..0000000000 --- a/WatchApp/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - diff --git a/WatchApp/sk.lproj/Interface.strings b/WatchApp/sk.lproj/Interface.strings deleted file mode 100644 index 39844f8142..0000000000 --- a/WatchApp/sk.lproj/Interface.strings +++ /dev/null @@ -1,15 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - diff --git a/WatchApp/sv.lproj/InfoPlist.strings b/WatchApp/sv.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/sv.lproj/Interface.strings b/WatchApp/sv.lproj/Interface.strings deleted file mode 100644 index 668835726b..0000000000 --- a/WatchApp/sv.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "Kolh. totalt"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Före måltid"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Kolhydrater"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus misslyckades"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Löpning"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITLE"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Label"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKTIVA KOLH."; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Label"; - diff --git a/WatchApp/tr.lproj/InfoPlist.strings b/WatchApp/tr.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/tr.lproj/Interface.strings b/WatchApp/tr.lproj/Interface.strings deleted file mode 100644 index 6de4cf4758..0000000000 --- a/WatchApp/tr.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "TOPLAM KARB"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Yemek öncesi"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Karb"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus Başarısız"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Çalışıyor"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "–"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "BAŞLIK"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Geçersiz kıl"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Etiket"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "AKTİF KARB"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "– – –"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Etiket"; - diff --git a/WatchApp/vi.lproj/InfoPlist.strings b/WatchApp/vi.lproj/InfoPlist.strings deleted file mode 100644 index 9250064a26..0000000000 --- a/WatchApp/vi.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* (No Comment) */ -"CFBundleDisplayName" = "Loop"; - -/* (No Comment) */ -"CFBundleName" = "$(PRODUCT_NAME)"; - diff --git a/WatchApp/vi.lproj/Interface.strings b/WatchApp/vi.lproj/Interface.strings deleted file mode 100644 index 0f58d40ea9..0000000000 --- a/WatchApp/vi.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "TỔNG CỘNG LƯỢNG CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "Trước bữa ăn"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "Carbs"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "Bolus lỗi"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "Đang chạy"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "TITLE"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Chồng lên"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "Bolus"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "Label"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "LƯỢNG CARBS CÒN HOẠT ĐỘNG"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "Label"; - diff --git a/WatchApp/zh-Hans.lproj/Interface.strings b/WatchApp/zh-Hans.lproj/Interface.strings deleted file mode 100644 index a493bb05ef..0000000000 --- a/WatchApp/zh-Hans.lproj/Interface.strings +++ /dev/null @@ -1,60 +0,0 @@ -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "CsQ-fc-KLC"; */ -"CsQ-fc-KLC.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TOTAL CARBS"; ObjectID = "dea-qG-va8"; */ -"dea-qG-va8.text" = "碳水总量"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "Dt1-kz-jMZ"; */ -"Dt1-kz-jMZ.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Pre-Meal"; ObjectID = "f5G-bS-9pd"; */ -"f5G-bS-9pd.text" = "餐前模式"; - -/* Class = "WKInterfaceLabel"; text = "Carbs"; ObjectID = "hln-CI-MRP"; */ -"hln-CI-MRP.text" = "碳水化合物"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "IRi-4t-ESO"; */ -"IRi-4t-ESO.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "Bolus Failed"; ObjectID = "jj3-Gq-HBy"; */ -"jj3-Gq-HBy.text" = "大剂量输注失败"; - -/* Class = "WKInterfaceLabel"; text = "Running"; ObjectID = "JXa-s1-PJx"; */ -"JXa-s1-PJx.text" = "运行中"; - -/* Class = "WKInterfaceLabel"; text = "–"; ObjectID = "Mhe-aR-kQQ"; */ -"Mhe-aR-kQQ.text" = "—"; - -/* Class = "WKInterfaceLabel"; text = "TITLE"; ObjectID = "MZU-QV-PtZ"; */ -"MZU-QV-PtZ.text" = "名称"; - -/* Class = "WKInterfaceLabel"; text = "Override"; ObjectID = "nC0-X3-oFJ"; */ -"nC0-X3-oFJ.text" = "Override"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "rNf-Mh-tID"; */ -"rNf-Mh-tID.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = "Bolus"; ObjectID = "smL-Rc-IZh"; */ -"smL-Rc-IZh.text" = "大剂量"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "T4U-wP-dSW"; */ -"T4U-wP-dSW.text" = "标签"; - -/* Class = "WKInterfaceLabel"; text = "🏃‍♀️"; ObjectID = "UVY-pa-SUL"; */ -"UVY-pa-SUL.text" = "🏃‍♀️"; - -/* Class = "WKInterfaceController"; title = "Loop"; ObjectID = "v5b-sO-bb8"; */ -"v5b-sO-bb8.title" = "Loop"; - -/* Class = "WKInterfaceLabel"; text = ""; ObjectID = "XkS-y5-khE"; */ -"XkS-y5-khE.text" = ""; - -/* Class = "WKInterfaceLabel"; text = "ACTIVE CARBS"; ObjectID = "ycL-5X-a05"; */ -"ycL-5X-a05.text" = "ACTIVE CARBS"; - -/* Class = "WKInterfaceLabel"; text = "– – –"; ObjectID = "yl8-ZP-c3l"; */ -"yl8-ZP-c3l.text" = "---"; - -/* Class = "WKInterfaceLabel"; text = "Label"; ObjectID = "zO8-x6-bZd"; */ -"zO8-x6-bZd.text" = "标签"; - From 9a2dc9daea6f4fa33e80b703fcb38eae01db882a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 5 Sep 2025 16:14:18 -0700 Subject: [PATCH 08/41] modify to enable Xcode to export localization --- Loop.xcodeproj/project.pbxproj | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index ea2fe09071..412ad40359 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -4515,6 +4515,7 @@ PRODUCT_NAME = LoopCore; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; TARGETED_DEVICE_FAMILY = 4; }; @@ -4540,6 +4541,7 @@ PRODUCT_NAME = LoopCore; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; TARGETED_DEVICE_FAMILY = 4; }; @@ -4562,7 +4564,13 @@ PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.LoopCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -4583,7 +4591,13 @@ PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.LoopCore; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_INSTALL_OBJC_HEADER = NO; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; @@ -4600,6 +4614,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.LoopTests; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_INSTALL_OBJC_HEADER = NO; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Loop.app/Loop"; }; @@ -4619,6 +4634,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.LoopTests; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; SWIFT_INSTALL_OBJC_HEADER = NO; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Loop.app/Loop"; }; @@ -4692,7 +4708,12 @@ PRODUCT_BUNDLE_IDENTIFIER = "$(MAIN_APP_BUNDLE_IDENTIFIER).LoopUI"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_INSTALL_OBJC_HEADER = NO; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -4712,7 +4733,12 @@ PRODUCT_BUNDLE_IDENTIFIER = "$(MAIN_APP_BUNDLE_IDENTIFIER).LoopUI"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_INSTALL_OBJC_HEADER = NO; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; From db83e7f6823df979d1a18a7973c9f5213fca1c3b Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 6 Sep 2025 14:08:53 -0700 Subject: [PATCH 09/41] Updated translations from lokalise on Sat Sep 6 12:10:52 PDT 2025 --- Loop Status Extension/InfoPlist.xcstrings | 6 + Loop/InfoPlist.xcstrings | 12 ++ Loop/Localizable.xcstrings | 150 ++++++++++++++++++++++ Loop/mul.lproj/Main.xcstrings | 12 ++ WatchApp Extension/Localizable.xcstrings | 6 + WatchApp/InfoPlist.xcstrings | 6 + 6 files changed, 192 insertions(+) diff --git a/Loop Status Extension/InfoPlist.xcstrings b/Loop Status Extension/InfoPlist.xcstrings index 4d9d18189d..cabc0b8b20 100644 --- a/Loop Status Extension/InfoPlist.xcstrings +++ b/Loop Status Extension/InfoPlist.xcstrings @@ -124,6 +124,12 @@ "state" : "translated", "value" : "Loop" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } } } }, diff --git a/Loop/InfoPlist.xcstrings b/Loop/InfoPlist.xcstrings index 286eb13f56..b7fa6d3a0d 100644 --- a/Loop/InfoPlist.xcstrings +++ b/Loop/InfoPlist.xcstrings @@ -124,6 +124,12 @@ "state" : "translated", "value" : "Loop" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } } } }, @@ -227,6 +233,12 @@ "value" : "$(PRODUCT_NAME)" } }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } + }, "sv" : { "stringUnit" : { "state" : "translated", diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 3a1fa4b5a7..62511027aa 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -572,6 +572,12 @@ "state" : "translated", "value" : "—" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "—" + } } } }, @@ -2427,6 +2433,12 @@ "value" : "%1$@ U" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "U %1$@" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -6436,6 +6448,12 @@ "state" : "translated", "value" : "Amplitude" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Amplitude" + } } } }, @@ -6953,6 +6971,12 @@ "state" : "translated", "value" : "API Key" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Key" + } } } }, @@ -10343,6 +10367,12 @@ "state" : "translated", "value" : "Khai báo Carb" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加碳水化合物" + } } } }, @@ -13950,6 +13980,12 @@ "state" : "translated", "value" : "Ngày" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "日期" + } } } }, @@ -22677,11 +22713,125 @@ "comment" : "The title of the loggly service", "extractionState" : "manual", "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, "en" : { "stringUnit" : { "state" : "translated", "value" : "Loggly" } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loggly" + } } } }, diff --git a/Loop/mul.lproj/Main.xcstrings b/Loop/mul.lproj/Main.xcstrings index 2f5ada279b..8c02a1a27a 100644 --- a/Loop/mul.lproj/Main.xcstrings +++ b/Loop/mul.lproj/Main.xcstrings @@ -1570,6 +1570,12 @@ "state" : "translated", "value" : "3.5 U/hour @ 12:12 PM" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "3.5u/小时 @ 12:12 PM" + } } } }, @@ -3267,6 +3273,12 @@ "state" : "translated", "value" : "Khuyến nghị liều Basal" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐基础率" + } } } }, diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index caab9cdbb9..506dc948be 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -413,6 +413,12 @@ "state" : "translated", "value" : "%1$@ – %2$@ %3$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ – %2$@ %3$@" + } } } }, diff --git a/WatchApp/InfoPlist.xcstrings b/WatchApp/InfoPlist.xcstrings index 561b6367e8..00899fdc66 100644 --- a/WatchApp/InfoPlist.xcstrings +++ b/WatchApp/InfoPlist.xcstrings @@ -123,6 +123,12 @@ "state" : "translated", "value" : "Loop" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop" + } } } }, From c3c15e1d744aea83c5436e3d16ea6c5362fdae2c Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 7 Sep 2025 11:41:21 -0700 Subject: [PATCH 10/41] Update Localization, add missing localization strings for Favorite Foods, add comments to Favorite Foods string that were already localized, remove some items that do not require localization --- Loop/Localizable.xcstrings | 372 ++------------------ Loop/View Models/SimpleBolusViewModel.swift | 2 +- Loop/Views/AddEditFavoriteFoodView.swift | 8 +- Loop/Views/BolusEntryView.swift | 4 +- Loop/Views/CarbEntryView.swift | 16 +- Loop/Views/FavoriteFoodDetailView.swift | 8 +- Loop/Views/FavoriteFoodsView.swift | 6 +- Loop/Views/ManualEntryDoseView.swift | 2 +- Loop/Views/ManualGlucoseEntryRow.swift | 2 +- Loop/Views/SettingsView.swift | 2 +- Loop/Views/SimpleBolusView.swift | 2 +- 11 files changed, 52 insertions(+), 372 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 62511027aa..ae9c54edae 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1,9 +1,6 @@ { "sourceLanguage" : "en", "strings" : { - "" : { - - }, " (pending: %@)" : { "comment" : "The string format appended to active insulin that describes pending insulin. (1: pending insulin)", "extractionState" : "manual", @@ -462,344 +459,6 @@ } } }, - "–" : { - "comment" : "String denoting lack of a recommended bolus amount in the simple bolus calculator", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "-" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "sv" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "–" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "—" - } - } - } - }, - "– –" : { - "localizations" : { - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "--" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "sv" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - } - } - }, - "– – –" : { - "comment" : "No glucose value representation (3 dashes for mg/dL)", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "---" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "---" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "---" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "---" - } - }, - "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "– –" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "---" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "sk" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "sv" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "– – –" - } - }, - "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "---" - } - } - } - }, "." : { "comment" : "Full stop character", "localizations" : { @@ -4347,7 +4006,7 @@ } }, "Absorption Time" : { - + "comment" : "Label for food absorption entry on add favorite food screen" }, "AcceptRecommendedBolus" : { "comment" : "Action to copy the recommended Bolus value to the actual Bolus Field", @@ -5115,6 +4774,7 @@ } }, "Add a new favorite food" : { + "comment" : "Button label to open new favorite food view", "localizations" : { "da" : { "stringUnit" : { @@ -6257,6 +5917,7 @@ } }, "All Favorites" : { + "comment" : "section header for list of existing FavoriteFoods", "localizations" : { "da" : { "stringUnit" : { @@ -7201,6 +6862,9 @@ } } }, + "Apple" : { + "comment" : "Default name on add favorite food screen" + }, "Are you sure you want to delete all history entries?" : { "comment" : "Action sheet confirmation message for pump history deletion", "localizations" : { @@ -7505,6 +7169,7 @@ } }, "Are you sure you want to delete all your %@ Data?\n(This action is not reversible)" : { + "comment" : "Confirmation before you delete all your Simulated Test Devices data", "localizations" : { "da" : { "stringUnit" : { @@ -9566,7 +9231,7 @@ } }, "Cancel" : { - "comment" : "Cancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", + "comment" : "Button label for cancel\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", "localizations" : { "ar" : { "stringUnit" : { @@ -10041,6 +9706,9 @@ } } }, + "Carb Quantity" : { + "comment" : "Label for carb quantity row on add favorite food screen" + }, "Carb Ratio Schedule" : { "comment" : "Details for configuration error when carb ratio schedule is missing", "localizations" : { @@ -11557,6 +11225,7 @@ } }, "Choose Favorite:" : { + "comment" : "The label for the row where you choose saved Favorite Food", "localizations" : { "da" : { "stringUnit" : { @@ -12717,7 +12386,7 @@ } }, "Continue" : { - "comment" : "Default alert dismissal", + "comment" : "Button label for continue\nDefault alert dismissal", "localizations" : { "cs" : { "stringUnit" : { @@ -17793,9 +17462,10 @@ } }, "Favorite Foods" : { - + "comment" : "Title for Favorite Foods view" }, "FAVORITE FOODS" : { + "comment" : "The section title for Carb entry screen where Favorite Foods can be selected", "localizations" : { "da" : { "stringUnit" : { @@ -18133,6 +17803,9 @@ } } }, + "Food Type" : { + "comment" : "Label for food type entry on add favorite food screen" + }, "For %1$@" : { "comment" : "The format string used to describe a finite workout targets duration", "localizations" : { @@ -25015,6 +24688,9 @@ } } }, + "Name" : { + "comment" : "Label for name row on add favorite food screen" + }, "Needs Attention" : { "comment" : "Sensor state description for the non-valid state", "extractionState" : "manual", @@ -25201,7 +24877,7 @@ } }, "New Favorite Food" : { - + "comment" : "Title of new favorite food screen" }, "Nightscout" : { "comment" : "The title of the Nightscout service", @@ -26094,6 +25770,9 @@ } } }, + "None" : { + "comment" : "Indicates no favorite food is selected" + }, "Notification Delivery" : { "comment" : "Notification Delivery Status text", "localizations" : { @@ -30939,6 +30618,7 @@ } }, "Save as favorite food" : { + "comment" : "Button label for saving current carb entry as a new Favorite Food", "localizations" : { "da" : { "stringUnit" : { diff --git a/Loop/View Models/SimpleBolusViewModel.swift b/Loop/View Models/SimpleBolusViewModel.swift index f803bfa595..016c1518fb 100644 --- a/Loop/View Models/SimpleBolusViewModel.swift +++ b/Loop/View Models/SimpleBolusViewModel.swift @@ -206,7 +206,7 @@ class SimpleBolusViewModel: ObservableObject { recommendedBolus = Self.doseAmountFormatter.string(from: recommendation)! enteredBolusString = Self.doseAmountFormatter.string(from: min(recommendation, delegate.maximumBolus))! } else { - recommendedBolus = NSLocalizedString("–", comment: "String denoting lack of a recommended bolus amount in the simple bolus calculator") + recommendedBolus = ("–") // do not localize this, comment: "String denoting lack of a recommended bolus amount in the simple bolus calculator" enteredBolusString = Self.doseAmountFormatter.string(from: 0.0)! } } diff --git a/Loop/Views/AddEditFavoriteFoodView.swift b/Loop/Views/AddEditFavoriteFoodView.swift index b647523a13..0e2d9ebaa4 100644 --- a/Loop/Views/AddEditFavoriteFoodView.swift +++ b/Loop/Views/AddEditFavoriteFoodView.swift @@ -44,7 +44,7 @@ struct AddEditFavoriteFoodView: View { saveButton } } - .navigationBarTitle("New Favorite Food", displayMode: .inline) + .navigationBarTitle(String(localized: "New Favorite Food", comment: "Title of new favorite food screen"), displayMode: .inline) .onAppear { expandedRow = .name } @@ -93,15 +93,15 @@ struct AddEditFavoriteFoodView: View { let foodTypeFocused: Binding = Binding(get: { expandedRow == .foodType }, set: { expandedRow = $0 ? .foodType : nil }) let absorptionTimeFocused: Binding = Binding(get: { expandedRow == .absorptionTime }, set: { expandedRow = $0 ? .absorptionTime : nil }) - TextFieldRow(text: $viewModel.name, isFocused: nameFocused, title: "Name", placeholder: "Apple") + TextFieldRow(text: $viewModel.name, isFocused: nameFocused, title: String(localized: "Name", comment: "Label for name row on add favorite food screen"), placeholder: String(localized: "Apple", comment: "Default name on add favorite food screen")) CardSectionDivider() - CarbQuantityRow(quantity: $viewModel.carbsQuantity, isFocused: carbQuantityFocused, title: "Carb Quantity", preferredCarbUnit: viewModel.preferredCarbUnit) + CarbQuantityRow(quantity: $viewModel.carbsQuantity, isFocused: carbQuantityFocused, title: String(localized: "Carb Quantity", comment: "Label for carb quantity row on add favorite food screen"), preferredCarbUnit: viewModel.preferredCarbUnit) CardSectionDivider() - EmojiRow(text: $viewModel.foodType, isFocused: foodTypeFocused, emojiType: .food, title: "Food Type") + EmojiRow(text: $viewModel.foodType, isFocused: foodTypeFocused, emojiType: .food, title: String(localized: "Food Type", comment: "Label for food type entry on add favorite food screen")) CardSectionDivider() diff --git a/Loop/Views/BolusEntryView.swift b/Loop/Views/BolusEntryView.swift index 10e6fa4ccd..ab2e6d3f76 100644 --- a/Loop/Views/BolusEntryView.swift +++ b/Loop/Views/BolusEntryView.swift @@ -459,7 +459,7 @@ struct LabeledQuantity: View { var valueText: Text { guard let quantity = quantity else { - return Text("– –") + return Text(verbatim: "– –") } let formatter = QuantityFormatter(for: unit) @@ -470,7 +470,7 @@ struct LabeledQuantity: View { guard let string = formatter.string(from: quantity) else { assertionFailure("Unable to format \(String(describing: quantity)) \(unit)") - return Text("") + return Text(verbatim: "") } return Text(string) diff --git a/Loop/Views/CarbEntryView.swift b/Loop/Views/CarbEntryView.swift index 14c6b2c460..5831836fd6 100644 --- a/Loop/Views/CarbEntryView.swift +++ b/Loop/Views/CarbEntryView.swift @@ -211,7 +211,7 @@ extension CarbEntryView { extension CarbEntryView { private var favoriteFoodsCard: some View { VStack(alignment: .leading, spacing: 6) { - Text("FAVORITE FOODS") + Text("FAVORITE FOODS", comment: "The section title for Carb entry screen where Favorite Foods can be selected") .font(.footnote) .foregroundColor(.secondary) .padding(.horizontal, 26) @@ -220,7 +220,7 @@ extension CarbEntryView { if !viewModel.favoriteFoods.isEmpty { VStack { HStack { - Text("Choose Favorite:") + Text("Choose Favorite:", comment: "The label for the row where you choose saved Favorite Food") let selectedFavorite = favoritedFoodTextFromIndex(viewModel.selectedFavoriteFoodIndex) Text(selectedFavorite) @@ -229,7 +229,7 @@ extension CarbEntryView { } if expandedRow == .favoriteFoodSelection { - Picker("", selection: $viewModel.selectedFavoriteFoodIndex) { + Picker(String(""), selection: $viewModel.selectedFavoriteFoodIndex) { ForEach(-1.. String { if index == -1 { - return "None" + return String(localized: "None", comment: "Indicates no favorite food is selected") } else { let food = viewModel.favoriteFoods[index] @@ -290,20 +290,20 @@ extension CarbEntryView { extension CarbEntryView { private var dismissButton: some View { Button(action: dismiss) { - Text("Cancel") + Text("Cancel", comment: "Button label for cancel") } } private var continueButton: some View { Button(action: viewModel.continueToBolus) { - Text("Continue") + Text("Continue", comment: "Button label for continue") } .disabled(viewModel.continueButtonDisabled) } private var continueActionButton: some View { Button(action: viewModel.continueToBolus) { - Text("Continue") + Text("Continue", comment: "Button label for continue") } .buttonStyle(ActionButtonStyle()) .padding() diff --git a/Loop/Views/FavoriteFoodDetailView.swift b/Loop/Views/FavoriteFoodDetailView.swift index 44c7a83150..8c76e1fe8f 100644 --- a/Loop/Views/FavoriteFoodDetailView.swift +++ b/Loop/Views/FavoriteFoodDetailView.swift @@ -35,10 +35,10 @@ public struct FavoriteFoodDetailView: View { Section("Information") { VStack(spacing: 16) { let rows: [(field: String, value: String)] = [ - ("Name", food.name), - ("Carb Quantity", food.carbsString(formatter: carbFormatter)), - ("Food Type", food.foodType), - ("Absorption Time", food.absorptionTimeString(formatter: absorptionTimeFormatter)) + (String(localized: "Name", comment: "Label for name row on add favorite food screen"), food.name), + (String(localized: "Carb Quantity", comment: "Label for carb quantity row on add favorite food screen"), food.carbsString(formatter: carbFormatter)), + (String(localized:"Food Type", comment: "Label for food type entry on add favorite food screen"), food.foodType), + (String(localized: "Absorption Time", comment: "Label for food absorption entry on add favorite food screen"), food.absorptionTimeString(formatter: absorptionTimeFormatter)) ] ForEach(rows, id: \.field) { row in HStack { diff --git a/Loop/Views/FavoriteFoodsView.swift b/Loop/Views/FavoriteFoodsView.swift index c2bb941c26..d3042208d8 100644 --- a/Loop/Views/FavoriteFoodsView.swift +++ b/Loop/Views/FavoriteFoodsView.swift @@ -61,7 +61,7 @@ struct FavoriteFoodsView: View { dismissButton } } - .navigationBarTitle("Favorite Foods", displayMode: .large) + .navigationBarTitle(String(localized: "Favorite Foods", comment: "Title for Favorite Foods view"), displayMode: .large) } .sheet(isPresented: $viewModel.isAddViewActive) { AddEditFavoriteFoodView(onSave: viewModel.onFoodSave(_:)) @@ -87,7 +87,7 @@ struct FavoriteFoodsView: View { extension FavoriteFoodsView { private var listHeader: some View { HStack { - Text("All Favorites") + Text("All Favorites", comment: "section header for list of existing FavoriteFoods") .font(.title3) .fontWeight(.semibold) .textCase(nil) @@ -122,7 +122,7 @@ extension FavoriteFoodsView { HStack { Image(systemName: "plus.circle.fill") - Text("Add a new favorite food") + Text("Add a new favorite food", comment: "Button label to open new favorite food view") } } .buttonStyle(ActionButtonStyle()) diff --git a/Loop/Views/ManualEntryDoseView.swift b/Loop/Views/ManualEntryDoseView.swift index 0c6700e6eb..4c55b6be28 100644 --- a/Loop/Views/ManualEntryDoseView.swift +++ b/Loop/Views/ManualEntryDoseView.swift @@ -160,7 +160,7 @@ struct ManualEntryDoseView: View { // Allow 6 hours before & after due to longest DIA ZStack(alignment: .topLeading) { DatePicker( - "", + String(""), selection: $viewModel.selectedDoseDate, in: Date().addingTimeInterval(-.hours(6))...Date().addingTimeInterval(.hours(6)), displayedComponents: [.date, .hourAndMinute] diff --git a/Loop/Views/ManualGlucoseEntryRow.swift b/Loop/Views/ManualGlucoseEntryRow.swift index 33bcecfb1b..3850637a5e 100644 --- a/Loop/Views/ManualGlucoseEntryRow.swift +++ b/Loop/Views/ManualGlucoseEntryRow.swift @@ -32,7 +32,7 @@ struct ManualGlucoseEntryRow: View { HStack(alignment: .firstTextBaseline) { DismissibleKeyboardTextField( text: $valueText, - placeholder: NSLocalizedString("– – –", comment: "No glucose value representation (3 dashes for mg/dL)"), + placeholder: "– – –", font: .heavy(.title1), textAlignment: .right, keyboardType: .decimalPad, diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index c3ec98b8dd..435f11ccaa 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -440,7 +440,7 @@ extension SettingsView { private func makeDeleteAlert(for model: DeviceViewModel) -> SwiftUI.Alert { return SwiftUI.Alert(title: Text("Delete Testing Data"), - message: Text("Are you sure you want to delete all your \(model.name()) Data?\n(This action is not reversible)"), + message: Text("Are you sure you want to delete all your \(model.name()) Data?\n(This action is not reversible)", comment: "Confirmation before you delete all your Simulated Test Devices data"), primaryButton: .cancel(), secondaryButton: .destructive(Text("Delete"), action: model.deleteTestingDataFunc())) } diff --git a/Loop/Views/SimpleBolusView.swift b/Loop/Views/SimpleBolusView.swift index 2374e69d4b..044b3dc41e 100644 --- a/Loop/Views/SimpleBolusView.swift +++ b/Loop/Views/SimpleBolusView.swift @@ -146,7 +146,7 @@ struct SimpleBolusView: View { HStack(alignment: .firstTextBaseline) { DismissibleKeyboardTextField( text: enteredManualGlucose, - placeholder: NSLocalizedString("– – –", comment: "No glucose value representation (3 dashes for mg/dL)"), + placeholder: "– – –", font: .heavy(.title1), textAlignment: .right, keyboardType: .decimalPad, From 2475da21160a68bf8db4ade1461c31b2a4ae077a Mon Sep 17 00:00:00 2001 From: marionbarker Date: Mon, 8 Sep 2025 15:53:56 -0700 Subject: [PATCH 11/41] Updated translations from lokalise on Mon Sep 8 15:14:33 PDT 2025 --- Loop/Localizable.xcstrings | 410 ++++++++++++++++++++++- LoopUI/Localizable.xcstrings | 6 + WatchApp Extension/InfoPlist.xcstrings | 42 +++ WatchApp Extension/Localizable.xcstrings | 6 + 4 files changed, 460 insertions(+), 4 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index ae9c54edae..860aff760a 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -17804,7 +17804,51 @@ } }, "Food Type" : { - "comment" : "Label for food type entry on add favorite food screen" + "comment" : "Label for food type entry on add favorite food screen", + "localizations" : { + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Madtype" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Essenstyp" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type d'aliment" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tipo cibo" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type mat" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rodzaj żywności" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Тип еды" + } + } + } }, "For %1$@" : { "comment" : "The format string used to describe a finite workout targets duration", @@ -24689,7 +24733,129 @@ } }, "Name" : { - "comment" : "Label for name row on add favorite food screen" + "comment" : "Label for name row on add favorite food screen", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Název" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Navn" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Name" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nombre" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimi" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nom" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "שם" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "नाम" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プリセット名" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Navn" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Naam" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nazwa" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nome" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nume" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Имя" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Názov" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Namn" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "İsim" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tên" + } + } + } }, "Needs Attention" : { "comment" : "Sensor state description for the non-valid state", @@ -25771,7 +25937,129 @@ } }, "None" : { - "comment" : "Indicates no favorite food is selected" + "comment" : "Indicates no favorite food is selected", + "localizations" : { + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žádný" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Keiner" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ninguno" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ei mitään" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucun" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "None" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nessuno" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "なし" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Geen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Brak" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nenhum" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nimic" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не подан" + } + }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Žiadny" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ingen" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiçbiri" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "None" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无" + } + } + } }, "Notification Delivery" : { "comment" : "Notification Delivery Status text", @@ -27572,11 +27860,125 @@ "comment" : "Format string describing retrospective glucose prediction comparison. (1: Predicted glucose)(2: Actual glucose)(3: difference)", "extractionState" : "manual", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التوقع: %1$@\nالواقع: %2$@ (%3$@)" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet: %1$@\nFaktisk: %2$@ (%3$@)" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vorhergesagt: %1$@\nAktuell: %2$@ (%3$@)" + } + }, "en" : { "stringUnit" : { "state" : "translated", "value" : "Predicted: %1$@\nActual: %2$@ (%3$@)" } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicción: %1$@\nActual: %2$@ (%3$@)" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ennustettu: %1$@\nTodellinen: %2$@ (%3$@)" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prédit : %1$@\nRéel : %2$@ (%3$@)" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "חזוי: %1$@\nבפועל: %2$@ (%3$@)" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Previsto: %1$@\nEffettivo: %2$@ (%3$@)" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Predicted: %1$@\nActual: %2$@ (%3$@)" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Forventet: %1$@\nFaktisk: %2$@ ( %3$@ )" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voorspeld: %1$@\nActueel: %2$@ (%3$@)" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Przewidywana: %1$@Rzeczywista: %2$@ (%3$@)" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prevista: %1$@\nAtual: %2$@ (%3$@)" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prognozată: %1$@\nActuală: %2$@ (%3$@)" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Прогноз: %1$@\nФакт: %2$@ (%3$@)" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Förväntat: %1$@\nFaktiskt: %2$@ (%3$@)" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tahmini: %1$@\nGüncel: %2$@ (%3$@)" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Được dự đoán: %1$@\nThực tế: %2$@ (%3$@)" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测值: %1$@\n实际值: %2$@ (%3$@)" + } } } }, @@ -35258,7 +35660,7 @@ "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Erreur inconnue : %1$03d" + "value" : "Erreur inconnue : %1$@" } }, "he" : { diff --git a/LoopUI/Localizable.xcstrings b/LoopUI/Localizable.xcstrings index a061eaef1d..5634bb1bfc 100644 --- a/LoopUI/Localizable.xcstrings +++ b/LoopUI/Localizable.xcstrings @@ -2167,6 +2167,12 @@ "state" : "translated", "value" : "Loop lỗi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop失败" + } } } }, diff --git a/WatchApp Extension/InfoPlist.xcstrings b/WatchApp Extension/InfoPlist.xcstrings index c3cd38b7b1..19974c32f6 100644 --- a/WatchApp Extension/InfoPlist.xcstrings +++ b/WatchApp Extension/InfoPlist.xcstrings @@ -185,6 +185,12 @@ "comment" : "Privacy - Health Share Usage Description", "extractionState" : "extracted_with_value", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يتم استخدام بيانات الوجبات من قواعد بيانات تطبيق صحتي لتحديد تأثيرات سكر الدم. يتم استخدام بيانات سكر الدم منقواعد بيانات تطبيق صحتي للرسم البياني والتحليل. تُستخدم بيانات النوم من قواعد بيانات تطبيق صحتي لتحسين توصيل تحديثات تعقيدات ساعة أبل أثناء فترة استيقاظك." + } + }, "da" : { "stringUnit" : { "state" : "translated", @@ -221,12 +227,24 @@ "value" : "Les données sur les repas provenant de la base de données Santé sont utilisées pour déterminer les effets du glucose. Les données relatives au glucose provenant de la base de données Santé sont utilisées pour la création de graphiques et le calcul de l'élan. Les données relatives au sommeil provenant de la base de données Santé sont utilisées pour optimiser l'envoi des mises à jour des complications de l'Apple Watch pendant la période où vous êtes éveillé(e)." } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נתוני ארוחות ממאגר Health משמשים לקביעת השפעות הגלוקוז. נתוני הגלוקוז ממסד Health הבריאות משמשים לגרפים ולחישוב מגמה. נתוני שינה ממסד Health משפרים את הנראות ב-Apple Watch." + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "I dati sui pasti del database Salute vengono utilizzati per determinare gli effetti del glucosio. I dati sul glucosio del database Salute vengono utilizzati per la rappresentazione grafica e il calcolo del momento. I dati sul sonno del database Salute vengono utilizzati per ottimizzare la consegna degli aggiornamenti delle complicazioni di Apple Watch durante il periodo di veglia." } }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "アプリに入力された炭水化物の食事データは、健康データベースに保存されます。 グルコースデータはHealthKitに安全に保存されます" + } + }, "nb" : { "stringUnit" : { "state" : "translated", @@ -245,6 +263,12 @@ "value" : "Dane posiłków z bazy danych aplikacji Zdrowie służą do określania wpływu glukozy. Dane dotyczące glukozy z bazy danych aplikacji Zdrowie są wykorzystywane do tworzenia wykresów i wyznaczania trendu. Dane dotyczące snu z bazy danych aplikacji Zdrowie służą do optymalizacji dostarczania aktualizacji komplikacji Apple Watch w czasie, gdy nie śpisz." } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Os dados de refeições do banco de dados de saúde são utilizados para definir os efeitos da glicose para a representação gráfica e cálculo da aceleração." + } + }, "ro" : { "stringUnit" : { "state" : "translated", @@ -274,6 +298,18 @@ "state" : "translated", "value" : "Sağlık veri tabanından alınan yemek verileri, KŞ etkilerini belirlemek için kullanılır. Sağlık veri tabanından alınan KŞ verileri, grafik ve momentum hesaplaması için kullanılır. Sağlık veritabanındaki uyku verileri, uyanık olduğunuz süre boyunca Apple Watch komplikasyon güncellemelerinin teslimini optimize etmek için kullanılır." } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thông số bữa ăn từ app Health được sử dụng để xác định tác động của glucose. Thông số glucose từ app Health được sử dụng cho các tính toán vẽ đồ thị và chuyển động của đường huyết." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "数据库中的膳食数据用于确定葡萄糖影响。健康数据库中的葡萄糖数据用于绘图和动量计算。" + } } } }, @@ -400,6 +436,12 @@ "state" : "translated", "value" : "Dữ liệu Carbohydrate của bữa ăn được nhập trên phần mềm và trên đồng hồ thông minh sẽ được lưu trữ tại app Health. Các thông số glucose được lấy từ thiết bị theo dõi đường huyết liên tục/CGM sẽ được lưu trữ an toàn trong HealthKit." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在应用程序和手表中输入的碳水化合物膳食数据存储在健康数据库中。从CGM检索的葡萄糖数据安全地存储在HealthKit中。" + } } } } diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index 506dc948be..137a2f7d6e 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -1068,6 +1068,12 @@ "value" : "Recommandation de Bolus modifiée" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "המלצת בולוס התעדכנה" + } + }, "it" : { "stringUnit" : { "state" : "translated", From 480e89bca8b0fec4592ebfe6abeb19169877a0b7 Mon Sep 17 00:00:00 2001 From: Mike Plante <82073483+MikePlante1@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:26:09 -0400 Subject: [PATCH 12/41] Disable Liquid Glass --- Loop/Info.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Loop/Info.plist b/Loop/Info.plist index ddad5426ac..5b70f7a45d 100644 --- a/Loop/Info.plist +++ b/Loop/Info.plist @@ -84,6 +84,8 @@ processing remote-notification + UIDesignRequiresCompatibility + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile From b9ac0264b70f7ad49482a98ac0b01b67f66c05b2 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Sun, 14 Sep 2025 18:27:05 -0700 Subject: [PATCH 13/41] Support Widget Tinting (#2344) --- .../Components/SystemActionLink.swift | 36 +++++++++++-------- Loop Widget Extension/LoopWidgets.swift | 4 ++- .../Widgets/SystemStatusWidget.swift | 15 +++++--- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/Loop Widget Extension/Components/SystemActionLink.swift b/Loop Widget Extension/Components/SystemActionLink.swift index eb62bbfa40..7962ec1a9f 100644 --- a/Loop Widget Extension/Components/SystemActionLink.swift +++ b/Loop Widget Extension/Components/SystemActionLink.swift @@ -9,7 +9,11 @@ import Foundation import SwiftUI +@available(iOS 16.1, *) struct SystemActionLink: View { + + @Environment(\.widgetRenderingMode) private var widgetRenderingMode + enum Destination: String, CaseIterable { case carbEntry = "carb-entry" case bolus = "manual-bolus" @@ -36,22 +40,26 @@ struct SystemActionLink: View { case .bolus: return Color("insulin") case .preMeal: - return active ? .white : Color("fresh") + return active ? Color("WidgetBackground") : Color("fresh") case .customPreset: - return active ? .white : Color("glucose") + return active ? Color("WidgetBackground") : Color("glucose") } } private func backgroundColor(active: Bool) -> Color { - switch destination { - case .carbEntry: - return active ? Color("fresh") : Color("WidgetSecondaryBackground") - case .bolus: - return active ? Color("insulin") : Color("WidgetSecondaryBackground") - case .preMeal: - return active ? Color("fresh") : Color("WidgetSecondaryBackground") - case .customPreset: - return active ? Color("glucose") : Color("WidgetSecondaryBackground") + if widgetRenderingMode == .accented { + Color(UIColor.systemBackground).opacity(active ? 0.45 : 0.15) + } else { + switch destination { + case .carbEntry: + active ? Color("fresh") : Color("WidgetSecondaryBackground") + case .bolus: + active ? Color("insulin") : Color("WidgetSecondaryBackground") + case .preMeal: + active ? Color("fresh") : Color("WidgetSecondaryBackground") + case .customPreset: + active ? Color("glucose") : Color("WidgetSecondaryBackground") + } } } @@ -73,10 +81,8 @@ struct SystemActionLink: View { icon .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .foregroundColor(foregroundColor(active: active)) - .background( - ContainerRelativeShape() - .fill(backgroundColor(active: active)) - ) + .background(backgroundColor(active: active)) + .clipShape(ContainerRelativeShape()) } } } diff --git a/Loop Widget Extension/LoopWidgets.swift b/Loop Widget Extension/LoopWidgets.swift index 26f92edb45..a7065deb4a 100644 --- a/Loop Widget Extension/LoopWidgets.swift +++ b/Loop Widget Extension/LoopWidgets.swift @@ -13,6 +13,8 @@ struct LoopWidgets: WidgetBundle { @WidgetBundleBuilder var body: some Widget { - SystemStatusWidget() + if #available(iOS 16.1, *) { + SystemStatusWidget() + } } } diff --git a/Loop Widget Extension/Widgets/SystemStatusWidget.swift b/Loop Widget Extension/Widgets/SystemStatusWidget.swift index a64096d2ad..015f6c5d50 100644 --- a/Loop Widget Extension/Widgets/SystemStatusWidget.swift +++ b/Loop Widget Extension/Widgets/SystemStatusWidget.swift @@ -10,9 +10,11 @@ import LoopUI import SwiftUI import WidgetKit +@available(iOS 16.1, *) struct SystemStatusWidgetEntryView : View { @Environment(\.widgetFamily) private var widgetFamily + @Environment(\.widgetRenderingMode) private var widgetRenderingMode var entry: StatusWidgetTimelineProvider.Entry @@ -27,17 +29,21 @@ struct SystemStatusWidgetEntryView : View { .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .padding(5) .background( - ContainerRelativeShape() - .fill(Color("WidgetSecondaryBackground")) + widgetRenderingMode == .accented + ? Color(UIColor.systemBackground).opacity(0.15) + : Color("WidgetSecondaryBackground") ) + .clipShape(ContainerRelativeShape()) PumpView(entry: entry) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .padding(5) .background( - ContainerRelativeShape() - .fill(Color("WidgetSecondaryBackground")) + widgetRenderingMode == .accented + ? Color(UIColor.systemBackground).opacity(0.15) + : Color("WidgetSecondaryBackground") ) + .clipShape(ContainerRelativeShape()) } if widgetFamily != .systemSmall { @@ -66,6 +72,7 @@ struct SystemStatusWidgetEntryView : View { } } +@available(iOS 16.1, *) struct SystemStatusWidget: Widget { let kind: String = "SystemStatusWidget" From 6fa92d31daecbfcf336e81a5682022c8ec1badd6 Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Thu, 18 Sep 2025 20:39:44 -0500 Subject: [PATCH 14/41] Clear bolus recommendation on initial edit --- Loop/Views/BolusEntryView.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Loop/Views/BolusEntryView.swift b/Loop/Views/BolusEntryView.swift index ab2e6d3f76..fecd2365c4 100644 --- a/Loop/Views/BolusEntryView.swift +++ b/Loop/Views/BolusEntryView.swift @@ -248,7 +248,11 @@ struct BolusEntryView: View { .multilineTextAlignment(.trailing) .foregroundColor(.loopAccent) .focused($bolusFieldFocused) - .onTapGesture { didBeginEditing() } + .onChange(of: bolusFieldFocused) { focused in + if focused { + didBeginEditing() + } + } .onChange(of: enteredBolusString) { newValue in if newValue.count > 5 { enteredBolusString = String(newValue.prefix(5)) From d28434ded13318ea0bddb9238e78a96d5ebaba26 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 20 Sep 2025 17:33:45 -0700 Subject: [PATCH 15/41] support audio for pump managers that use silent audio for keep-alive --- Loop/Info.plist | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Loop/Info.plist b/Loop/Info.plist index 5b70f7a45d..024c483497 100644 --- a/Loop/Info.plist +++ b/Loop/Info.plist @@ -83,9 +83,10 @@ bluetooth-central processing remote-notification + audio - UIDesignRequiresCompatibility - + UIDesignRequiresCompatibility + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile From eff86a577b1d97a4bc582eef35b0ff74b5a48647 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 23 Sep 2025 16:50:13 -0700 Subject: [PATCH 16/41] Updated translations from lokalise on Tue Sep 23 15:51:19 PDT 2025 --- Loop Status Extension/Localizable.xcstrings | 8 +- .../Bootstrap/Localizable.xcstrings | 6 + Loop/InfoPlist.xcstrings | 12 + Loop/Localizable.xcstrings | 386 +++++++++++++++++- LoopCore/Localizable.xcstrings | 12 + WatchApp Extension/Localizable.xcstrings | 24 ++ 6 files changed, 440 insertions(+), 8 deletions(-) diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings index f718ea939c..0f8e14b26c 100644 --- a/Loop Status Extension/Localizable.xcstrings +++ b/Loop Status Extension/Localizable.xcstrings @@ -441,7 +441,7 @@ "nb" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ v %2$@" + "value" : "%1$@ v%2$@" } }, "nl" : { @@ -616,6 +616,12 @@ "state" : "translated", "value" : "Lượng Carbs còn hoạt động" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物" + } } } }, diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings index 9b801bad0e..3e7f32b416 100644 --- a/Loop Widget Extension/Bootstrap/Localizable.xcstrings +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -1351,6 +1351,12 @@ "state" : "translated", "value" : "Mevcut kan şekerinizi ve insülin iletiminizi görün." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查看您当前的血糖值和胰岛素输注情况。" + } } } }, diff --git a/Loop/InfoPlist.xcstrings b/Loop/InfoPlist.xcstrings index b7fa6d3a0d..0b3fc7e40c 100644 --- a/Loop/InfoPlist.xcstrings +++ b/Loop/InfoPlist.xcstrings @@ -298,6 +298,12 @@ "state" : "translated", "value" : "Aplikacja wykorzystuje NFC do parowania z urządzeniami dla diabetyków." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "该应用程序使用 NFC 与糖尿病设备配对。" + } } } }, @@ -1137,6 +1143,12 @@ "state" : "translated", "value" : "Loop, ön ayarları sesinizle gerçekleştirmenize izin vermek için Siri'yi kullanır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 使用 Siri 允许您通过语音制定预设。" + } } } } diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 860aff760a..61ebdfec58 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1200,6 +1200,12 @@ "state" : "translated", "value" : "%1$@ %2$@ , ayarladığınız yeni Maks Bazal limitinden daha yüksek olan mevcut geçici bazal oranınızı iptal edemedi. Bu, istenenden daha yüksek insülin iletimi ile sonuçlanabilir. \n\n İnsülin iletimini manuel olarak askıya almayı ve ardından yeni limit geçerliyken bazal iletimi etkinleştirmek için hemen devam etmeyi düşünün." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ 无法取消当前的临时基础率,该基础率高于您新设定的最大基础率上限。这可能导致胰岛素输注量高于预期。\n\n建议您手动暂停胰岛素输注,然后立即恢复,以便根据新的上限重新执行基础输注。" + } } } }, @@ -1211,6 +1217,12 @@ "state" : "new", "value" : "%1$1@%2$2@" } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$1@%2$2@" + } } } }, @@ -1896,6 +1908,12 @@ "state" : "translated", "value" : "%1$@ , uyarıyı cihazınızdan silemiyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 无法清除您设备上的警报。" + } } } }, @@ -1985,6 +2003,12 @@ "state" : "translated", "value" : "%1$@ insülin pompanızla iletişim kuramıyor. Uygulama pompanıza ulaşmaya çalışmaya devam edecek, ancak insülin iletim bilgileri güncellenemeyecek ve hiçbir otomasyon devam edemeyecektir.\nSorunun çözülüp çözülmediğini görmek için birkaç dakika bekleyebilir veya diğer seçenekler hakkında daha fazla bilgi edinmek için aşağıdaki butona dokunabilirsiniz." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 无法与您的胰岛素泵通信。应用将继续尝试连接胰岛素泵,但当前无法更新胰岛素输注信息,也无法继续自动化操作。\n\n您可以等待几分钟以观察问题是否自动恢复,或点击下方按钮了解其他可选操作。" + } } } }, @@ -2707,6 +2731,12 @@ "state" : "translated", "value" : "%1$@ перестанет работать в %2$@. До этого времени необходимо пересобрать приложение заново." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@将在%2$@停止工作。您需要在此之前重建。" + } } } }, @@ -4002,11 +4032,31 @@ "state" : "translated", "value" : "Bolus iletilmeden önce bir pompanın yapılandırılması gerek." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在注射追加胰岛素前,必须先配置胰岛素泵。" + } } } }, "Absorption Time" : { - "comment" : "Label for food absorption entry on add favorite food screen" + "comment" : "Label for food absorption entry on add favorite food screen", + "localizations" : { + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Absorpsjonstid" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "吸收时间" + } + } + } }, "AcceptRecommendedBolus" : { "comment" : "Action to copy the recommended Bolus value to the actual Bolus Field", @@ -4513,6 +4563,12 @@ "state" : "translated", "value" : "Lượng Carbs còn hoạt động" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物" + } } } }, @@ -4805,6 +4861,12 @@ "state" : "translated", "value" : "Dodaj nowe ulubione jedzenie" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加喜欢的食物" + } } } }, @@ -5398,7 +5460,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Add Service" + "value" : "添加服务" } } } @@ -5989,6 +6051,12 @@ "state" : "translated", "value" : "Ilość węglowodanów" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "摄入量" + } } } }, @@ -6186,6 +6254,12 @@ "state" : "translated", "value" : "Aktif bir geçersiz kılma, karbonhidrat oranınızı ve insülin duyarlılığınızı değiştiriyor. Bunun bolus hesaplamanızı ve öngörülen glikozu etkilemesini istemiyorsanız geçersiz kılmayı kapatmayı düşünün." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前启用的覆盖设置正在修改您的碳水比和胰岛素敏感系数。\n如果您不希望其影响追加胰岛素计算和预测血糖,请考虑关闭该覆盖设置。" + } } } }, @@ -6269,6 +6343,12 @@ "state" : "translated", "value" : "Karbonhidrat girişinizi kaydetmeye çalışırken bir hata oluştu." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存碳水记录时出错了。" + } } } }, @@ -6506,6 +6586,12 @@ "state" : "translated", "value" : "Güncellenmiş bir bolus önerisi mevcuttur." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已生成新地追加胰岛素建议" + } } } }, @@ -6863,7 +6949,27 @@ } }, "Apple" : { - "comment" : "Default name on add favorite food screen" + "comment" : "Default name on add favorite food screen", + "localizations" : { + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mela" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eple" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "苹果" + } + } + } }, "Are you sure you want to delete all history entries?" : { "comment" : "Action sheet confirmation message for pump history deletion", @@ -8194,6 +8300,12 @@ "state" : "translated", "value" : "Tahmini KŞ'ne bağlı olarak bolus önerilmez." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "根据您的预测血糖值,当前不建议注射追加胰岛素。" + } } } }, @@ -8722,6 +8834,12 @@ "state" : "translated", "value" : "Bolus Sorunu" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素问题" + } } } }, @@ -8811,6 +8929,12 @@ "state" : "translated", "value" : "Bolus Önerisi Güncellendi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素建议已更新" + } } } }, @@ -8900,6 +9024,12 @@ "state" : "translated", "value" : "Bolus Özeti" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素汇总" + } } } }, @@ -8977,6 +9107,12 @@ "state" : "translated", "value" : "Bolus Çok Küçük" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素剂量过小" + } } } }, @@ -9703,11 +9839,31 @@ "state" : "translated", "value" : "Karb Girişi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水记录" + } } } }, "Carb Quantity" : { - "comment" : "Label for carb quantity row on add favorite food screen" + "comment" : "Label for carb quantity row on add favorite food screen", + "localizations" : { + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati Assunti" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水含量" + } + } + } }, "Carb Ratio Schedule" : { "comment" : "Details for configuration error when carb ratio schedule is missing", @@ -11221,6 +11377,12 @@ "state" : "translated", "value" : "Lựa chọn khoảng thời gian tiêu hóa dài hơn cho các bữa ăn no, hoặc những bữa ăn nhiều chất béo và protein. Đây chỉ là hướng dẫn cho thuật toán Algorithm và không cần phải chính xác." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "对于大餐或含有脂肪和蛋白质的餐食,请选择较长的吸收时间。此设置仅作为算法的参考, 无需精确。" + } } } }, @@ -15059,6 +15221,12 @@ "state" : "translated", "value" : "Bu yemek için karbonhidrat miktarı olarak %1$@ gram girmeyi düşündünüz mü?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你是想输入%1$@克作为此餐的碳水化合物含量?" + } } } }, @@ -15557,6 +15725,12 @@ "state" : "translated", "value" : "Dozlama Stratejisi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "给药策略" + } } } }, @@ -15989,6 +16163,12 @@ "state" : "translated", "value" : "Önerilen bolus miktarı için bir ölçüm cihazından bir kan şekeri girin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入血糖仪测得的血糖值,以获取推荐的追加胰岛素剂量。" + } } } }, @@ -16072,6 +16252,12 @@ "state" : "translated", "value" : "Bolus girin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入追加胰岛素剂量" + } } } }, @@ -17013,6 +17199,12 @@ "state" : "translated", "value" : "Ayarlarda izin verilen maksimum bolusu aşıyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "超出设定的最大追加胰岛素剂量限制" + } } } }, @@ -17462,7 +17654,15 @@ } }, "Favorite Foods" : { - "comment" : "Title for Favorite Foods view" + "comment" : "Title for Favorite Foods view", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "喜欢的食物" + } + } + } }, "FAVORITE FOODS" : { "comment" : "The section title for Carb entry screen where Favorite Foods can be selected", @@ -17502,6 +17702,12 @@ "state" : "translated", "value" : "ULUBIONE JEDZENIE" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "喜欢的食物" + } } } }, @@ -17847,6 +18053,12 @@ "state" : "translated", "value" : "Тип еды" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "食物类型" + } } } }, @@ -21071,6 +21283,12 @@ "state" : "translated", "value" : "Nieprawidłowy czas absorpcji: %1$@ godz" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无效的吸收时间:%1$@ 小时" + } } } }, @@ -21142,6 +21360,12 @@ "state" : "translated", "value" : "Geçersiz Bolus Miktarı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素剂量无效" + } } } }, @@ -21834,6 +22058,12 @@ "state" : "translated", "value" : "Büyük Yemek Girildi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已记录大份餐食" + } } } }, @@ -22822,6 +23052,12 @@ "state" : "translated", "value" : "Loop, Bluetooth ayarlarınızla ilgili bir sorun algıladı ve Bluetooth etkinleştirilene kadar başarılı bir şekilde çalışmayacaktır. KŞ okumaları almayacaksınız veya bolus yapamayacaksınız." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 检测到您的蓝牙设置存在问题,在蓝牙启用之前将无法正常工作。\n您将无法接收血糖读数,也无法注射追加胰岛素。" + } } } }, @@ -23016,7 +23252,21 @@ } }, "Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." : { - "comment" : "Description of Glucose Based Partial Application toggle." + "comment" : "Description of Glucose Based Partial Application toggle.", + "localizations" : { + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop gir normalt 40 % av det forventede insulinbehovet ditt i hver doseringssyklus. Når eksperimentet Glukosebasert delvis tilførsel er aktivert, vil Loop variere prosentandelen av anbefalt bolus som gis i hver syklus med glukosenivået.\n\nI nærheten av korreksjonsområdet vil den bruke 20 % (på samme måte som Temp Basal), og gradvis øke til maksimalt 80 % ved høyt glukosenivå (200 mg/dL, 11,1 mmol/L). Vær oppmerksom på at ved raskt stigende glukose, for eksempel etter et uanmeldt måltid, kan denne funksjonen, kombinert med hastighet og retrospektive korreksjonseffekter, resultere i en større dose enn det ISF-en din ville ha krevd." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 通常在每个给药周期中提供您预测胰岛素需求的 40%。\n\n启用“基于血糖的部分给药实验功能”后,Loop 将根据血糖水平调整每个周期实际注射的推荐追加胰岛素比例。\n\n当血糖接近矫正目标范围时,仅注射 20%(类似于临时基础率),血糖升高时比例会逐步增加,在高血糖状态(200 mg/dL,11.1 mmol/L)时最高可达 80%。\n\n请注意,当血糖快速上升(例如未申报的进食)时,该功能与血糖变化速度及回顾性矫正机制叠加,可能导致注射剂量超过由胰岛素敏感系数(ISF)计算出的剂量。" + } + } + } }, "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." : { "comment" : "Description string for automatic bolus dosing strategy", @@ -23098,6 +23348,12 @@ "state" : "translated", "value" : "Loop, insülin ihtiyaçları programlanan bazalın üzerine çıktığında otomatik olarak bolus yapacak ve gerektiğinde insülin iletimini programlanan bazalın altına düşürmek için geçici bazal oranları kullanacaktır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当所需胰岛素高于计划基础率时,Loop 将自动注射追加胰岛素;当所需胰岛素低于计划基础率时,则使用临时基础率以减少胰岛素输注" + } } } }, @@ -23264,6 +23520,12 @@ "state" : "translated", "value" : "Loop, insülin iletimini artırmak ve azaltmak için geçici bazal oranlar ayarlayacaktır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 将设置临时基础率,以增加或减少胰岛素输注。" + } } } }, @@ -23886,6 +24148,12 @@ "state" : "translated", "value" : "Yemek Bolusu" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "餐时注射" + } } } }, @@ -25043,7 +25311,15 @@ } }, "New Favorite Food" : { - "comment" : "Title of new favorite food screen" + "comment" : "Title of new favorite food screen", + "localizations" : { + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ny favorittmat" + } + } + } }, "Nightscout" : { "comment" : "The title of the Nightscout service", @@ -25678,6 +25954,12 @@ "state" : "translated", "value" : "Son KŞ Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无近期血糖数据" + } } } }, @@ -25767,6 +26049,12 @@ "state" : "translated", "value" : "Son KŞ Verisi Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无近期血糖数据记录" + } } } }, @@ -25856,6 +26144,12 @@ "state" : "translated", "value" : "Son Pompa Verisi Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有最近的泵数据" + } } } }, @@ -25933,6 +26227,12 @@ "state" : "translated", "value" : "Hayır, miktarı düzenle" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "不,编辑摄入量" + } } } }, @@ -26823,6 +27123,12 @@ "state" : "translated", "value" : "OK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "好的" + } } } }, @@ -30287,6 +30593,12 @@ "state" : "translated", "value" : "Önerilen Bolus Maksimum Bolusu Aşıyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐追加胰岛素剂量超出最大限制" + } } } }, @@ -31057,6 +31369,12 @@ "state" : "translated", "value" : "Zapisz jako ulubione jedzenie" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存为喜欢的食物" + } } } }, @@ -31074,6 +31392,12 @@ "state" : "translated", "value" : "Lagre og gi bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存碳水摄入量并开始注射" + } } } }, @@ -31163,6 +31487,12 @@ "state" : "translated", "value" : "Bolus olmadan Kaydet" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "仅保存,不注射追加胰岛素" + } } } }, @@ -31274,6 +31604,12 @@ "state" : "translated", "value" : "Wybór ulubionego jedzenia na ekranie wprowadzania węglowodanów powoduje automatyczne wypełnienie pól ilości węglowodanów, rodzaju jedzenia i czasu wchłaniania! Dotknij przycisku dodawania poniżej, aby stworzyć swoje pierwsze ulubione jedzenie!" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在碳水记录界面选择一个常用食物时,系统会自动填充碳水含量、食物类型和吸收时间等字段!点击下方的添加按钮,创建你的第一个常用食物吧!" + } } } }, @@ -33169,6 +33505,12 @@ "state" : "translated", "value" : "Eklemek için dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击添加" + } } } }, @@ -33377,6 +33719,12 @@ "state" : "translated", "value" : "Durdurmak için dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击停止" + } } } }, @@ -34562,6 +34910,12 @@ "state" : "translated", "value" : "Эта опция применима только в том случае, если для стратегии дозирования петли установлено значение «Автоматический болюс»." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "此选项仅在 Loop 的给药策略设为“自动追加胰岛素”时适用。" + } } } }, @@ -35318,6 +35672,12 @@ "state" : "translated", "value" : "Karb Girişi Kaydedilemiyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存碳水记录" + } } } }, @@ -37799,6 +38159,12 @@ "state" : "translated", "value" : "Evet" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "是" + } } } }, @@ -38516,6 +38882,12 @@ "state" : "translated", "value" : "Pompa verileriniz eski. %1$@ bir bolus miktarı öneremez." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的胰岛素泵数据已过期。%1$@ 无法推荐追加胰岛素剂量。" + } } } }, diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index 6935e0de67..741f9a599e 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -200,6 +200,12 @@ "state" : "translated", "value" : "Otomatik Bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动追加胰岛素" + } } } }, @@ -283,6 +289,12 @@ "state" : "translated", "value" : "Sadece Geçici Bazal" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "仅临时基础率" + } } } } diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index 137a2f7d6e..86db4bddfa 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -1121,6 +1121,12 @@ "state" : "translated", "value" : "Bolus Önerisi Güncellendi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素建议已更新" + } } } }, @@ -2393,6 +2399,12 @@ "state" : "translated", "value" : "OK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "好的" + } } } }, @@ -3674,6 +3686,12 @@ "state" : "translated", "value" : "Kaydet & Bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存并注射追加胰岛素" + } } } }, @@ -3876,6 +3894,12 @@ "state" : "translated", "value" : "Digital Crown'u bolusa\nçevirin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "旋转数字表冠\n以注射追加胰岛素" + } } } }, From 8817c9da314da01e180015937e4dec931287a5b8 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 3 Oct 2025 16:13:08 -0700 Subject: [PATCH 17/41] add ce, hu, uk languages --- Loop.xcodeproj/project.pbxproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 412ad40359..8aa472efd9 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -2982,6 +2982,9 @@ sk, cs, hi, + ce, + hu, + uk, ); mainGroup = 43776F831B8022E90074EA36; packageReferences = ( From 21c8e64d8d332d92938d9748f439c9e61dc6c3fd Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 3 Oct 2025 16:19:20 -0700 Subject: [PATCH 18/41] add fake translated words to new languages in Loop --- Loop/Localizable.xcstrings | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 860aff760a..8af62d21da 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -219,6 +219,12 @@ " remaining" : { "comment" : "remaining time in setting's profile expiration section", "localizations" : { + "ce" : { + "stringUnit" : { + "state" : "translated", + "value" : "remaining" + } + }, "cs" : { "stringUnit" : { "state" : "translated", @@ -255,6 +261,12 @@ "value" : "נותר" } }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "remaining" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -296,6 +308,12 @@ "state" : "translated", "value" : "kalan" } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "remaining" + } } } }, From da1231a864fe47ecbc028e1c9dc9b1f9b0f2433f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 3 Oct 2025 21:01:59 -0700 Subject: [PATCH 19/41] Updated translations from lokalise on Fri Oct 3 19:52:42 PDT 2025 --- Loop Status Extension/Localizable.xcstrings | 8 +- .../Bootstrap/Localizable.xcstrings | 6 + Loop/InfoPlist.xcstrings | 12 + Loop/Localizable.xcstrings | 850 +++++++++++++++++- LoopCore/Localizable.xcstrings | 12 + LoopUI/Localizable.xcstrings | 62 +- WatchApp Extension/Localizable.xcstrings | 36 + WatchApp/mul.lproj/Interface.xcstrings | 2 +- 8 files changed, 971 insertions(+), 17 deletions(-) diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings index f718ea939c..0f8e14b26c 100644 --- a/Loop Status Extension/Localizable.xcstrings +++ b/Loop Status Extension/Localizable.xcstrings @@ -441,7 +441,7 @@ "nb" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ v %2$@" + "value" : "%1$@ v%2$@" } }, "nl" : { @@ -616,6 +616,12 @@ "state" : "translated", "value" : "Lượng Carbs còn hoạt động" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物" + } } } }, diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings index 9b801bad0e..3e7f32b416 100644 --- a/Loop Widget Extension/Bootstrap/Localizable.xcstrings +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -1351,6 +1351,12 @@ "state" : "translated", "value" : "Mevcut kan şekerinizi ve insülin iletiminizi görün." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "查看您当前的血糖值和胰岛素输注情况。" + } } } }, diff --git a/Loop/InfoPlist.xcstrings b/Loop/InfoPlist.xcstrings index b7fa6d3a0d..a024091695 100644 --- a/Loop/InfoPlist.xcstrings +++ b/Loop/InfoPlist.xcstrings @@ -298,6 +298,12 @@ "state" : "translated", "value" : "Aplikacja wykorzystuje NFC do parowania z urządzeniami dla diabetyków." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "该应用程序使用 NFC 与糖尿病设备配对。" + } } } }, @@ -1137,6 +1143,12 @@ "state" : "translated", "value" : "Loop, ön ayarları sesinizle gerçekleştirmenize izin vermek için Siri'yi kullanır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 使用 Siri,让你可以通过语音来启动预设。" + } } } } diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 8af62d21da..76a55bdcd4 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1218,6 +1218,12 @@ "state" : "translated", "value" : "%1$@ %2$@ , ayarladığınız yeni Maks Bazal limitinden daha yüksek olan mevcut geçici bazal oranınızı iptal edemedi. Bu, istenenden daha yüksek insülin iletimi ile sonuçlanabilir. \n\n İnsülin iletimini manuel olarak askıya almayı ve ardından yeni limit geçerliyken bazal iletimi etkinleştirmek için hemen devam etmeyi düşünün." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@%@ 无法取消当前的临时基础率,该基础率高于您新设定的最大基础率上限。这可能导致胰岛素输注量高于预期。\n\n建议您手动暂停胰岛素输注,然后立即恢复,以便根据新的上限重新执行基础输注。" + } } } }, @@ -1229,6 +1235,12 @@ "state" : "new", "value" : "%1$1@%2$2@" } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$1@%2$2@" + } } } }, @@ -1843,6 +1855,12 @@ "state" : "translated", "value" : "%1$@ , KAPALI konumda Kapalı Döngü ile çalışıyor. Pompanız ve CGM çalışmaya devam edecek, ancak uygulama dozajı otomatik olarak ayarlamayacaktır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 当前处于非闭环模式。胰岛素泵和连续血糖监测仪仍将正常运行,但应用程序不会自动调整胰岛素剂量。" + } } } }, @@ -1914,6 +1932,12 @@ "state" : "translated", "value" : "%1$@ , uyarıyı cihazınızdan silemiyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 无法清除您设备上的警报。" + } } } }, @@ -2003,6 +2027,12 @@ "state" : "translated", "value" : "%1$@ insülin pompanızla iletişim kuramıyor. Uygulama pompanıza ulaşmaya çalışmaya devam edecek, ancak insülin iletim bilgileri güncellenemeyecek ve hiçbir otomasyon devam edemeyecektir.\nSorunun çözülüp çözülmediğini görmek için birkaç dakika bekleyebilir veya diğer seçenekler hakkında daha fazla bilgi edinmek için aşağıdaki butona dokunabilirsiniz." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 无法与您的胰岛素泵通信。应用将继续尝试连接胰岛素泵,但当前无法更新胰岛素输注信息,也无法继续自动化操作。\n\n您可以等待几分钟以观察问题是否自动恢复,或点击下方按钮了解其他可选操作。" + } } } }, @@ -2725,6 +2755,12 @@ "state" : "translated", "value" : "%1$@ перестанет работать в %2$@. До этого времени необходимо пересобрать приложение заново." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@将在%2$@停止工作。您需要在此之前重建。" + } } } }, @@ -3793,7 +3829,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "基于已公布的Humalog,Novolog和Apidra胰岛素在成人中吸收的模型。" + "value" : "基于已发表的成人使用优泌乐、诺和锐和爱倍达胰岛素吸收数据的模型。" } } } @@ -4020,11 +4056,31 @@ "state" : "translated", "value" : "Bolus iletilmeden önce bir pompanın yapılandırılması gerek." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在注射追加胰岛素前,必须先配置胰岛素泵。" + } } } }, "Absorption Time" : { - "comment" : "Label for food absorption entry on add favorite food screen" + "comment" : "Label for food absorption entry on add favorite food screen", + "localizations" : { + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Absorpsjonstid" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "吸收时间" + } + } + } }, "AcceptRecommendedBolus" : { "comment" : "Action to copy the recommended Bolus value to the actual Bolus Field", @@ -4531,6 +4587,12 @@ "state" : "translated", "value" : "Lượng Carbs còn hoạt động" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水化合物" + } } } }, @@ -4823,6 +4885,12 @@ "state" : "translated", "value" : "Dodaj nowe ulubione jedzenie" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "添加喜欢的食物" + } } } }, @@ -5416,7 +5484,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Add Service" + "value" : "添加服务" } } } @@ -5571,6 +5639,12 @@ "state" : "translated", "value" : "Uyarı Yönetimi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "警报管理" + } } } }, @@ -5654,6 +5728,12 @@ "state" : "translated", "value" : "Uyarı İzinleri" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "警报权限" + } } } }, @@ -5689,6 +5769,12 @@ "state" : "translated", "value" : "Разрешения на оповещения и отключение звука оповещений" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "警报权限与静音设置" + } } } }, @@ -6007,6 +6093,12 @@ "state" : "translated", "value" : "Ilość węglowodanów" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "摄入量" + } } } }, @@ -6204,6 +6296,12 @@ "state" : "translated", "value" : "Aktif bir geçersiz kılma, karbonhidrat oranınızı ve insülin duyarlılığınızı değiştiriyor. Bunun bolus hesaplamanızı ve öngörülen glikozu etkilemesini istemiyorsanız geçersiz kılmayı kapatmayı düşünün." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前启用的覆盖设置正在修改您的碳水比和胰岛素敏感系数。\n如果您不希望其影响追加胰岛素计算和预测血糖,请考虑关闭该覆盖设置。" + } } } }, @@ -6287,6 +6385,12 @@ "state" : "translated", "value" : "Karbonhidrat girişinizi kaydetmeye çalışırken bir hata oluştu." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存碳水记录时出错了。" + } } } }, @@ -6524,6 +6628,12 @@ "state" : "translated", "value" : "Güncellenmiş bir bolus önerisi mevcuttur." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已有更新的大剂量推荐值。" + } } } }, @@ -6881,7 +6991,33 @@ } }, "Apple" : { - "comment" : "Default name on add favorite food screen" + "comment" : "Default name on add favorite food screen", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apfel" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mela" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Eple" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "苹果" + } + } + } }, "Are you sure you want to delete all history entries?" : { "comment" : "Action sheet confirmation message for pump history deletion", @@ -8212,6 +8348,12 @@ "state" : "translated", "value" : "Tahmini KŞ'ne bağlı olarak bolus önerilmez." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "根据您的预测血糖值,当前不建议注射追加胰岛素。" + } } } }, @@ -8740,6 +8882,12 @@ "state" : "translated", "value" : "Bolus Sorunu" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素问题" + } } } }, @@ -8829,6 +8977,12 @@ "state" : "translated", "value" : "Bolus Önerisi Güncellendi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量推荐值已更新" + } } } }, @@ -8918,6 +9072,12 @@ "state" : "translated", "value" : "Bolus Özeti" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量汇总" + } } } }, @@ -8995,6 +9155,12 @@ "state" : "translated", "value" : "Bolus Çok Küçük" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素剂量过小" + } } } }, @@ -9721,11 +9887,31 @@ "state" : "translated", "value" : "Karb Girişi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水记录" + } } } }, "Carb Quantity" : { - "comment" : "Label for carb quantity row on add favorite food screen" + "comment" : "Label for carb quantity row on add favorite food screen", + "localizations" : { + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Carboidrati Assunti" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水含量" + } + } + } }, "Carb Ratio Schedule" : { "comment" : "Details for configuration error when carb ratio schedule is missing", @@ -11239,6 +11425,12 @@ "state" : "translated", "value" : "Lựa chọn khoảng thời gian tiêu hóa dài hơn cho các bữa ăn no, hoặc những bữa ăn nhiều chất béo và protein. Đây chỉ là hướng dẫn cho thuật toán Algorithm và không cần phải chính xác." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "对于大餐或含有脂肪和蛋白质的餐食,请选择较长的吸收时间。此设置仅作为算法的参考, 无需精确。" + } } } }, @@ -11396,7 +11588,7 @@ "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Boucle Fermé" + "value" : "Boucle Fermée" } }, "he" : { @@ -11474,7 +11666,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "开启闭环" + "value" : "闭环模式" } } } @@ -11559,6 +11751,12 @@ "state" : "translated", "value" : "Kapalı Döngü KAPALI" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "闭环模式已关闭" + } } } }, @@ -11642,6 +11840,12 @@ "state" : "translated", "value" : "Kapalı Döngü, aktif bir CGM Sensör Oturumu gerektirir" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "闭环需要活动的 CGM 传感器会话" + } } } }, @@ -11713,6 +11917,12 @@ "state" : "translated", "value" : "Kapalı Döngü, Kurulumun Tamamlanmasını gerektirir" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用闭环控制前需完成所有设置。" + } } } }, @@ -12648,7 +12858,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "连续葡萄糖监测" + "value" : "连续血糖监测仪" } } } @@ -12888,6 +13098,12 @@ "state" : "translated", "value" : "Kritik Uyarılar" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "关键通知" + } } } }, @@ -13554,6 +13770,12 @@ "state" : "translated", "value" : "Özel Ön Ayar" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义预设" + } } } }, @@ -13880,6 +14102,12 @@ "state" : "translated", "value" : "Sil" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除" + } } } }, @@ -14785,6 +15013,12 @@ "state" : "translated", "value" : "İlet" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输注" + } } } }, @@ -15077,6 +15311,12 @@ "state" : "translated", "value" : "Bu yemek için karbonhidrat miktarı olarak %1$@ gram girmeyi düşündünüz mü?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你是想输入%1$@克作为此餐的碳水化合物含量?" + } } } }, @@ -15309,6 +15549,12 @@ "state" : "translated", "value" : "Từ bỏ" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "忽略" + } } } }, @@ -15575,6 +15821,12 @@ "state" : "translated", "value" : "Dozlama Stratejisi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "给药策略" + } } } }, @@ -16007,6 +16259,12 @@ "state" : "translated", "value" : "Önerilen bolus miktarı için bir ölçüm cihazından bir kan şekeri girin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入血糖仪测得的血糖值,以获取推荐的追加胰岛素剂量。" + } } } }, @@ -16090,6 +16348,12 @@ "state" : "translated", "value" : "Bolus girin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入大剂量" + } } } }, @@ -16179,6 +16443,12 @@ "state" : "translated", "value" : "Parmak Ucu KŞ Girin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入指尖血糖值" + } } } }, @@ -16268,6 +16538,12 @@ "state" : "translated", "value" : "KŞ güvenlik limitini girin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入血糖安全下限" + } } } }, @@ -17031,6 +17307,12 @@ "state" : "translated", "value" : "Ayarlarda izin verilen maksimum bolusu aşıyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "超出设定的最大追加胰岛素剂量限制" + } } } }, @@ -17219,7 +17501,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "超过大剂量最大输注限制" + "value" : "超过大剂量上限" } } } @@ -17480,7 +17762,15 @@ } }, "Favorite Foods" : { - "comment" : "Title for Favorite Foods view" + "comment" : "Title for Favorite Foods view", + "localizations" : { + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "喜欢的食物" + } + } + } }, "FAVORITE FOODS" : { "comment" : "The section title for Carb entry screen where Favorite Foods can be selected", @@ -17520,6 +17810,12 @@ "state" : "translated", "value" : "ULUBIONE JEDZENIE" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "喜欢的食物" + } } } }, @@ -17644,7 +17940,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Fiasp" + "value" : "费雅普(Fiasp)" } } } @@ -17865,6 +18161,12 @@ "state" : "translated", "value" : "Тип еды" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "食物类型" + } } } }, @@ -18095,6 +18397,12 @@ "state" : "translated", "value" : "Öngörülen KŞ, hala hedef aralıktan yüksek olabilir." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测的血糖值可能仍高于目标范围。" + } } } }, @@ -18403,6 +18711,12 @@ "state" : "translated", "value" : "Uyarı İzinleri ile ilgili yardım alın" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "获取有关警报权限的帮助" + } } } }, @@ -19588,6 +19902,12 @@ "state" : "translated", "value" : "Acilen" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "实时" + } } } }, @@ -21089,6 +21409,12 @@ "state" : "translated", "value" : "Nieprawidłowy czas absorpcji: %1$@ godz" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无效的吸收时间:%1$@ 小时" + } } } }, @@ -21160,6 +21486,12 @@ "state" : "translated", "value" : "Geçersiz Bolus Miktarı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "追加胰岛素剂量无效" + } } } }, @@ -21237,6 +21569,12 @@ "state" : "translated", "value" : "Geçersiz karb miktarı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "碳水含量无效" + } } } }, @@ -21852,6 +22190,12 @@ "state" : "translated", "value" : "Büyük Yemek Girildi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已记录大份餐食" + } } } }, @@ -22638,6 +22982,12 @@ "state" : "translated", "value" : "Loop Çöktü" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "loop 崩溃了" + } } } }, @@ -22840,6 +23190,12 @@ "state" : "translated", "value" : "Loop, Bluetooth ayarlarınızla ilgili bir sorun algıladı ve Bluetooth etkinleştirilene kadar başarılı bir şekilde çalışmayacaktır. KŞ okumaları almayacaksınız veya bolus yapamayacaksınız." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 检测到您的蓝牙设置存在问题,在蓝牙启用之前将无法正常工作。\n您将无法接收血糖读数,也无法注射追加胰岛素。" + } } } }, @@ -22911,6 +23267,12 @@ "state" : "translated", "value" : "Loop atlanmış bir öğün tespit etti ve boyutunu tahmin etti. Yemiş olabileceğiniz karbonhidrat miktarına uyması için karbonhidrat miktarını düzenleyin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 检测到一次可能遗漏的进食,并估算了碳水量。请根据实际摄入情况修改碳水数值。" + } } } }, @@ -23034,7 +23396,21 @@ } }, "Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." : { - "comment" : "Description of Glucose Based Partial Application toggle." + "comment" : "Description of Glucose Based Partial Application toggle.", + "localizations" : { + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop gir normalt 40 % av det forventede insulinbehovet ditt i hver doseringssyklus. Når eksperimentet Glukosebasert delvis tilførsel er aktivert, vil Loop variere prosentandelen av anbefalt bolus som gis i hver syklus med glukosenivået.\n\nI nærheten av korreksjonsområdet vil den bruke 20 % (på samme måte som Temp Basal), og gradvis øke til maksimalt 80 % ved høyt glukosenivå (200 mg/dL, 11,1 mmol/L). Vær oppmerksom på at ved raskt stigende glukose, for eksempel etter et uanmeldt måltid, kan denne funksjonen, kombinert med hastighet og retrospektive korreksjonseffekter, resultere i en større dose enn det ISF-en din ville ha krevd." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 通常在每个给药周期中提供您预测胰岛素需求的 40%。\n\n启用“基于血糖的部分给药实验功能”后,Loop 将根据血糖水平调整每个周期实际注射的推荐追加胰岛素比例。\n\n当血糖接近矫正目标范围时,仅注射 20%(类似于临时基础率),血糖升高时比例会逐步增加,在高血糖状态(200 mg/dL,11.1 mmol/L)时最高可达 80%。\n\n请注意,当血糖快速上升(例如未申报的进食)时,该功能与血糖变化速度及回顾性矫正机制叠加,可能导致注射剂量超过由胰岛素敏感系数(ISF)计算出的剂量。" + } + } + } }, "Loop will automatically bolus when insulin needs are above scheduled basal, and will use temporary basal rates when needed to reduce insulin delivery below scheduled basal." : { "comment" : "Description string for automatic bolus dosing strategy", @@ -23116,6 +23492,12 @@ "state" : "translated", "value" : "Loop, insülin ihtiyaçları programlanan bazalın üzerine çıktığında otomatik olarak bolus yapacak ve gerektiğinde insülin iletimini programlanan bazalın altına düşürmek için geçici bazal oranları kullanacaktır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当所需胰岛素高于计划基础率时,Loop 将自动注射追加胰岛素;当所需胰岛素低于计划基础率时,则使用临时基础率以减少胰岛素输注" + } } } }, @@ -23282,6 +23664,12 @@ "state" : "translated", "value" : "Loop, insülin iletimini artırmak ve azaltmak için geçici bazal oranlar ayarlayacaktır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop 将设置临时基础率,以增加或减少胰岛素输注。" + } } } }, @@ -23359,6 +23747,12 @@ "state" : "translated", "value" : "Düşük KŞ" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "低血糖" + } } } }, @@ -23436,6 +23830,12 @@ "state" : "translated", "value" : "Ayarlarda İzinleri Yönetin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在系统设置中配置权限" + } } } }, @@ -23554,6 +23954,12 @@ "state" : "translated", "value" : "Manuel Doz: %1$@ %2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "手动剂量: %1$@ %2$@" + } } } }, @@ -23631,6 +24037,12 @@ "state" : "translated", "value" : "Saat Başı Maksimum Bazal Oran" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "每小时最大基础速率" + } } } }, @@ -23738,6 +24150,12 @@ "state" : "translated", "value" : "Liều Bolus tối đa" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大剂量" + } } } }, @@ -23815,6 +24233,12 @@ "state" : "translated", "value" : "Maksimum Bolus Aşıldı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "超过最大推注量" + } } } }, @@ -23904,6 +24328,12 @@ "state" : "translated", "value" : "Yemek Bolusu" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "餐时注射" + } } } }, @@ -24094,6 +24524,12 @@ "state" : "translated", "value" : "Kaçırılan Yemek Bildirimleri" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "错过用餐通知" + } } } }, @@ -24635,6 +25071,12 @@ "state" : "translated", "value" : "Thêm thông tin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "更多信息" + } } } }, @@ -24712,6 +25154,12 @@ "state" : "translated", "value" : "Tüm Uyarıları Sessize Al" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "静音所有警报" + } } } }, @@ -24747,6 +25195,12 @@ "state" : "translated", "value" : "Tymczasowo wycisz wszystkie alerty" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "暂时静音所有警报" + } } } }, @@ -25061,7 +25515,15 @@ } }, "New Favorite Food" : { - "comment" : "Title of new favorite food screen" + "comment" : "Title of new favorite food screen", + "localizations" : { + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ny favorittmat" + } + } + } }, "Nightscout" : { "comment" : "The title of the Nightscout service", @@ -25518,6 +25980,12 @@ "state" : "translated", "value" : "Yapılandırılmış Maksimum Bolus Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有设置最大推注量" + } } } }, @@ -25607,6 +26075,12 @@ "state" : "translated", "value" : "Yapılandırılmış Pompa Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未配置泵" + } } } }, @@ -25696,6 +26170,12 @@ "state" : "translated", "value" : "Son KŞ Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无近期血糖数据" + } } } }, @@ -25785,6 +26265,12 @@ "state" : "translated", "value" : "Son KŞ Verisi Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无近期血糖数据记录" + } } } }, @@ -25874,6 +26360,12 @@ "state" : "translated", "value" : "Son Pompa Verisi Yok" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有最近的泵数据" + } } } }, @@ -25951,6 +26443,12 @@ "state" : "translated", "value" : "Hayır, miktarı düzenle" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "不,编辑摄入量" + } } } }, @@ -26153,6 +26651,12 @@ "state" : "translated", "value" : "Bildirim Gönderimi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知推送类型" + } } } }, @@ -26307,6 +26811,12 @@ "state" : "translated", "value" : "Bildirimler" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知" + } } } }, @@ -26461,6 +26971,12 @@ "state" : "translated", "value" : "Bildirimler, uygulamayı açmanıza gerek kalmadan size önemli %1$@ uygulama bilgilerini verir." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知可在无需打开 %1$@ 应用的情况下,向你提供重要信息。" + } } } }, @@ -26538,6 +27054,12 @@ "state" : "translated", "value" : "Bildirimler, uygulamayı açmanıza gerek kalmadan size önemli %1$@ uygulama bilgilerini verir. \n\n %1$@ Bildirimler, Kritik Uyarılar ve Zamana Duyarlı Bildirimler aldığınızdan emin olmak için telefonunuzun ayarlarında bunları AÇIK durumda tutun." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "通知可在无需打开 %1$@ 应用的情况下,向你提供重要信息。\n\n请在手机设置中保持通知开启,以确保你能够接收 %1$@ 通知、关键通知和时效性通知。" + } } } }, @@ -26841,6 +27363,12 @@ "state" : "translated", "value" : "OK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "好的" + } } } }, @@ -27169,6 +27697,12 @@ "state" : "translated", "value" : "Muhtemel Kaçırılan Öğün" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "可能未进餐" + } } } }, @@ -27585,6 +28119,12 @@ "state" : "translated", "value" : "%1$@ tahmini KŞ, KŞ güvenlik limiti ayarınızın altında." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测血糖 %1$@ 低于你设定的血糖安全下限。" + } } } }, @@ -30228,6 +30768,12 @@ "state" : "translated", "value" : "Önerilen Bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐大剂量" + } } } }, @@ -30305,6 +30851,12 @@ "state" : "translated", "value" : "Önerilen Bolus Maksimum Bolusu Aşıyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐追加胰岛素剂量超出最大限制" + } } } }, @@ -31075,6 +31627,12 @@ "state" : "translated", "value" : "Zapisz jako ulubione jedzenie" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存为喜欢的食物" + } } } }, @@ -31092,6 +31650,12 @@ "state" : "translated", "value" : "Lagre og gi bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存碳水摄入量并开始注射" + } } } }, @@ -31181,6 +31745,12 @@ "state" : "translated", "value" : "Bolus olmadan Kaydet" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "仅保存,不注射追加胰岛素" + } } } }, @@ -31292,6 +31862,12 @@ "state" : "translated", "value" : "Wybór ulubionego jedzenia na ekranie wprowadzania węglowodanów powoduje automatyczne wypełnienie pól ilości węglowodanów, rodzaju jedzenia i czasu wchłaniania! Dotknij przycisku dodawania poniżej, aby stworzyć swoje pierwsze ulubione jedzenie!" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在碳水记录界面选择一个常用食物时,系统会自动填充碳水含量、食物类型和吸收时间等字段!点击下方的添加按钮,创建你的第一个常用食物吧!" + } } } }, @@ -32920,6 +33496,12 @@ "state" : "translated", "value" : "Bir CGM ayarlamak için buraya dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击此处设置 CGM" + } } } }, @@ -33009,6 +33591,12 @@ "state" : "translated", "value" : "Bir pompa ayarlamak için buraya dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击此处设置泵" + } } } }, @@ -33098,6 +33686,12 @@ "state" : "translated", "value" : "Bir Servis ayarlamak için buraya dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击此处设置服务" + } } } }, @@ -33187,6 +33781,12 @@ "state" : "translated", "value" : "Eklemek için dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击添加" + } } } }, @@ -33395,6 +33995,12 @@ "state" : "translated", "value" : "Durdurmak için dokunun" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击停止" + } } } }, @@ -33424,6 +34030,12 @@ "state" : "translated", "value" : "Stuknij, aby wyłączyć wyciszenie alertów" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点按可恢复警报提示" + } } } }, @@ -33582,6 +34194,12 @@ "state" : "translated", "value" : "Срок действия TestFlight истекает " } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight 到期 " + } } } }, @@ -33623,6 +34241,12 @@ "state" : "translated", "value" : "Срок действия TestFlight скоро истечет" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight 即将到期" + } } } }, @@ -33700,6 +34324,12 @@ "state" : "translated", "value" : "Girilen bolus miktarı, minimum teslim edilebilir miktardan daha küçük." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入的推注量小于最小可推注量。" + } } } }, @@ -33866,6 +34496,12 @@ "state" : "translated", "value" : "Bolus önerisi güncellendi. Lütfen bolus miktarını yeniden onaylayın." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量推荐值已更新。请重新确认推注剂量。" + } } } }, @@ -34069,6 +34705,12 @@ "state" : "translated", "value" : "İzin verilen maksimum miktar %@ gramdır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "允许的最大数量为%@克。" + } } } }, @@ -34235,6 +34877,12 @@ "state" : "translated", "value" : "Maksimum bolus miktarı %@ Ü." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最大推注量为:%@ U。" + } } } }, @@ -34359,7 +35007,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "大剂量输注最大限制为%@单位" + "value" : "大剂量推注最大限制为 %@ 单位" } } } @@ -34450,6 +35098,12 @@ "state" : "translated", "value" : "Bir bolus verilmeden önce maksimum bolus ayarı yapılandırılmalıdır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请先设置最大推注剂量,才能进行推注。" + } } } }, @@ -34539,6 +35193,12 @@ "state" : "translated", "value" : "Tedavi Ayarları" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "治疗设置" + } } } }, @@ -34580,6 +35240,12 @@ "state" : "translated", "value" : "Эта опция применима только в том случае, если для стратегии дозирования петли установлено значение «Автоматический болюс»." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "此选项仅在 Loop 的给药策略设为“自动追加胰岛素”时适用。" + } } } }, @@ -34697,6 +35363,12 @@ "state" : "translated", "value" : "Zamana Duyarlı Bildirimler" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "时效性通知" + } } } }, @@ -34826,6 +35498,12 @@ "state" : "translated", "value" : "Tekrar deneyin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "重试" + } } } }, @@ -35336,6 +36014,12 @@ "state" : "translated", "value" : "Karb Girişi Kaydedilemiyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "无法保存碳水记录" + } } } }, @@ -35728,6 +36412,12 @@ "state" : "translated", "value" : "Bilinmeyen Hata: %1$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未知错误:%1$@" + } } } }, @@ -35882,6 +36572,12 @@ "state" : "translated", "value" : "Bilinmeyen zaman" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "未知时间" + } } } }, @@ -35917,6 +36613,12 @@ "state" : "translated", "value" : "Включить звук" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消静音" + } } } }, @@ -35952,6 +36654,12 @@ "state" : "translated", "value" : "Включить звук оповещений?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "取消静音警报?" + } } } }, @@ -35987,6 +36695,12 @@ "state" : "translated", "value" : "Неподдерживаемая служба уведомлений: %1$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "不支持的通知服务:%1$@" + } } } }, @@ -36141,6 +36855,12 @@ "state" : "translated", "value" : "До %1$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "直到 %1$@" + } } } }, @@ -36230,6 +36950,12 @@ "state" : "translated", "value" : "Karb girene kadar" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在输入碳水前保持激活" + } } } }, @@ -36319,6 +37045,12 @@ "state" : "translated", "value" : "Ben kapatana kadar" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "直到我关闭" + } } } }, @@ -36448,6 +37180,12 @@ "state" : "translated", "value" : "Yemek Öncesi Ön Ayarı Kullanın" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用餐前预设" + } } } }, @@ -37036,6 +37774,12 @@ "state" : "translated", "value" : "Mevcut veya tahmin edilen KŞ, KŞ güvenlik sınırının altında olduğunda Loop bir bolus önermez ve her zaman saatte 0 ünite geçici bazal oran önerir." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前或预测的血糖低于血糖安全下限时,Loop 将不会推荐追加胰岛素,并始终建议将临时基础速率设为 0 单位/小时。" + } } } }, @@ -37233,6 +37977,12 @@ "state" : "translated", "value" : "Etkinleştirildiğinde Loop, günlüğe kaydedilmemiş bir öğün tespit ettiğinde sizi bilgilendirebilir." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用后,当 Loop 检测到疑似未记录的进餐时,会提醒你。" + } } } }, @@ -37402,6 +38152,12 @@ "state" : "translated", "value" : "При отключении звуковых сигналов ваша инсулиновая помпа и мониторинг могут продолжать издавать звуки." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当“静音警报”开启时,胰岛素泵和连续血糖监测(CGM)设备仍可能发出声音。" + } } } }, @@ -37817,6 +38573,12 @@ "state" : "translated", "value" : "Evet" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "是" + } } } }, @@ -37894,6 +38656,12 @@ "state" : "translated", "value" : "Kritik güvenlik bilgileriyle ilgili sesli, görsel veya titreşimli uyarılar alamayabilirsiniz. \n\n Sorunu çözmek için 'Ayarlar'a dokunun ve Bildirimlerin, Kritik Uyarıların ve Zamana Duyarlı Bildirimlerin AÇIK olduğundan emin olun." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你可能无法收到与关键安全信息相关的声音、视觉或震动警报。\n若要解决此问题,请点击“设置”,确保已开启通知、关键警报和时间敏感通知。" + } } } }, @@ -38048,6 +38816,12 @@ "state" : "translated", "value" : "KŞ %1$@ altında. Bolus yapmak istediğinizden emin misiniz?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的血糖低于%1$@。你确定要进行大剂量推注吗" + } } } }, @@ -38137,6 +38911,12 @@ "state" : "translated", "value" : "KŞ güvenlik sınırınızın %@ altındadır veya altına düşeceği tahmin edilmektedir." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你的血糖已低于或预计将低于你的血糖安全范围:%@。" + } } } }, @@ -38226,6 +39006,12 @@ "state" : "translated", "value" : "KŞ güvenlik sınırınızın altında, %1$@ ." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你的血糖已低于安全下限:%1$@。" + } } } }, @@ -38303,6 +39089,12 @@ "state" : "translated", "value" : "KŞ düşük. Karbonhidrat yiyin ve KŞ güvenli bir aralığa gelene kadar bolus yapmayı erteleyin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的血糖偏低。请摄入碳水,并等到血糖恢复到安全范围后再进行大剂量推注。" + } } } }, @@ -38380,6 +39172,12 @@ "state" : "translated", "value" : "KŞ düşük. Karbonhidrat yiyin ve yakından izleyin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的血糖偏低。请补充碳水并密切监测。" + } } } }, @@ -38457,6 +39255,12 @@ "state" : "translated", "value" : "Maksimum bolus miktarınız %1$@ ." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你的最大输注剂量是 %1$@" + } } } }, @@ -38534,6 +39338,12 @@ "state" : "translated", "value" : "Pompa verileriniz eski. %1$@ bir bolus miktarı öneremez." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您的胰岛素泵数据已过期。%1$@ 无法推荐追加胰岛素剂量。" + } } } }, @@ -38611,6 +39421,12 @@ "state" : "translated", "value" : "Pompanız manuel bir geçici bazal oran veriyor." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "正在执行手动临时基础率。" + } } } }, @@ -38688,6 +39504,12 @@ "state" : "translated", "value" : "Önerilen bolus miktarı, maksimum bolus miktarınız olan %1$@ değerini aşıyor." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "推荐的大剂量超过了你设定的最大剂量限制:%1$@。" + } } } } diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index 6935e0de67..741f9a599e 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -200,6 +200,12 @@ "state" : "translated", "value" : "Otomatik Bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自动追加胰岛素" + } } } }, @@ -283,6 +289,12 @@ "state" : "translated", "value" : "Sadece Geçici Bazal" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "仅临时基础率" + } } } } diff --git a/LoopUI/Localizable.xcstrings b/LoopUI/Localizable.xcstrings index 5634bb1bfc..3278bc859c 100644 --- a/LoopUI/Localizable.xcstrings +++ b/LoopUI/Localizable.xcstrings @@ -69,6 +69,12 @@ "state" : "translated", "value" : "\n%1$@\n\n%2$@ Kapalı Döngü AÇIK konumdayken çalışıyor." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n %1$@\n\n%2$@当前处于闭环模式。" + } } } }, @@ -282,6 +288,12 @@ "state" : "translated", "value" : "\n%1$@ KAPALI konumda ve Kapalı Döngü ile çalışıyor. Pompanız ve CGM çalışmaya devam edecek, ancak uygulama dozajı otomatik olarak ayarlamayacaktır. \n\n%2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "\n %1$@当前处于非闭环模式。胰岛素泵和连续血糖监测仪仍将正常运行,但应用程序不会自动调整胰岛素剂量。\n \n %2$@" + } } } }, @@ -734,6 +746,12 @@ "state" : "translated", "value" : "%1$@ önce" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 之前" + } } } }, @@ -1359,6 +1377,12 @@ "state" : "translated", "value" : "< 1 dakika önce" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "<1 分钟之前" + } } } }, @@ -1476,7 +1500,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "启动闭环" + "value" : "闭环模式" } } } @@ -1561,6 +1585,12 @@ "state" : "translated", "value" : "Kapalı Döngü KAPALI" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "闭环模式已关闭" + } } } }, @@ -1644,6 +1674,12 @@ "state" : "translated", "value" : "Kapalı Döngü AÇIK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "闭环模式已开启" + } } } }, @@ -1983,6 +2019,12 @@ "state" : "translated", "value" : "YÜKSEK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "高" + } } } }, @@ -2054,6 +2096,12 @@ "state" : "translated", "value" : "Son tamamlanan döngü %1$@ ." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "上次完成闭环是 %1$@" + } } } }, @@ -2464,6 +2512,12 @@ "state" : "translated", "value" : "DÜŞÜK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "低" + } } } }, @@ -3137,6 +3191,12 @@ "state" : "translated", "value" : "Uygulamanın insülininizi otomatikleştirmesini istiyorsanız, Kapalı Döngüyü AÇIK duruma getirmek için Ayarlar'a dokunun." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果您希望应用程序自动控制您的胰岛素,请点击“设置”,打开“闭环模式”开关。" + } } } }, diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index 137a2f7d6e..ff086ebcb3 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -1121,6 +1121,12 @@ "state" : "translated", "value" : "Bolus Önerisi Güncellendi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "大剂量推荐值已更新" + } } } }, @@ -2393,6 +2399,12 @@ "state" : "translated", "value" : "OK" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "好的" + } } } }, @@ -2733,6 +2745,12 @@ "state" : "translated", "value" : "Lütfen bolus miktarını tekrar onaylayın." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请重新确认大剂量。" + } } } }, @@ -2846,6 +2864,12 @@ "state" : "translated", "value" : "Trước bữa ăn" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "餐前" + } } } }, @@ -3674,6 +3698,12 @@ "state" : "translated", "value" : "Kaydet & Bolus" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存并注射追加胰岛素" + } } } }, @@ -3876,6 +3906,12 @@ "state" : "translated", "value" : "Digital Crown'u bolusa\nçevirin" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "旋转数字表冠\n以注射追加胰岛素" + } } } }, diff --git a/WatchApp/mul.lproj/Interface.xcstrings b/WatchApp/mul.lproj/Interface.xcstrings index 54ad80f67a..2055548574 100644 --- a/WatchApp/mul.lproj/Interface.xcstrings +++ b/WatchApp/mul.lproj/Interface.xcstrings @@ -516,7 +516,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "餐前模式" + "value" : "餐前" } } } From d1fd929be50b65f888e03efff139a62cef740909 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Tue, 7 Oct 2025 12:26:02 -0700 Subject: [PATCH 20/41] Fix Siri string issue for broswer build --- Common/ce.lproj/Intents.strings | 24 ++++++++++++++++++++++++ Common/hu.lproj/Intents.strings | 24 ++++++++++++++++++++++++ Common/uk.lproj/Intents.strings | 24 ++++++++++++++++++++++++ Loop.xcodeproj/project.pbxproj | 6 ++++++ 4 files changed, 78 insertions(+) create mode 100644 Common/ce.lproj/Intents.strings create mode 100644 Common/hu.lproj/Intents.strings create mode 100644 Common/uk.lproj/Intents.strings diff --git a/Common/ce.lproj/Intents.strings b/Common/ce.lproj/Intents.strings new file mode 100644 index 0000000000..853af215c0 --- /dev/null +++ b/Common/ce.lproj/Intents.strings @@ -0,0 +1,24 @@ +"80eo5o" = "Add Carb Entry"; + +"9KhaIS" = "I've set the preset"; + +"I4OZy8" = "Enable Override Preset"; + +"OcNxIj" = "Add Carb Entry"; + +"XNNmtH" = "Enable preset in Loop"; + +"ZZ3mtM" = "Enable an override preset in Loop"; + +"b085BW" = "I wasn't able to set the preset."; + +"lYMuWV" = "Override Name"; + +"nDKAmn" = "What's the name of the override you'd like to set?"; + +"oLQSsJ" = "Enable '${overrideName}' Override Preset"; + +"yBzwCL" = "Override Selection"; + +"yc02Yq" = "Add a carb entry to Loop"; + diff --git a/Common/hu.lproj/Intents.strings b/Common/hu.lproj/Intents.strings new file mode 100644 index 0000000000..853af215c0 --- /dev/null +++ b/Common/hu.lproj/Intents.strings @@ -0,0 +1,24 @@ +"80eo5o" = "Add Carb Entry"; + +"9KhaIS" = "I've set the preset"; + +"I4OZy8" = "Enable Override Preset"; + +"OcNxIj" = "Add Carb Entry"; + +"XNNmtH" = "Enable preset in Loop"; + +"ZZ3mtM" = "Enable an override preset in Loop"; + +"b085BW" = "I wasn't able to set the preset."; + +"lYMuWV" = "Override Name"; + +"nDKAmn" = "What's the name of the override you'd like to set?"; + +"oLQSsJ" = "Enable '${overrideName}' Override Preset"; + +"yBzwCL" = "Override Selection"; + +"yc02Yq" = "Add a carb entry to Loop"; + diff --git a/Common/uk.lproj/Intents.strings b/Common/uk.lproj/Intents.strings new file mode 100644 index 0000000000..853af215c0 --- /dev/null +++ b/Common/uk.lproj/Intents.strings @@ -0,0 +1,24 @@ +"80eo5o" = "Add Carb Entry"; + +"9KhaIS" = "I've set the preset"; + +"I4OZy8" = "Enable Override Preset"; + +"OcNxIj" = "Add Carb Entry"; + +"XNNmtH" = "Enable preset in Loop"; + +"ZZ3mtM" = "Enable an override preset in Loop"; + +"b085BW" = "I wasn't able to set the preset."; + +"lYMuWV" = "Override Name"; + +"nDKAmn" = "What's the name of the override you'd like to set?"; + +"oLQSsJ" = "Enable '${overrideName}' Override Preset"; + +"yBzwCL" = "Override Selection"; + +"yc02Yq" = "Add a carb entry to Loop"; + diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 8aa472efd9..7f527ecca9 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -1198,6 +1198,9 @@ B66D1F3F2E6A5D6600471149 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; B66D1F412E6A5D6600471149 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/Interface.xcstrings; sourceTree = ""; }; B66D1F422E6A5D6600471149 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/Main.xcstrings; sourceTree = ""; }; + B6F22EF52E95A03600CCA05F /* ce */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ce; path = ce.lproj/Intents.strings; sourceTree = ""; }; + B6F22EF72E95A03800CCA05F /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Intents.strings; sourceTree = ""; }; + B6F22EF92E95A03C00CCA05F /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Intents.strings; sourceTree = ""; }; C1004DEF2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DFD2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E052981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -3886,6 +3889,9 @@ C1C247882995823200371B88 /* sk */, C1C5357529C6346A00E32DF9 /* cs */, 3D03C6DA2AACE6AC00FDE5D2 /* hi */, + B6F22EF52E95A03600CCA05F /* ce */, + B6F22EF72E95A03800CCA05F /* hu */, + B6F22EF92E95A03C00CCA05F /* uk */, ); name = Intents.intentdefinition; sourceTree = ""; From 2627fe7da57c8ad3a27ed72292ff03daad2a0fc1 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 11 Oct 2025 10:18:09 -0700 Subject: [PATCH 21/41] Updated translations from lokalise on Sat Oct 11 09:28:52 PDT 2025 --- Loop Status Extension/Localizable.xcstrings | 18 + .../Bootstrap/Localizable.xcstrings | 24 + Loop/InfoPlist.xcstrings | 14 +- Loop/Localizable.xcstrings | 1167 ++++++++++++++++- Loop/mul.lproj/Main.xcstrings | 4 +- LoopUI/Localizable.xcstrings | 60 + WatchApp Extension/Localizable.xcstrings | 28 +- WatchApp/mul.lproj/Interface.xcstrings | 6 + 8 files changed, 1291 insertions(+), 30 deletions(-) diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings index 0f8e14b26c..5fc7096a8d 100644 --- a/Loop Status Extension/Localizable.xcstrings +++ b/Loop Status Extension/Localizable.xcstrings @@ -1105,6 +1105,12 @@ "state" : "translated", "value" : "g" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "克" + } } } }, @@ -1356,6 +1362,12 @@ "state" : "translated", "value" : "mg/dL" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } } } }, @@ -1475,6 +1487,12 @@ "state" : "translated", "value" : "mmol/L" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } } } }, diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings index 3e7f32b416..a53d6c9a9d 100644 --- a/Loop Widget Extension/Bootstrap/Localizable.xcstrings +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -687,6 +687,12 @@ "value" : "Éventuel" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סופי" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -847,6 +853,12 @@ "state" : "translated", "value" : "g" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "克" + } } } }, @@ -1036,6 +1048,12 @@ "state" : "translated", "value" : "mg/dL" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } } } }, @@ -1155,6 +1173,12 @@ "state" : "translated", "value" : "mmol/L" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } } } }, diff --git a/Loop/InfoPlist.xcstrings b/Loop/InfoPlist.xcstrings index 0b3fc7e40c..ca65707b42 100644 --- a/Loop/InfoPlist.xcstrings +++ b/Loop/InfoPlist.xcstrings @@ -275,6 +275,12 @@ "value" : "Appen bruger NFC til at parre sig med diabetesapparater." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Die App verwendet NFC zur Kopplung mit Diabetesgeräten." + } + }, "en" : { "stringUnit" : { "state" : "new", @@ -299,6 +305,12 @@ "value" : "Aplikacja wykorzystuje NFC do parowania z urządzeniami dla diabetyków." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicația folosește NFC pentru a se conecta cu dispozitive pentru diabet." + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -1147,7 +1159,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Loop 使用 Siri 允许您通过语音制定预设。" + "value" : "Loop 使用 Siri,让你可以通过语音来启动预设。" } } } diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index e3eee59d8c..32bb793195 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -258,7 +258,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "נותר" + "value" : " נותר" } }, "hu" : { @@ -344,6 +344,12 @@ "value" : "Notifications de sécurité sont DÉSACTIVÉES" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : " התראות בטיחות כבויות" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -504,6 +510,12 @@ "value" : "-" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "." + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -721,7 +733,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "%@ absorbed" + "value" : "%@ נספג" } }, "it" : { @@ -837,6 +849,12 @@ "value" : "%@ restant" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ נותרו" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -929,7 +947,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "%@ U Total" + "value" : "%@ U סה״כ" } }, "it" : { @@ -1236,11 +1254,23 @@ "value" : "%1$1@%2$2@" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$1@%2$2@" + } + }, "nb" : { "stringUnit" : { "state" : "translated", "value" : "%1$1@%2$2@" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$1@%2$2@" + } } } }, @@ -2063,6 +2093,12 @@ "value" : "%1$@ Paramètres d'heure requierent une attention" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ הגדרות השעה דורשות תשומת לב" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -2251,7 +2287,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ U left" + "value" : "%1$@ U נותרו" } }, "it" : { @@ -2383,7 +2419,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ U left: %2$@" + "value" : "%1$@ U נותרו: %2$@" } }, "it" : { @@ -2515,7 +2551,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ U/hour @ %2$@" + "value" : "%1$@ יח׳/שעה @ %2$@" } }, "it" : { @@ -2732,6 +2768,12 @@ "value" : "%1$@ holder op med at fungere i %2$@. Du bliver nødt til at rebuilde før det." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ funktioniert in %2$@ nicht mehr. Sie müssen vorher einen Neuaufbau durchführen." + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -2750,6 +2792,12 @@ "value" : "%1$@ przestanie działać w %2$@. Konieczna będzie wcześniejsza odbudowa." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ va înceta să funcționeze în %2$@. Va trebui să reconstruiți sistemul înainte de asta." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -3051,6 +3099,12 @@ "value" : "⚠️" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -3081,6 +3135,12 @@ "value" : "⚠️" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "⚠️" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -3366,6 +3426,12 @@ "value" : "Quelques secondes restantes" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "נותרו כמה שניות" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -3526,6 +3592,12 @@ "value" : "Une saisie manuelle de la glycémie doit être comprise entre %1$@ et %2$@." } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הזנת גלוקוז ידנית חייבת להיות בין %1$@ ל- %2$@." + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -4068,12 +4140,30 @@ "Absorption Time" : { "comment" : "Label for food absorption entry on add favorite food screen", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Resorptionsdauer" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "זמן ספיגה" + } + }, "nb" : { "stringUnit" : { "state" : "translated", "value" : "Absorpsjonstid" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Timp de absorbție" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -4256,7 +4346,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Active Carbohydrates" + "value" : "פחמימות פעילות" } }, "it" : { @@ -4388,7 +4478,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Active Carbohydrates: %@" + "value" : "פחמימות פעילות: %@" } }, "it" : { @@ -4513,7 +4603,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Active Carbs" + "value" : "פחמימות פעילות" } }, "it" : { @@ -4638,7 +4728,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Active Insulin" + "value" : "אינסולין פעיל" } }, "it" : { @@ -4770,7 +4860,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Active Insulin: %@" + "value" : "אינסולין פעיל: %@" } }, "it" : { @@ -4862,6 +4952,18 @@ "value" : "Tilføj en ny favoritmad" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Füge ein neues Lieblingsessen hinzu" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הוסף מאכל אהוב חדש" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -4886,6 +4988,12 @@ "value" : "Dodaj nowe ulubione jedzenie" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Adăugați o nouă mâncare preferată" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -4936,7 +5044,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Add Carb Entry" + "value" : "הוספת פחמימות" } }, "it" : { @@ -5186,7 +5294,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Add Meal" + "value" : "הוסף ארוחה" } }, "it" : { @@ -5311,7 +5419,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Add Pump" + "value" : "הוסף משאבה" } }, "it" : { @@ -5430,7 +5538,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Add Service" + "value" : "הוסף שרות" } }, "it" : { @@ -5598,6 +5706,12 @@ "value" : "Gestion des alertes" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ניהול התראות" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -5681,6 +5795,12 @@ "value" : "Autorisations d'alerte" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הרשאות התראה" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -5746,6 +5866,18 @@ "value" : "Advarselstilladelser og dæmpede advarsler" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alarmberechtigungen und Stummschalten von Alarmen" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הרשאות התראה והשתקת התראות" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -5764,6 +5896,12 @@ "value" : "Uprawnienia do alertów i wyciszanie alertów" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Permisiuni de alertă și alerte silențioase" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -5787,12 +5925,24 @@ "value" : "Algoritme-eksperimenter" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorithmus-Experimente" + } + }, "fr" : { "stringUnit" : { "state" : "translated", "value" : "Essais d'algorithmes" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "ניסויי אלגוריתמים" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -5816,6 +5966,12 @@ "state" : "translated", "value" : "Algorytmy Eksperymentalne" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimente algoritmice" + } } } }, @@ -5828,6 +5984,12 @@ "value" : "Algoritmeeksperimenter er valgfrie ændringer af Loop-algoritmen. Disse ændringer er mindre testet end standard Loop-algoritmen, så brug venligst omhyggeligt." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Algorithmus-Experimente sind optionale Modifikationen des Loop-Algorithmus. Diese Modifikationen sind weniger getestet als der Standard-Loop-Algorithmus. Verwende sie daher mit Vorsicht." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -5857,6 +6019,12 @@ "state" : "translated", "value" : "Eksperymenty algorytmiczne to opcjonalne modyfikacje algorytmu pętli. Te modyfikacje są mniej przetestowane niż standardowy algorytm pętli, więc używaj ich ostrożnie." } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Experimentele algoritmice sunt modificări opționale ale algoritmului de buclă. Aceste modificări sunt mai puțin testate decât algoritmul de buclă standard, așa că vă rugăm să le utilizați cu atenție." + } } } }, @@ -5965,6 +6133,18 @@ "value" : "Alle alarmer er slået fra" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle Warnungen stummgeschaltet" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כל ההתראות משותקות" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -5982,6 +6162,12 @@ "state" : "translated", "value" : "Wszystkie alerty wyciszone" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toate alertele sunt dezactivate" + } } } }, @@ -6000,6 +6186,12 @@ "value" : "Alle Alarme stummgeschaltet bis" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כל ההתראות מושתקות עד" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -6017,6 +6209,12 @@ "state" : "translated", "value" : "Wszystkie alerty wyciszono do" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toate alertele sunt dezactivate până la" + } } } }, @@ -6052,6 +6250,12 @@ "state" : "translated", "value" : "Wszystkie ulubione" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Toate favoritele" + } } } }, @@ -6076,6 +6280,12 @@ "value" : "Quantité consommée" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות שנצרכה" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -6094,6 +6304,12 @@ "value" : "Ilość węglowodanów" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitate consumată" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -6999,6 +7215,12 @@ "value" : "Apfel" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "תפוח" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -7011,6 +7233,12 @@ "value" : "Eple" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Măr" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -7567,6 +7795,12 @@ "state" : "translated", "value" : "Czy na pewno chcesz usunąć to jedzenie?" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sunteți sigur că doriți să ștergeți acest aliment?" + } } } }, @@ -8390,6 +8624,12 @@ "value" : "Bluetooth désactivé" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בלוטות׳ כבוי" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -8473,6 +8713,12 @@ "value" : "Bluetooth\nIndisponible" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "בלוטות׳ לא זמין" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -8556,6 +8802,12 @@ "value" : "Bluetooth désactivé" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראת בלוטות׳ כבוי" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -8639,6 +8891,12 @@ "value" : "Bluetooth indisponible" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "התראת בלוטות׳ לא זמין" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -9076,7 +9334,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "追加胰岛素汇总" + "value" : "大剂量汇总" } } } @@ -9206,7 +9464,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Bolused %1$@ of %2$@" + "value" : "הוזרק %1$@ מתוך %2$@" } }, "it" : { @@ -9331,7 +9589,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Bolusing %1$@" + "value" : "מזריק בולוס: %1$@" } }, "it" : { @@ -9462,7 +9720,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Cancel" + "value" : "בטל" } }, "hi" : { @@ -9593,7 +9851,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Canceling Bolus" + "value" : "מבטל בולוס" } }, "it" : { @@ -9718,7 +9976,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Carb effects" + "value" : "השפעות פחמימות" } }, "it" : { @@ -9899,12 +10157,36 @@ "Carb Quantity" : { "comment" : "Label for carb quantity row on add favorite food screen", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Menge gegessen" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כמות פחמימות" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Carboidrati Assunti" } }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Antall karbohydrater" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cantitate carbohidrați" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -10367,7 +10649,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Carbohydrates" + "value" : "פחמימות" } }, "it" : { @@ -10589,6 +10871,12 @@ "value" : "Achtung" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "זהירות" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -10612,6 +10900,12 @@ "state" : "translated", "value" : "Uwaga" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atenţie" + } } } }, @@ -11466,6 +11760,12 @@ "state" : "translated", "value" : "Wybierz ulubione:" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alegeți Preferatul:" + } } } }, @@ -11502,6 +11802,12 @@ "value" : "Fermer" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סגור" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -12912,7 +13218,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Correction Range" + "value" : "טווח תיקון" } }, "it" : { @@ -12998,6 +13304,12 @@ "value" : "Kunne ikke genstarte %1$@" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ konnte nicht neu gestartet werden" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -13015,6 +13327,12 @@ "state" : "translated", "value" : "Nie można ponownie uruchomić %1$@" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu s-a putut reporni %1$@" + } } } }, @@ -13782,6 +14100,12 @@ "Date" : { "comment" : "Date picker label", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "التاريخ" + } + }, "da" : { "stringUnit" : { "state" : "translated", @@ -14019,6 +14343,12 @@ }, "Delete" : { "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حذف" + } + }, "da" : { "stringUnit" : { "state" : "translated", @@ -14079,6 +14409,12 @@ "value" : "Usunąć" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apagar" + } + }, "ro" : { "stringUnit" : { "state" : "translated", @@ -14091,6 +14427,12 @@ "value" : "Удалить" } }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odstrániť" + } + }, "sv" : { "stringUnit" : { "state" : "translated", @@ -14103,6 +14445,12 @@ "value" : "Sil" } }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Xóa" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -14125,6 +14473,12 @@ "value" : "„ %@ “ löschen?" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "למחוק את \" %@ \"?" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -14142,6 +14496,12 @@ "state" : "translated", "value" : "Usunąć „ %@ ”?" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergeți „ %@ ”?" + } } } }, @@ -14534,6 +14894,12 @@ "state" : "translated", "value" : "Usuń jedzenie" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ștergeți alimentele" + } } } }, @@ -15934,6 +16300,12 @@ "value" : "Activer \nbluetooth" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הפעל \n בלוטות'" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -16016,6 +16388,12 @@ "state" : "translated", "value" : "Włącz Algorytm adaptacyjny" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activează aplicarea parțială pe bază de glicemie" + } } } }, @@ -16051,6 +16429,12 @@ "state" : "translated", "value" : "Włącz Integralną Korektę Retrospektywną (IRC)" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activează corecția retrospectivă integrală" + } } } }, @@ -16352,7 +16736,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "输入追加胰岛素剂量" + "value" : "输入大剂量" } } } @@ -17764,6 +18148,30 @@ "Favorite Foods" : { "comment" : "Title for Favorite Foods view", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Lieblingsessen" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאכלים אהובים" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Favorittmat" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mâncăruri preferate" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -17787,6 +18195,12 @@ "value" : "Favorisiertes Essen" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מאכלים אהובים" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -17811,6 +18225,12 @@ "value" : "ULUBIONE JEDZENIE" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "MÂNCĂRURI PREFERATE" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -18120,6 +18540,12 @@ "Food Type" : { "comment" : "Label for food type entry on add favorite food screen", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "Food Type" + } + }, "da" : { "stringUnit" : { "state" : "translated", @@ -18132,12 +18558,30 @@ "value" : "Essenstyp" } }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Food Type" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Food Type" + } + }, "fr" : { "stringUnit" : { "state" : "translated", "value" : "Type d'aliment" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "סוג מאכל" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -18150,18 +18594,60 @@ "value" : "Type mat" } }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Type voeding" + } + }, "pl" : { "stringUnit" : { "state" : "translated", "value" : "Rodzaj żywności" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Food Type" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tip de alimente" + } + }, "ru" : { "stringUnit" : { "state" : "translated", "value" : "Тип еды" } }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Typ jedla" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Typ av mat" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Food Type" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loại thực phẩm" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -18298,6 +18784,12 @@ "value" : "Af sikkerhedsmæssige årsager bør du tillade, at Kritiske advarsler, Tidsfølsomme og Meddelelser (ikke-kritiske advarsler) på din enhed fortsætter med at bruge %1$@ og ikke kan slå individuelle alarmer fra." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aus Sicherheitsgründen solltest Du kritische Warnungen, zeitkritische Warnungen und Benachrichtigungsberechtigungen (nicht kritische Warnungen) auf Deinem Gerät zulassen, um %1$@ weiterhin verwenden zu können." + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -18316,6 +18808,12 @@ "value" : "Ze względów bezpieczeństwa należy zezwolić na alerty krytyczne, alerty zależne od czasu i uprawnienia do powiadomień (alerty niekrytyczne) na swoim urządzeniu na dalsze korzystanie z %1$@ i nie można wyłączać poszczególnych alarmów." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În scopuri de siguranță, trebuie să permiteți alertele critice, sensibile la timp și permisiunile de notificare (alerte necritice) pe dispozitivul dvs. pentru a continua să utilizați %1$@ și nu puteți dezactiva alarmele individuale." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -18492,6 +18990,12 @@ "value" : "Ofte stillede spørgsmål om påmindelser" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Häufig gestellte Fragen zu Benachrichtigungen" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -18516,6 +19020,12 @@ "value" : "Często zadawane pytania dotyczące alertów" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Întrebări frecvente privind alertele" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -18640,6 +19150,12 @@ "state" : "translated", "value" : "g" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "克" + } } } }, @@ -18866,6 +19382,12 @@ "value" : "Glucose Based Partial Application" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Teilweise Anwendung auf Glukosebasis" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -18883,6 +19405,12 @@ "state" : "translated", "value" : "Algorytm adaptacyjny" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aplicare parțială pe bază de glicemie" + } } } }, @@ -19216,6 +19744,12 @@ "value" : "Glukoseeffekt ved afbrydelse af insulintilførsel" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glukoseeffekt der Unterbrechung der Insulinabgabe" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -19233,6 +19767,12 @@ "state" : "translated", "value" : "Wpływ wstrzymania podawania insuliny na poziom glukozy" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efectul asupra glicemiei al suspendării administrării de insulină" + } } } }, @@ -19517,6 +20057,12 @@ "value" : "HARDWARE-LYDE" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "HARDWARE-SOUNDS" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -19541,6 +20087,12 @@ "value" : "DŹWIĘKI SPRZĘTOWE" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "SUNET HARDWARE" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -19557,6 +20109,12 @@ "value" : "Høj glukose" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hoher Blutzucker" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -19581,6 +20139,12 @@ "value" : "Wysoki poziom glukozy" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Glicemie ridicată" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -19597,6 +20161,12 @@ "value" : "Hvordan kan jeg slå ikke-kritiske alarmer fra?" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wie kann ich nicht kritische Warnungen stummschalten?" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -19615,6 +20185,12 @@ "value" : "Jak mogę wyciszyć alerty niekrytyczne?" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cum pot dezactiva sunetul alertelor non-critice?" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -19631,6 +20207,12 @@ "value" : "Hvordan kan jeg kun slå lyden fra for tidsfølsomme og ikke-kritiske advarsler?" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wie kann ich nur zeitkritische und nicht kritische Warnungen stummschalten?" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -19649,6 +20231,12 @@ "value" : "Jak wyciszyć tylko alerty zależne od czasu i niekrytyczne?" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cum pot dezactiva sunetul doar alertelor sensibile la timp și non-critice?" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -19666,6 +20254,12 @@ "value" : "Hvordan kan jeg midlertidigt slå lyden fra for alle %1$@ applyde?" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wie kann ich alle Töne der %1$@ App vorübergehend stummschalten?" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -19690,6 +20284,12 @@ "value" : "Jak mogę tymczasowo wyciszyć wszystkie dźwięki aplikacji %1$@ ?" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cum pot dezactiva temporar toate sunetele aplicației %1$@?" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -19802,6 +20402,12 @@ "value" : "Hvis iOS-fokustilstand er slået TIL, og Slå lyden fra-advarsler er slået fra, leveres kritiske advarsler stadig, og ikke-kritiske advarsler slås fra, indtil %1$@ føjes til hver fokustilstand som en tilladt app." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn der iOS-Fokusmodus aktiviert und die Stummschaltung von Warnungen deaktiviert ist, werden kritische Warnungen weiterhin übermittelt und nicht kritische Warnungen stummgeschaltet, bis %1$@ jedem Fokusmodus als zulässige App hinzugefügt wird." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -19826,6 +20432,12 @@ "value" : "Jeśli tryb skupienia w systemie iOS jest włączony, a opcja Wycisz alerty jest wyłączona, alerty krytyczne będą nadal dostarczane, a alerty niekrytyczne będą wyciszane, dopóki %1$@ nie zostanie dodany do każdego trybu skupienia jako dozwolona aplikacja." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dacă modul Focus iOS este ACTIVAT și opțiunea Dezactivare alerte este DEZACTIVATĂ, alertele critice vor fi transmise în continuare, iar alertele non-critice vor fi dezactivate până când %1$@ este adăugat la fiecare mod Focus ca aplicație permisă." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -19949,6 +20561,12 @@ "state" : "translated", "value" : "W przyszłych wersjach Loop te eksperymenty mogą się zmienić, stać się standardowymi częściami algorytmu Loop lub zostać całkowicie usunięte z Loop. Śledź czat Loop Zulip, aby być na bieżąco z możliwymi zmianami w tych funkcjach." } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În versiunile viitoare ale Loop, aceste experimente se pot schimba, pot deveni părți standard ale algoritmului Loop sau pot fi eliminate complet din Loop. Vă rugăm să urmăriți chat-ul Loop Zulip pentru a fi la curent cu posibilele modificări ale acestor funcții." + } } } }, @@ -20079,7 +20697,26 @@ } }, "Information" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Information" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informasjon" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Informaţii" + } + } + } }, "Insulin" : { "comment" : "Title of the prediction input effect for insulin", @@ -20799,6 +21436,12 @@ "value" : "Pompe à insuline" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משאבת אינסולין" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -21262,6 +21905,12 @@ "state" : "translated", "value" : "Integralna korekta retrospektywna" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corecție retrospectivă integrală" + } } } }, @@ -21297,6 +21946,12 @@ "state" : "translated", "value" : "Integralna korekta retrospektywna (IRC) jest rozszerzeniem standardowego komponentu algorytmu Korekta retrospektywna (RC) w Loop, który koryguje prognozę na podstawie historii rozbieżności między przewidywanymi a rzeczywistymi poziomami glukozy. \n\n W przeciwieństwie do RC, który analizuje rozbieżności w ciągu ostatnich 30 minut, w przypadku IRC historia rozbieżności sumuje się w czasie. Tak więc utrzymujące się dodatnie rozbieżności w czasie spowodują zwiększenie dawki. Jeśli rozbieżności są ujemne w czasie, Loop jeszcze bardziej zmniejszy podawanie insuliny." } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Corecția Retrospectivă Integrală (CRI) este o extensie a componentei algoritmului standard de Corecție Retrospectivă (CR) din Loop, care ajustează prognoza pe baza istoricului discrepanțelor dintre nivelurile de glicemie prezise și cele reale. \n \nSpre deosebire de CR, care analizează discrepanțele din ultimele 30 de minute, cu CRI, istoricul discrepanțelor se adună în timp. Așadar, discrepanțele pozitive continue în timp vor duce la creșterea dozării. Dacă discrepanțele sunt negative în timp, Loop va reduce și mai mult dozarea." + } } } }, @@ -21392,6 +22047,12 @@ "value" : "Ugyldig absorptionstid: %1$@ timer" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ungültige Resorptionszeit: %1$@ Stunden" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -21410,6 +22071,12 @@ "value" : "Nieprawidłowy czas absorpcji: %1$@ godz" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Timp de absorbție nevalid: %1$@ ore" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -21854,6 +22521,12 @@ "value" : "Kritiske iOS-advarsler og tidsfølsomme advarsler er typer Apple-meddelelser. De bruges til begivenheder med høj prioritet. Nogle eksempler inkluderer:" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kritische iOS-Warnungen und zeitkritische Warnungen sind Arten von Apple-Benachrichtigungen. Sie werden für Ereignisse mit hoher Priorität verwendet. Einige Beispiele:" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -21878,6 +22551,12 @@ "value" : "Alerty krytyczne systemu iOS i alerty zależne od czasu to typy powiadomień Apple. Wykorzystuje się je do zdarzeń o wysokim priorytecie. Oto kilka przykładów:" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alertele critice iOS și alertele sensibile la timp sunt tipuri de notificări Apple. Sunt folosite pentru evenimente cu prioritate ridicată. Câteva exemple includ:" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -21894,6 +22573,12 @@ "value" : "iOS-FOKUSTILSTANDE" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "IOS-FOKUSMODI" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -21918,6 +22603,12 @@ "value" : "TRYBY SKUPIENIA IOS" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "MODURI CONCENTRARE IOS" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -22941,6 +23632,12 @@ "value" : "Panne de Loop" } }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop קרס" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -23398,12 +24095,24 @@ "Loop normally gives 40% of your predicted insulin needs each dosing cycle.\n\nWhen the Glucose Based Partial Application experiment is enabled, Loop will vary the percentage of recommended bolus delivered each cycle with glucose level.\n\nNear correction range, it will use 20% (similar to Temp Basal), and gradually increase to a maximum of 80% at high glucose (200 mg/dL, 11.1 mmol/L).\n\nPlease be aware that during fast rising glucose, such as after an unannounced meal, this feature, combined with velocity and retrospective correction effects, may result in a larger dose than your ISF would call for." : { "comment" : "Description of Glucose Based Partial Application toggle.", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Loop verabreicht normalerweise 40% Deines voraussichtlichen Insulinbedarfs pro Dosierungszyklus. \n\nWenn das Experiment zur glukosebasierten partiellen Verabreichung aktiviert ist (Glucose Based Partial Application), variiert Loop den Prozentsatz des empfohlenen Bolus, der pro Zyklus verabreicht wird, je nach Glukosespiegel. \n\nNahe dem unterem Korrekturbereich werden 20% verwendet (ähnlich wie bei Temp Basal) und bei hohem Glukosespiegel (200 mg/dl, 11,1 mmol/l) schrittweise auf maximal 80% erhöht. \n\nBitte beachte, dass diese Funktion bei schnell ansteigendem Glukosespiegel, etwa nach einer unangekündigten Mahlzeit, in Kombination mit Geschwindigkeits- und retrospektiven Korrektureffekten zu einer höheren Dosis führen kann, als Dein ISF erfordern würde." + } + }, "nb" : { "stringUnit" : { "state" : "translated", "value" : "Loop gir normalt 40 % av det forventede insulinbehovet ditt i hver doseringssyklus. Når eksperimentet Glukosebasert delvis tilførsel er aktivert, vil Loop variere prosentandelen av anbefalt bolus som gis i hver syklus med glukosenivået.\n\nI nærheten av korreksjonsområdet vil den bruke 20 % (på samme måte som Temp Basal), og gradvis øke til maksimalt 80 % ved høyt glukosenivå (200 mg/dL, 11,1 mmol/L). Vær oppmerksom på at ved raskt stigende glukose, for eksempel etter et uanmeldt måltid, kan denne funksjonen, kombinert med hastighet og retrospektive korreksjonseffekter, resultere i en større dose enn det ISF-en din ville ha krevd." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În mod normal, Loop furnizează 40% din necesarul de insulină estimat pentru fiecare ciclu de dozare. \n \nCând experimentul Aplicare parțială bazată pe glicemie este activat, Loop va varia procentul de bolus recomandat administrat pentru fiecare ciclu în funcție de nivelul glicemiei. \n \nÎn apropierea intervalului de corecție, va utiliza 20% (similar cu o bazală temporar) și va crește treptat până la maximum 80% la glicemie ridicată (200 mg/dl, 11,1 mmol/l). \n \nVă rugăm să rețineți că în timpul creșterii rapide a glicemiei, cum ar fi după o masă neanunțată, această funcție, combinată cu efectele vitezei și ale corecției retrospective, poate duce la o doză mai mare decât ar necesita ISF-ul dumneavoastră." + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -23848,6 +24557,12 @@ "value" : "Administration af advarsler" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwalten von Warnungen" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -23872,6 +24587,12 @@ "value" : "Zarządzanie alertami" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Gestionarea alertelor" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -24453,6 +25174,12 @@ "state" : "translated", "value" : "mg/dL" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } } } }, @@ -24845,6 +25572,12 @@ "state" : "translated", "value" : "mmol/L" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } } } }, @@ -25172,6 +25905,12 @@ "value" : "Slå lyden fra for alle advarsler midlertidigt" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alle Warnungen vorübergehend stummschalten" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -25196,6 +25935,12 @@ "value" : "Tymczasowo wycisz wszystkie alerty" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dezactivați temporar toate alertele" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -25207,6 +25952,12 @@ "Name" : { "comment" : "Label for name row on add favorite food screen", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "الاسم" + } + }, "cs" : { "stringUnit" : { "state" : "translated", @@ -25326,6 +26077,12 @@ "state" : "translated", "value" : "Tên" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "设备名称" + } } } }, @@ -25517,11 +26274,23 @@ "New Favorite Food" : { "comment" : "Title of new favorite food screen", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Neues Lieblingsessen" + } + }, "nb" : { "stringUnit" : { "state" : "translated", "value" : "Ny favorittmat" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Noua mâncare preferată" + } } } }, @@ -25666,6 +26435,12 @@ "value" : "Ingen advarsler eller alarmer lyder, mens lyden er slået fra. Vælg, hvor længe du vil slå lyden fra." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bei Stummschaltung ertönen keine Warn- oder Alarmsignale. Wähle die Dauer der Stummschaltung aus." + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -25683,6 +26458,12 @@ "state" : "translated", "value" : "Po wyciszeniu nie będą emitowane żadne alerty ani alarmy. Wybierz, jak długo chcesz wyciszyć." } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicio alertă nu va suna când este dezactivat sunetul. Odată ce această perioadă se încheie, alertele și alarmele dvs. vor relua normal." + } } } }, @@ -26455,6 +27236,12 @@ "None" : { "comment" : "Indicates no favorite food is selected", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "None" + } + }, "cs" : { "stringUnit" : { "state" : "translated", @@ -28382,6 +29169,12 @@ "value" : "prediction-description-integral-retrospective-correction" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Integraler Effekt: %1$@ \n Gesamtglukoseeffekt: %2$@" + } + }, "en" : { "stringUnit" : { "state" : "translated", @@ -28406,6 +29199,12 @@ "value" : "predykcja-opis-całka-retrospektywna-korekta" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Efect integral: %1$@ \nEfect total al glucozei: %2$@" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -29358,6 +30157,12 @@ "value" : "Pumpen er udløbet" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pumpe abgelaufen" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -29382,6 +30187,12 @@ "value" : "Pompa wygasła" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pompă expirată" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -31273,6 +32084,12 @@ "value" : "Reservoir tomt" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Reservoir leer" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -31297,6 +32114,12 @@ "value" : "Pusty zbiorniczek" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rezervor gol" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -31598,6 +32421,12 @@ "value" : "Gem som favoritmad" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als Lieblingsessen speichern" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -31628,6 +32457,12 @@ "value" : "Zapisz jako ulubione jedzenie" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvați ca mâncare preferată" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -31639,6 +32474,12 @@ "Save Carbs & Deliver" : { "comment" : "Button text to save carbs and/or manual glucose entry and deliver a bolus", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern und Abgeben" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -31651,6 +32492,12 @@ "value" : "Lagre og gi bolus" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvați carbohidrații și livrați" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -31839,6 +32686,12 @@ "value" : "Hvis du vælger en favoritmad i kulhydratindtastningsskærmen, udfyldes felterne for kulhydratmængde, madtype og absorptionstid automatisk! Tryk på tilføj-knappen nedenfor for at oprette din første favoritmad!" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wenn Du im Kohlenhydrat-Eingabebildschirm ein Lieblingsessen auswählst, werden die Felder für Kohlenhydratmenge, Lebensmittelart und Absorptionszeit automatisch ausgefüllt! Tippe unten auf die Schaltfläche „Hinzufügen“, um Dein erstes Lieblingsessen zu erstellen!" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -31863,6 +32716,12 @@ "value" : "Wybór ulubionego jedzenia na ekranie wprowadzania węglowodanów powoduje automatyczne wypełnienie pól ilości węglowodanów, rodzaju jedzenia i czasu wchłaniania! Dotknij przycisku dodawania poniżej, aby stworzyć swoje pierwsze ulubione jedzenie!" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Selectarea unui aliment preferat în ecranul de introducere a carbohidraților completează automat câmpurile pentru cantitatea de carbohidrați, tipul de aliment și timpul de absorbție! Apăsați butonul de adăugare de mai jos pentru a crea primul dvs. aliment preferat!" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -31879,6 +32738,12 @@ "value" : "Sensorfejl" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sensorfehler" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -31903,6 +32768,12 @@ "value" : "Awaria sensora" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Senzor defect" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -33390,6 +34261,12 @@ "value" : "Afbryd insulintilførsel" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unterbrechung der Insulinabgabe" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -33407,6 +34284,12 @@ "state" : "translated", "value" : "Wstrzymanie podawania insuliny" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Suspendarea administrării insulinei" + } } } }, @@ -34013,6 +34896,12 @@ "value" : "Tryk for at slå alarmer til" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Tippe, um die Stummschaltung von Benachrichtigungen aufzuheben" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -34031,6 +34920,12 @@ "value" : "Stuknij, aby wyłączyć wyciszenie alertów" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atingeți pentru a activa alertele" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -34071,6 +34966,12 @@ "state" : "translated", "value" : "Stuknij opcję Wyłącz wyciszenie, aby wznowić dźwięk alertów i alarmów." } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Atingeți Activare sunet pentru a relua sunetul pentru alerte și alarme." + } } } }, @@ -34083,6 +34984,12 @@ "value" : "TestFlight" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -34107,6 +35014,12 @@ "value" : "TestFlight" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -34124,6 +35037,12 @@ "value" : "TestFlight Udløber" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight-Ablauf" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -34148,6 +35067,12 @@ "value" : "Wygaśnięcie TestFlight" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expirare TestFlight" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -34165,6 +35090,12 @@ "value" : "TestFlight udløber " } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight läuft ab " + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -34189,6 +35120,12 @@ "value" : "TestFlight wygasa" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Expiră TestFlight " + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -34212,6 +35149,12 @@ "value" : "TestFlight udløber snart" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight läuft bald ab" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -34236,6 +35179,12 @@ "value" : "TestFlight wkrótce wygaśnie" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "TestFlight expiră în curând" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -35211,6 +36160,12 @@ "value" : "Denne mulighed gælder kun, når Loops doseringsstrategi er indstillet til Automatisk bolus." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Diese Option gilt nur, wenn die Dosierstrategie von Loop auf „Automatischer Bolus“ eingestellt ist." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -35235,6 +36190,12 @@ "value" : "Ta opcja ma zastosowanie tylko wtedy, gdy Strategia dawkowania pętli jest ustawiona na Automatyczny bolus." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Această opțiune se aplică numai atunci când Strategia de dozare a Loop este setată pe Bolus automat." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -35257,6 +36218,12 @@ "value" : "Tidsfølsomme advarsler" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeitkritische Warnungen" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -35281,6 +36248,12 @@ "value" : "Alerty zależne od czasu" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alerte sensibile la timp" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -35380,6 +36353,12 @@ "value" : "Sender lavt batteri" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Niedriger Batteriestatus" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -35404,6 +36383,12 @@ "value" : "Słaba bateria transmitera" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Baterie descărcată a transmițătorului" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -35516,6 +36501,12 @@ "value" : "Sluk for lydstyrken på din iOS-enhed eller føj %1$@ som en tilladt app til hver fokustilstand. Tidsfølsomme og kritiske advarsler lyder stadig, men ikke-kritiske advarsler slås fra." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Schalte die Lautstärke Deines iOS-Geräts aus oder fügen Sie %1$@ als zulässige App zu jedem Fokusmodus hinzu. Zeitkritische und kritische Warnungen ertönen weiterhin, nicht kritische Warnungen werden jedoch stummgeschaltet." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -35540,6 +36531,12 @@ "value" : "Wyłącz głośność na swoim urządzeniu iOS lub dodaj %1$@ jako dozwoloną aplikację do każdego trybu skupienia. Alerty zależne od czasu i krytyczne będą nadal emitowane, ale alerty niekrytyczne zostaną wyciszone." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dezactivați volumul pe dispozitivul iOS sau adăugați %1$@ ca aplicație permisă pentru fiecare Mod de concentrare. Alertele sensibile la timp și cele critice vor suna în continuare, dar alertele non-critice vor fi dezactivate." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -36590,6 +37587,12 @@ "value" : "Slå lyden til" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummschaltung aufheben" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -36608,6 +37611,12 @@ "value" : "Wyłącz wyciszenie" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activează sunetul" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -36631,6 +37640,12 @@ "value" : "Slå alarmer til?" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Stummschaltung für Warnungen aufheben?" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -36649,6 +37664,12 @@ "value" : "Wyciszyć Alerty?" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activați sunetul alertelor?" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -36672,6 +37693,12 @@ "value" : "Ikke-understøttet meddelelsestjeneste: %1$@" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nicht unterstützter Benachrichtigungsdienst: %1$@" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -36690,6 +37717,12 @@ "value" : "Nieobsługiwana usługa powiadomień: %1$@" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Serviciu de notificare neacceptat: %1$@" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -36832,6 +37865,12 @@ "value" : "Indtil %1$@" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bis %1$@" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -36850,6 +37889,12 @@ "value" : "Do %1$@" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Până la %1$@" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -37062,6 +38107,12 @@ "value" : "Kritisk lav" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dringend niedrig" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -37086,6 +38137,12 @@ "value" : "Pilny niski" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hipoglicemie urgentă" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -37198,6 +38255,12 @@ "value" : "Brug funktionen Mute Alerts. Den giver dig mulighed for midlertidigt at slå alle dine advarsler og alarmer fra via %1$@-appen, inklusive Kritiske advarsler og Tidsfølsomme advarsler." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Verwende die Funktion „Warnmeldungen stummschalten“. Damit kannst Du alle Deine Warnmeldungen und Alarme über die %1$@ App vorübergehend stummschalten, einschließlich kritischer und zeitkritischer Warnmeldungen." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -37222,6 +38285,12 @@ "value" : "Użyj funkcji Wycisz alerty. Umożliwia tymczasowe wyciszenie wszystkich alertów i alarmów za pośrednictwem aplikacji %1$@ , w tym alertów krytycznych i alertów zależnych od czasu." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Folosește funcția Dezactivare sunet alerte. Aceasta îți permite să dezactivezi temporar toate alertele și alarmele prin intermediul aplicației %1$@, inclusiv alertele critice și alertele sensibile la timp." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -37656,6 +38725,12 @@ "value" : "Hvad er eksempler på kritiske og tidsfølsomme alarmer?" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Was sind Beispiele für kritische und zeitkritische Warnungen?" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -37680,6 +38755,12 @@ "value" : "Jakie są przykłady alertów krytycznych i alerty zależne od czasu?" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Care sunt exemple de alerte critice și alerte sensibile la timp?" + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -38083,6 +39164,12 @@ "value" : "Mens lydløse advarsler er slået til, vises alle advarsler fra din %1$@ app inklusive kritiske og tidsfølsomme advarsler midlertidigt uden lyde og vil kun vibrere." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Während die Stummschaltung von Warnungen aktiviert ist, werden alle Warnungen Deiner %1$@ App, einschließlich kritischer und zeitkritischer Warnungen, vorübergehend ohne Ton und nur durch Vibration angezeigt." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -38107,6 +39194,12 @@ "value" : "Gdy włączone jest wyciszenie alertów, wszystkie alerty z aplikacji %1$@ w tym alerty krytyczne i alerty zależne od czasu, będą tymczasowo wyświetlane bez dźwięków i będą jedynie wibrować." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În timp ce alertele dezactivate sunt activate, toate alertele de la aplicația %1$@ inclusiv alertele critice și cele sensibile la timp, se vor afișa temporar fără sunete și vor vibra doar." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -38123,6 +39216,12 @@ "value" : "Mens lydløs alarm er slået til, kan din insulinpumpe og CGM-hardware stadig afgive lyd." } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Während die Stummschaltung von Warnmeldungen aktiviert ist, können Deine Insulinpumpe und die CGM-Hardware weiterhin Töne abgeben." + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -38147,6 +39246,12 @@ "value" : "Gdy włączone jest wyciszenie alertów, pompa insulinowa i sprzęt CGM mogą nadal wydawać dźwięki." } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În timp ce alertele silențioase sunt activate, este posibil ca pompa de insulină și hardware-ul CGM să sune în continuare." + } + }, "ru" : { "stringUnit" : { "state" : "translated", @@ -38170,6 +39275,12 @@ "value" : "Under forsøg på at genstarte %1$@ opstod der en fejl.\n\n%2$@" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Beim Versuch %1$@ neu zu starten, ist ein Fehler aufgetreten. \n \n %2$@" + } + }, "it" : { "stringUnit" : { "state" : "translated", @@ -38188,6 +39299,12 @@ "value" : "Podczas próby ponownego uruchomienia %1$@ wystąpił błąd. \n\n %2$@" } }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "În timp ce încercam să repornesc %1$@ a apărut o eroare. \n \n %2$@" + } + }, "ru" : { "stringUnit" : { "state" : "translated", diff --git a/Loop/mul.lproj/Main.xcstrings b/Loop/mul.lproj/Main.xcstrings index 8c02a1a27a..d5d5e86fae 100644 --- a/Loop/mul.lproj/Main.xcstrings +++ b/Loop/mul.lproj/Main.xcstrings @@ -320,7 +320,7 @@ "he" : { "stringUnit" : { "state" : "translated", - "value" : "Predicted" + "value" : "חזוי" } }, "it" : { @@ -1928,7 +1928,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Detail" + "value" : "Detaliu" } }, "ru" : { diff --git a/LoopUI/Localizable.xcstrings b/LoopUI/Localizable.xcstrings index 3278bc859c..44d0bbf8fe 100644 --- a/LoopUI/Localizable.xcstrings +++ b/LoopUI/Localizable.xcstrings @@ -425,6 +425,12 @@ "state" : "translated", "value" : "---" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } } } }, @@ -1918,12 +1924,24 @@ "state" : "translated", "value" : "g" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "克" + } } } }, "HIGH" : { "comment" : "String displayed instead of a glucose value above the CGM range", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "مرتفع" + } + }, "da" : { "stringUnit" : { "state" : "translated", @@ -1990,6 +2008,12 @@ "value" : "WYSOKI" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "HIGH" + } + }, "ro" : { "stringUnit" : { "state" : "translated", @@ -2020,6 +2044,12 @@ "value" : "YÜKSEK" } }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "CAO" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -2417,6 +2447,12 @@ "LOW" : { "comment" : "String displayed instead of a glucose value below the CGM range", "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "منخفض" + } + }, "da" : { "stringUnit" : { "state" : "translated", @@ -2483,6 +2519,12 @@ "value" : "NISKI" } }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "LOW" + } + }, "ro" : { "stringUnit" : { "state" : "translated", @@ -2513,6 +2555,12 @@ "value" : "DÜŞÜK" } }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "THẤP" + } + }, "zh-Hans" : { "stringUnit" : { "state" : "translated", @@ -2637,6 +2685,12 @@ "state" : "translated", "value" : "mg/dL" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } } } }, @@ -2756,6 +2810,12 @@ "state" : "translated", "value" : "mmol/L" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } } } }, diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index 5bcaa5a75f..a211432d99 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -212,6 +212,12 @@ "state" : "translated", "value" : "---" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "– – –" + } } } }, @@ -1125,7 +1131,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "追加胰岛素建议已更新" + "value" : "大剂量推荐值已更新" } } } @@ -1615,6 +1621,12 @@ "state" : "translated", "value" : "g" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "克" + } } } }, @@ -1936,6 +1948,12 @@ "state" : "translated", "value" : "mg/dL" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mg/dL" + } } } }, @@ -2055,6 +2073,12 @@ "state" : "translated", "value" : "mmol/L" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "mmol/L" + } } } }, @@ -4213,7 +4237,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Nu se poate conecta la iPhone" + "value" : "Nu se poate accesa iPhone-ul" } }, "ru" : { diff --git a/WatchApp/mul.lproj/Interface.xcstrings b/WatchApp/mul.lproj/Interface.xcstrings index 2055548574..36927a907d 100644 --- a/WatchApp/mul.lproj/Interface.xcstrings +++ b/WatchApp/mul.lproj/Interface.xcstrings @@ -998,6 +998,12 @@ "value" : "Выполнение" } }, + "sk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Running" + } + }, "sv" : { "stringUnit" : { "state" : "translated", From cb0133ceeca791a8f693288c7318d768d0d2f37d Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Mon, 20 Oct 2025 18:03:58 -0500 Subject: [PATCH 22/41] ios26 fixes --- Loop/Views/SettingsView.swift | 49 +++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index 435f11ccaa..aa0da33134 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -50,7 +50,6 @@ public struct SettingsView: View { } case favoriteFoods - case therapySettings } } @@ -137,24 +136,6 @@ public struct SettingsView: View { } .sheet(item: $sheet) { sheet in switch sheet { - case .therapySettings: - TherapySettingsView( - mode: .settings, - viewModel: TherapySettingsViewModel( - therapySettings: viewModel.therapySettings(), - sensitivityOverridesEnabled: FeatureFlags.sensitivityOverridesEnabled, - adultChildInsulinModelSelectionEnabled: FeatureFlags.adultChildInsulinModelSelectionEnabled, - delegate: viewModel.therapySettingsViewModelDelegate - ) - ) - .environmentObject(displayGlucosePreference) - .environment(\.dismissAction, self.dismiss) - .environment(\.appName, self.appName) - .environment(\.chartColorPalette, .primary) - .environment(\.carbTintColor, self.carbTintColor) - .environment(\.glucoseTintColor, self.glucoseTintColor) - .environment(\.guidanceColors, self.guidanceColors) - .environment(\.insulinTintColor, self.insulinTintColor) case .favoriteFoods: FavoriteFoodsView() } @@ -286,15 +267,37 @@ extension SettingsView { } } } - + + private var therapySettingsView: some View { + TherapySettingsView( + mode: .settings, + viewModel: TherapySettingsViewModel( + therapySettings: viewModel.therapySettings(), + sensitivityOverridesEnabled: FeatureFlags.sensitivityOverridesEnabled, + adultChildInsulinModelSelectionEnabled: FeatureFlags.adultChildInsulinModelSelectionEnabled, + delegate: viewModel.therapySettingsViewModelDelegate + ) + ) + .environmentObject(displayGlucosePreference) + .environment(\.dismissAction, self.dismiss) + .environment(\.appName, self.appName) + .environment(\.chartColorPalette, .primary) + .environment(\.carbTintColor, self.carbTintColor) + .environment(\.glucoseTintColor, self.glucoseTintColor) + .environment(\.guidanceColors, self.guidanceColors) + .environment(\.insulinTintColor, self.insulinTintColor) + } + private var configurationSection: some View { Section(header: SectionHeader(label: NSLocalizedString("Configuration", comment: "The title of the Configuration section in settings"))) { - LargeButton(action: { sheet = .therapySettings }, - includeArrow: true, + NavigationLink(destination: therapySettingsView) { + LargeButton(action: { }, + includeArrow: false, imageView: Image("Therapy Icon"), label: NSLocalizedString("Therapy Settings", comment: "Title text for button to Therapy Settings"), descriptiveText: NSLocalizedString("Diabetes Treatment", comment: "Descriptive text for Therapy Settings")) - + } + ForEach(pluginMenuItems.filter {$0.section == .configuration}) { item in item.view } From 4a5e0f4a6baec7e907a378f30ae0392a1cbdd011 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 24 Oct 2025 11:55:09 -0700 Subject: [PATCH 23/41] Updated translations from lokalise on Fri Oct 24 11:10:09 PDT 2025 --- Common/ro.lproj/Intents.strings | 14 +- Loop Intent Extension/Localizable.xcstrings | 6 + Loop Status Extension/Localizable.xcstrings | 34 ++- .../mul.lproj/MainInterface.xcstrings | 12 + .../Bootstrap/InfoPlist.xcstrings | 2 +- .../Bootstrap/Localizable.xcstrings | 12 + Loop/Localizable.xcstrings | 282 +++++++++++++++--- Loop/mul.lproj/Main.xcstrings | 8 +- LoopCore/Localizable.xcstrings | 6 + LoopUI/Localizable.xcstrings | 32 +- WatchApp Extension/Localizable.xcstrings | 4 +- WatchApp/mul.lproj/Interface.xcstrings | 2 +- 12 files changed, 357 insertions(+), 57 deletions(-) diff --git a/Common/ro.lproj/Intents.strings b/Common/ro.lproj/Intents.strings index 2f029b1cd6..e6aa6c24d3 100644 --- a/Common/ro.lproj/Intents.strings +++ b/Common/ro.lproj/Intents.strings @@ -5,16 +5,16 @@ "80eo5o" = "Adaugă carbohidrați"; /* (No Comment) */ -"b085BW" = "I wasn't able to set the preset."; +"b085BW" = "Nu am reușit să setez presetarea."; /* (No Comment) */ -"I4OZy8" = "Enable Override Preset"; +"I4OZy8" = "Activare modificarea personalizată presetată"; /* (No Comment) */ -"lYMuWV" = "Override Name"; +"lYMuWV" = "Denumirea modificării personalizate"; /* (No Comment) */ -"nDKAmn" = "What's the name of the override you'd like to set?"; +"nDKAmn" = "Cum se numește modificarea pe care doriți să o setați?"; /* (No Comment) */ "OcNxIj" = "Adaugă carbohidrați"; @@ -23,14 +23,14 @@ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; /* (No Comment) */ -"XNNmtH" = "Enable preset in Loop"; +"XNNmtH" = "Activați presetarea în buclă"; /* (No Comment) */ -"yBzwCL" = "Override Selection"; +"yBzwCL" = "Selecție modificare personalizată"; /* (No Comment) */ "yc02Yq" = "Adaugă carbohidrați în Loop"; /* (No Comment) */ -"ZZ3mtM" = "Enable an override preset in Loop"; +"ZZ3mtM" = "Activați o modificare personalizată presetată în Buclă"; diff --git a/Loop Intent Extension/Localizable.xcstrings b/Loop Intent Extension/Localizable.xcstrings index 1673e78542..0952583062 100644 --- a/Loop Intent Extension/Localizable.xcstrings +++ b/Loop Intent Extension/Localizable.xcstrings @@ -117,6 +117,12 @@ "state" : "translated", "value" : "%1$@ v%2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } } } } diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings index 5fc7096a8d..6fbe25f5be 100644 --- a/Loop Status Extension/Localizable.xcstrings +++ b/Loop Status Extension/Localizable.xcstrings @@ -93,6 +93,12 @@ "state" : "translated", "value" : "? gr" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "? g" + } } } }, @@ -188,6 +194,12 @@ "state" : "translated", "value" : "? Ü" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "? U" + } } } }, @@ -378,6 +390,12 @@ "state" : "translated", "value" : "%1$@ Ü" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } } } }, @@ -497,6 +515,12 @@ "state" : "translated", "value" : "%1$@ v%2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } } } }, @@ -620,7 +644,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "活性碳水化合物" + "value" : "活性碳水" } } } @@ -741,6 +765,12 @@ "state" : "translated", "value" : "Lượng Insulin còn hoạt động" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性胰岛素" + } } } }, @@ -954,7 +984,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Eventually %1$@" + "value" : "În cele din urmă %1$@" } }, "ru" : { diff --git a/Loop Status Extension/mul.lproj/MainInterface.xcstrings b/Loop Status Extension/mul.lproj/MainInterface.xcstrings index de6dcf9dcd..10f4f8a972 100644 --- a/Loop Status Extension/mul.lproj/MainInterface.xcstrings +++ b/Loop Status Extension/mul.lproj/MainInterface.xcstrings @@ -231,6 +231,12 @@ "state" : "translated", "value" : "0 gr" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 g" + } } } }, @@ -464,6 +470,12 @@ "state" : "translated", "value" : "0 Ü" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "0 U" + } } } } diff --git a/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings b/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings index 942c95db3d..aab9a9f921 100644 --- a/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings +++ b/Loop Widget Extension/Bootstrap/InfoPlist.xcstrings @@ -62,7 +62,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Loop Widgets" + "value" : "Widgeturi Loop" } }, "ru" : { diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings index a53d6c9a9d..a8dafa7b15 100644 --- a/Loop Widget Extension/Bootstrap/Localizable.xcstrings +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -420,6 +420,12 @@ "state" : "translated", "value" : "%@ U" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@ U" + } } } }, @@ -539,6 +545,12 @@ "state" : "translated", "value" : "%1$@ v%2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } } } }, diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 32bb793195..0e4e54e19f 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -213,6 +213,12 @@ "state" : "translated", "value" : "Yemek-Öncesi Ön Ayarı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : " 餐前预设" + } } } }, @@ -314,6 +320,12 @@ "state" : "translated", "value" : "remaining" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : " 剩余" + } } } }, @@ -391,6 +403,12 @@ "state" : "translated", "value" : "Güvenlik Bildirimleri KAPALI" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : " 安全提醒已关闭" + } } } }, @@ -480,6 +498,12 @@ "state" : "translated", "value" : "Egzersiz Ön Ayarı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : " 运动预设" + } } } }, @@ -902,6 +926,12 @@ "state" : "translated", "value" : "%@ kaldı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "剩余 %@" + } } } }, @@ -2235,6 +2265,12 @@ "state" : "translated", "value" : "%1$@ Ü" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ U" + } } } }, @@ -3358,7 +3394,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Comparație pe 30 min a glicemiei anticipate față de cea observată, continuată cu o diminuare pe 60 min." + "value" : "Comparație timp de 30 de minute între predicția glicemiei și valoarea reală, continuată cu scăderea valorii pe parcursul a 60 de minute" } }, "ru" : { @@ -3479,6 +3515,12 @@ "state" : "translated", "value" : "Birkaç saniye kaldı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "剩余几秒" + } } } }, @@ -3542,7 +3584,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "O intrare manuală de glicermie trebuie să fie între %1$@ și %2$@" + "value" : "O intrare manuală de glicemie trebuie să fie între %1$@ și %2$@" } }, "ru" : { @@ -3562,6 +3604,12 @@ "state" : "translated", "value" : "Manuel KŞ girişi %1$@ ile %2$@ arasında olmalıdır" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入 %@ 到 %@ 之间的血糖值" + } } } }, @@ -3639,6 +3687,12 @@ "state" : "translated", "value" : "Manuel KŞ girişi %1$@ ile %2$@ arasında olmalıdır." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请输入 %1$@ 到 %2$@ 之间的血糖值" + } } } }, @@ -4045,6 +4099,12 @@ "state" : "translated", "value" : "Yeni bir %@ sürümü mevcuttur." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@有新版本可用。" + } } } }, @@ -4681,7 +4741,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "活性碳水化合物" + "value" : "活性碳水" } } } @@ -4997,7 +5057,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "添加喜欢的食物" + "value" : "添加常用食物" } } } @@ -5972,6 +6032,12 @@ "state" : "translated", "value" : "Experimente algoritmice" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "算法实验" + } } } }, @@ -6025,6 +6091,12 @@ "state" : "translated", "value" : "Experimentele algoritmice sunt modificări opționale ale algoritmului de buclă. Aceste modificări sunt mai puțin testate decât algoritmul de buclă standard, așa că vă rugăm să le utilizați cu atenție." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "算法实验是对 Loop 算法的可选调整。这些调整的测试程度低于标准算法,请谨慎启用。" + } } } }, @@ -6168,6 +6240,12 @@ "state" : "translated", "value" : "Toate alertele sunt dezactivate" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "所有警报已静音" + } } } }, @@ -6256,6 +6334,12 @@ "state" : "translated", "value" : "Toate favoritele" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "全部常用" + } } } }, @@ -6944,7 +7028,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "API Key" + "value" : "Cheie API" } }, "ru" : { @@ -7120,6 +7204,12 @@ "state" : "translated", "value" : "API Secret" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "API Secret" + } } } }, @@ -7203,6 +7293,12 @@ "state" : "translated", "value" : "Uygulama Profili" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "应用配置" + } } } }, @@ -7351,6 +7447,12 @@ "state" : "translated", "value" : "Bạn có chắc muốn xóa hết các dữ liệu cũ?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "确定要删除所有历史记录吗?" + } } } }, @@ -7440,6 +7542,12 @@ "state" : "translated", "value" : "Günlüğe kaydedilen tüm doz girişlerini silmek istediğinizden emin misiniz?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "是否确定删除全部注射记录?" + } } } }, @@ -7547,6 +7655,12 @@ "state" : "translated", "value" : "Bạn có chắc muốn xóa hết mọi giá trị của ngăn chứa insulin?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "是否确定删除全部储液量记录?" + } } } }, @@ -7636,6 +7750,12 @@ "state" : "translated", "value" : "Tüm %@ Verilerinizi silmek istediğinizden emin misiniz?\n (Bu eylem geri alınamaz)" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "确定要删除所有 %@ 数据吗?(此操作无法恢复)" + } } } }, @@ -7801,6 +7921,12 @@ "state" : "translated", "value" : "Sunteți sigur că doriți să ștergeți acest aliment?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你确定要删除该食物吗?" + } } } }, @@ -7877,7 +8003,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ești sigur că vrei să ștergi acest serviciu?" + "value" : "Sunteți sigur că vreți să ștergeți acest serviciu?" } }, "ru" : { @@ -8222,7 +8348,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Autentifică-te pentru a înregistra %@ unități" + "value" : "Autentificare pentru a înregistra %@ unități" } }, "ru" : { @@ -8242,6 +8368,12 @@ "state" : "translated", "value" : "%@ Ünite günlüğe kaydetmek için kimlik doğrulaması yapın" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "请验证身份以记录 %@U 胰岛素" + } } } }, @@ -8586,7 +8718,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "根据您的预测血糖值,当前不建议注射追加胰岛素。" + "value" : "根据您的预测血糖值,当前不建议注射大剂量。" } } } @@ -8677,6 +8809,12 @@ "state" : "translated", "value" : "Bluetooth\nKapalı" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "蓝牙已关闭" + } } } }, @@ -8766,6 +8904,12 @@ "state" : "translated", "value" : "Bluetooth\nKullanılamıyor" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "蓝牙不可用" + } } } }, @@ -9334,7 +9478,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "大剂量汇总" + "value" : "大剂量概要" } } } @@ -9893,7 +10037,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Întrerupere Bolus" + "value" : "Întrerupere bolus" } }, "ru" : { @@ -11766,6 +11910,12 @@ "state" : "translated", "value" : "Alegeți Preferatul:" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "选择常用" + } } } }, @@ -11942,7 +12092,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Loop automat" + "value" : "Buclă închisă" } }, "ru" : { @@ -12037,7 +12187,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Buclă închisă dezactivata" + "value" : "Buclă închisă dezactivată" } }, "ru" : { @@ -13134,7 +13284,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Monitorizare glicemică continuă" + "value" : "Senzor de monitorizare continuă a glicemiei" } }, "ru" : { @@ -13290,7 +13440,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "修正范围" + "value" : "校正范围" } } } @@ -13841,7 +13991,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : " Glicemia curentă de %1$@ se situează sub intervalul țintă de corecție." + "value" : "Glicemia actuală de %1$@ se situează sub intervalul țintă de corecție." } }, "ru" : { @@ -13877,7 +14027,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前葡萄糖%1$@低于修正范围" + "value" : "当前葡萄糖%1$@低于校正范围" } } } @@ -14418,7 +14568,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Șterge" + "value" : "Ștergeți" } }, "ru" : { @@ -14502,6 +14652,12 @@ "state" : "translated", "value" : "Ștergeți „ %@ ”?" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除”%@”?" + } } } }, @@ -15094,7 +15250,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Șterge date CGM de testare" + "value" : "Ștergeți datele CGM de testare" } }, "ru" : { @@ -15182,7 +15338,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Șterge date de testare" + "value" : "Ștergeți datele de testare" } }, "ru" : { @@ -15586,7 +15742,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tratament Diabet" + "value" : "Tratamentul diabetului" } }, "ru" : { @@ -15681,7 +15837,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "你是想输入%1$@克作为此餐的碳水化合物含量?" + "value" : "你确定本餐包含 %1$@ g 碳水吗?" } } } @@ -16104,6 +16260,12 @@ "state" : "translated", "value" : "Doz Özeti" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "注射量摘要" + } } } }, @@ -16353,6 +16515,12 @@ "state" : "translated", "value" : "Etkinleştir\nBluetooth" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用蓝牙" + } } } }, @@ -18175,7 +18343,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "喜欢的食物" + "value" : "常用食物" } } } @@ -18234,7 +18402,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "喜欢的食物" + "value" : "常用食物" } } } @@ -19332,7 +19500,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Glucoza" + "value" : "Glicemia" } }, "ru" : { @@ -19856,6 +20024,12 @@ "state" : "translated", "value" : "KŞ Girişi Aralık Dışında" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "输入血糖超出范围" + } } } }, @@ -19943,7 +20117,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Momentum glicemie" + "value" : "Avânt glicemie" } }, "ru" : { @@ -20715,6 +20889,12 @@ "state" : "translated", "value" : "Informaţii" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "信息" + } } } }, @@ -21489,6 +21669,12 @@ "state" : "translated", "value" : "İnsülin pompası" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素泵" + } } } }, @@ -23393,6 +23579,12 @@ "state" : "translated", "value" : "Günlük Doz" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "记录注射量" + } } } }, @@ -25665,7 +25857,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Efecte momentum" + "value" : "Efecte avânt" } }, "ru" : { @@ -26081,7 +26273,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "设备名称" + "value" : "名称" } } } @@ -26291,6 +26483,12 @@ "state" : "translated", "value" : "Noua mâncare preferată" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "新增常用食物" + } } } }, @@ -26741,7 +26939,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Bolusul Maxim nu este setat" + "value" : "Bolusul maxim nu este setat" } }, "ru" : { @@ -27228,7 +27426,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "不,编辑摄入量" + "value" : "不,修改含量" } } } @@ -28817,6 +29015,12 @@ "state" : "translated", "value" : "Tahmini KŞ aralık içinde." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "预测血糖在目标范围内。" + } } } }, @@ -29202,7 +29406,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Efect integral: %1$@ \nEfect total al glucozei: %2$@" + "value" : "Efect integral: %1$@ \nEfect total al glicemiei: %2$@" } }, "ru" : { @@ -32466,7 +32670,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "保存为喜欢的食物" + "value" : "保存为常用食物" } } } @@ -33796,6 +34000,12 @@ "state" : "translated", "value" : "Başlangıç zamanı aralığın dışında: %@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "开始时间超出范围:%@" + } } } }, @@ -34002,7 +34212,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Start Bolus" + "value" : "Start bolus" } }, "ru" : { @@ -39498,7 +39708,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Ajustarea temporară de antrenament fost activată de mai mult de 24 de ore. Asigură-te că încă dorești să fie activată sau dezactiveaz-o din aplicație." + "value" : "Ajustarea temporară de antrenament fost activată de mai mult de 24 de ore. Asigurați-vă că încă doriți să fie activată sau dezactivați-o din aplicație." } }, "ru" : { @@ -39919,7 +40129,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Glicemia dumneavoastră este sub %1$@. Sunteți sigur/ă că doriți să bolusați?" + "value" : "Glicemia dumneavoastră este sub %1$@. Sunteți sigur că doriți să bolusați?" } }, "ru" : { @@ -40008,7 +40218,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Glicemia ta este sub sau se anticipează că va scădea sub limita de siguranță, %@." + "value" : "Glicemia dumneavoastră este sub sau se anticipează că va scădea sub limita de siguranță, %@." } }, "ru" : { @@ -40032,7 +40242,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "你的血糖已低于或预计将低于你的血糖安全范围:%@。" + "value" : "你的血糖已低于或预计将低于你的血糖安全下限:%@。" } } } diff --git a/Loop/mul.lproj/Main.xcstrings b/Loop/mul.lproj/Main.xcstrings index d5d5e86fae..473a6d13bc 100644 --- a/Loop/mul.lproj/Main.xcstrings +++ b/Loop/mul.lproj/Main.xcstrings @@ -494,7 +494,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Detail" + "value" : "Detaliu" } }, "ru" : { @@ -752,7 +752,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Glucose Change" + "value" : "Modificarea glicemiei" } }, "ru" : { @@ -1670,7 +1670,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Efecte carbohidrați" + "value" : "Efectul carbohidraților" } }, "ru" : { @@ -2851,7 +2851,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Glucoza" + "value" : "Glicemie" } }, "ru" : { diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index 741f9a599e..2f6a05bcfe 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -117,6 +117,12 @@ "state" : "translated", "value" : "%1$@ v%2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } } } }, diff --git a/LoopUI/Localizable.xcstrings b/LoopUI/Localizable.xcstrings index 44d0bbf8fe..409c038f3b 100644 --- a/LoopUI/Localizable.xcstrings +++ b/LoopUI/Localizable.xcstrings @@ -146,6 +146,12 @@ "state" : "translated", "value" : "\n%1$@\n\nDaha fazla bilgi için CGM ve insülin pompası durum simgelerine dokunun. %2$@ döngüyü tamamlamaya çalışacak, ancak pompanız ve CGM ile olası iletişim sorunlarını kontrol edin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 点按你的 CGM 和胰岛泵状态图标以查看更多信息。%2$@ 将继续尝试完成循环,但请检查你的泵和 CGM 是否存在潜在的通信问题。" + } } } }, @@ -217,6 +223,12 @@ "state" : "translated", "value" : "\n%1$@\n\nDaha fazla bilgi için CGM ve insülin pompası durum simgelerinize dokunun. %2$@ döngüyü tamamlamaya çalışacak, ancak pompanız ve CGM ile olası iletişim sorunlarına dikkat edin." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 点按你的 CGM 和胰岛泵状态图标以查看更多信息。%2$@ 将继续尝试完成循环,但请注意你的泵和 CGM 之间可能存在的通信问题。" + } } } }, @@ -829,6 +841,12 @@ "state" : "translated", "value" : "%1$@ önce %2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ 之前的 %2$@" + } } } }, @@ -1186,6 +1204,12 @@ "state" : "translated", "value" : "%1$@ v%2$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@ v%2$@" + } } } }, @@ -1571,7 +1595,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Buclă închisă dezactivata" + "value" : "Buclă închisă dezactivată" } }, "ru" : { @@ -1660,7 +1684,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Buclă închisă activata" + "value" : "Buclă închisă activată" } }, "ru" : { @@ -2130,7 +2154,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "上次完成闭环是 %1$@" + "value" : "上次闭环是在 %1$@" } } } @@ -2219,7 +2243,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Eșec Loop" + "value" : "Eșec buclă" } }, "ru" : { diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index a211432d99..16d11d5458 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -548,7 +548,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "活性碳水化合物" + "value" : "活性碳水" } } } @@ -1107,7 +1107,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Actualizare Recomandare bolus" + "value" : "Actualizare recomandare de bolus" } }, "ru" : { diff --git a/WatchApp/mul.lproj/Interface.xcstrings b/WatchApp/mul.lproj/Interface.xcstrings index 36927a907d..986e716c4f 100644 --- a/WatchApp/mul.lproj/Interface.xcstrings +++ b/WatchApp/mul.lproj/Interface.xcstrings @@ -2302,7 +2302,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "ACTIVE CARBS" + "value" : "活性碳水" } } } From f9978195659abff5c9f1286743cbede85dd5caf9 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 19 Nov 2025 09:59:56 -0800 Subject: [PATCH 24/41] Updated translations from lokalise on Wed Nov 19 09:07:32 PST 2025 --- Common/ce.lproj/Intents.strings | 30 +++++++--- Common/fr.lproj/Intents.strings | 2 +- Common/hu.lproj/Intents.strings | 30 +++++++--- Common/uk.lproj/Intents.strings | 30 +++++++--- Loop Status Extension/Localizable.xcstrings | 2 +- Loop/Localizable.xcstrings | 62 ++++++++++++++------- LoopCore/Localizable.xcstrings | 2 +- WatchApp Extension/Localizable.xcstrings | 4 +- 8 files changed, 111 insertions(+), 51 deletions(-) diff --git a/Common/ce.lproj/Intents.strings b/Common/ce.lproj/Intents.strings index 853af215c0..69202aa99c 100644 --- a/Common/ce.lproj/Intents.strings +++ b/Common/ce.lproj/Intents.strings @@ -1,24 +1,36 @@ -"80eo5o" = "Add Carb Entry"; - +/* (No Comment) */ "9KhaIS" = "I've set the preset"; -"I4OZy8" = "Enable Override Preset"; - -"OcNxIj" = "Add Carb Entry"; - -"XNNmtH" = "Enable preset in Loop"; - -"ZZ3mtM" = "Enable an override preset in Loop"; +/* (No Comment) */ +"80eo5o" = "Add Carb Entry"; +/* (No Comment) */ "b085BW" = "I wasn't able to set the preset."; +/* (No Comment) */ +"I4OZy8" = "Enable Override Preset"; + +/* (No Comment) */ "lYMuWV" = "Override Name"; +/* (No Comment) */ "nDKAmn" = "What's the name of the override you'd like to set?"; +/* (No Comment) */ +"OcNxIj" = "Add Carb Entry"; + +/* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; +/* (No Comment) */ +"XNNmtH" = "Enable preset in Loop"; + +/* (No Comment) */ "yBzwCL" = "Override Selection"; +/* (No Comment) */ "yc02Yq" = "Add a carb entry to Loop"; +/* (No Comment) */ +"ZZ3mtM" = "Enable an override preset in Loop"; + diff --git a/Common/fr.lproj/Intents.strings b/Common/fr.lproj/Intents.strings index 229cc8c994..3e42e5566d 100644 --- a/Common/fr.lproj/Intents.strings +++ b/Common/fr.lproj/Intents.strings @@ -8,7 +8,7 @@ "b085BW" = "Je n'ai pas pu définir le préréglage."; /* (No Comment) */ -"I4OZy8" = "Activer l'ajustement préréglé"; +"I4OZy8" = "Activer la surcharge temporaire"; /* (No Comment) */ "lYMuWV" = "Nom Ajustement"; diff --git a/Common/hu.lproj/Intents.strings b/Common/hu.lproj/Intents.strings index 853af215c0..69202aa99c 100644 --- a/Common/hu.lproj/Intents.strings +++ b/Common/hu.lproj/Intents.strings @@ -1,24 +1,36 @@ -"80eo5o" = "Add Carb Entry"; - +/* (No Comment) */ "9KhaIS" = "I've set the preset"; -"I4OZy8" = "Enable Override Preset"; - -"OcNxIj" = "Add Carb Entry"; - -"XNNmtH" = "Enable preset in Loop"; - -"ZZ3mtM" = "Enable an override preset in Loop"; +/* (No Comment) */ +"80eo5o" = "Add Carb Entry"; +/* (No Comment) */ "b085BW" = "I wasn't able to set the preset."; +/* (No Comment) */ +"I4OZy8" = "Enable Override Preset"; + +/* (No Comment) */ "lYMuWV" = "Override Name"; +/* (No Comment) */ "nDKAmn" = "What's the name of the override you'd like to set?"; +/* (No Comment) */ +"OcNxIj" = "Add Carb Entry"; + +/* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; +/* (No Comment) */ +"XNNmtH" = "Enable preset in Loop"; + +/* (No Comment) */ "yBzwCL" = "Override Selection"; +/* (No Comment) */ "yc02Yq" = "Add a carb entry to Loop"; +/* (No Comment) */ +"ZZ3mtM" = "Enable an override preset in Loop"; + diff --git a/Common/uk.lproj/Intents.strings b/Common/uk.lproj/Intents.strings index 853af215c0..69202aa99c 100644 --- a/Common/uk.lproj/Intents.strings +++ b/Common/uk.lproj/Intents.strings @@ -1,24 +1,36 @@ -"80eo5o" = "Add Carb Entry"; - +/* (No Comment) */ "9KhaIS" = "I've set the preset"; -"I4OZy8" = "Enable Override Preset"; - -"OcNxIj" = "Add Carb Entry"; - -"XNNmtH" = "Enable preset in Loop"; - -"ZZ3mtM" = "Enable an override preset in Loop"; +/* (No Comment) */ +"80eo5o" = "Add Carb Entry"; +/* (No Comment) */ "b085BW" = "I wasn't able to set the preset."; +/* (No Comment) */ +"I4OZy8" = "Enable Override Preset"; + +/* (No Comment) */ "lYMuWV" = "Override Name"; +/* (No Comment) */ "nDKAmn" = "What's the name of the override you'd like to set?"; +/* (No Comment) */ +"OcNxIj" = "Add Carb Entry"; + +/* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; +/* (No Comment) */ +"XNNmtH" = "Enable preset in Loop"; + +/* (No Comment) */ "yBzwCL" = "Override Selection"; +/* (No Comment) */ "yc02Yq" = "Add a carb entry to Loop"; +/* (No Comment) */ +"ZZ3mtM" = "Enable an override preset in Loop"; + diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings index 6fbe25f5be..3c2f0c2c24 100644 --- a/Loop Status Extension/Localizable.xcstrings +++ b/Loop Status Extension/Localizable.xcstrings @@ -1271,7 +1271,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "IOB %1$@ 单位" + "value" : "活性胰岛素 %1$@ U" } } } diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 0e4e54e19f..91d0b53de7 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1278,6 +1278,12 @@ "%1@%2@" : { "comment" : "Adds a full-stop to a statement (1: statement, 2: full stop character)", "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$1@%2$2@" + } + }, "en" : { "stringUnit" : { "state" : "new", @@ -4192,7 +4198,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "在注射追加胰岛素前,必须先配置胰岛素泵。" + "value" : "在注射大剂量前,必须先配置胰岛素泵。" } } } @@ -6600,7 +6606,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前启用的覆盖设置正在修改您的碳水比和胰岛素敏感系数。\n如果您不希望其影响追加胰岛素计算和预测血糖,请考虑关闭该覆盖设置。" + "value" : "当前启用的覆盖设置正在修改您的碳水比和胰岛素敏感系数。\n如果您不希望其影响大剂量的计算和预测血糖,请考虑关闭该覆盖设置。" } } } @@ -7311,6 +7317,12 @@ "value" : "Apfel" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Pomme" + } + }, "he" : { "stringUnit" : { "state" : "translated", @@ -9288,7 +9300,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "追加胰岛素问题" + "value" : "大剂量出现问题" } } } @@ -9561,7 +9573,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "追加胰岛素剂量过小" + "value" : "大剂量太少" } } } @@ -10307,6 +10319,12 @@ "value" : "Menge gegessen" } }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Quantité de glucides" + } + }, "he" : { "stringUnit" : { "state" : "translated", @@ -12493,6 +12511,12 @@ "state" : "translated", "value" : "lúc %1$@" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "在 %1$@" + } } } }, @@ -16815,7 +16839,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "请输入血糖仪测得的血糖值,以获取推荐的追加胰岛素剂量。" + "value" : "请输入血糖仪测得的血糖值,以获取推荐的大剂量。" } } } @@ -17863,7 +17887,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "超出设定的最大追加胰岛素剂量限制" + "value" : "超出设定的最大剂量限制" } } } @@ -18343,7 +18367,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "常用食物" + "value" : "食物库" } } } @@ -18402,7 +18426,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "常用食物" + "value" : "食物库" } } } @@ -22343,7 +22367,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "追加胰岛素剂量无效" + "value" : "大剂量无效" } } } @@ -22887,7 +22911,7 @@ "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Raportare probleme" + "value" : "Generează raport" } }, "ru" : { @@ -24083,7 +24107,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Loop 检测到您的蓝牙设置存在问题,在蓝牙启用之前将无法正常工作。\n您将无法接收血糖读数,也无法注射追加胰岛素。" + "value" : "Loop 检测到您的蓝牙设置存在问题,在蓝牙启用之前将无法正常工作。\n您将无法接收血糖读数,也无法推注大剂量。" } } } @@ -24308,7 +24332,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Loop 通常在每个给药周期中提供您预测胰岛素需求的 40%。\n\n启用“基于血糖的部分给药实验功能”后,Loop 将根据血糖水平调整每个周期实际注射的推荐追加胰岛素比例。\n\n当血糖接近矫正目标范围时,仅注射 20%(类似于临时基础率),血糖升高时比例会逐步增加,在高血糖状态(200 mg/dL,11.1 mmol/L)时最高可达 80%。\n\n请注意,当血糖快速上升(例如未申报的进食)时,该功能与血糖变化速度及回顾性矫正机制叠加,可能导致注射剂量超过由胰岛素敏感系数(ISF)计算出的剂量。" + "value" : "Loop 通常在每个给药周期中提供您预测胰岛素需求的 40%。\n\n启用“基于血糖的部分给药实验功能”后,Loop 将根据血糖水平调整每个周期实际推注的大剂量比例。\n\n当血糖接近矫正目标范围时,仅注射 20%(类似于临时基础率),血糖升高时比例会逐步增加,在高血糖状态(200 mg/dL,11.1 mmol/L)时最高可达 80%。\n\n请注意,当血糖快速上升(例如未申报的进食)时,该功能与血糖变化速度及回顾性矫正机制叠加,可能导致注射剂量超过由胰岛素敏感系数(ISF)计算出的剂量。" } } } @@ -24397,7 +24421,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当所需胰岛素高于计划基础率时,Loop 将自动注射追加胰岛素;当所需胰岛素低于计划基础率时,则使用临时基础率以减少胰岛素输注" + "value" : "当所需胰岛素高于计划基础率时,Loop 将自动推注大剂量;当所需胰岛素低于计划基础率时,则使用临时基础率以减少胰岛素输注" } } } @@ -31870,7 +31894,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "推荐追加胰岛素剂量超出最大限制" + "value" : "推荐大剂量超出最大限制" } } } @@ -32275,7 +32299,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "胰岛素容量" + "value" : "储药器" } } } @@ -32800,7 +32824,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "仅保存,不注射追加胰岛素" + "value" : "仅保存,无大剂量" } } } @@ -36415,7 +36439,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "此选项仅在 Loop 的给药策略设为“自动追加胰岛素”时适用。" + "value" : "此选项仅在 Loop 的给药策略设为“自动大剂量”时适用。" } } } @@ -39069,7 +39093,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前或预测的血糖低于血糖安全下限时,Loop 将不会推荐追加胰岛素,并始终建议将临时基础速率设为 0 单位/小时。" + "value" : "当前或预测的血糖低于血糖安全下限时,Loop 将不会推荐大剂量,并始终建议将临时基础速率设为 0 单位/小时。" } } } @@ -40669,7 +40693,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "您的胰岛素泵数据已过期。%1$@ 无法推荐追加胰岛素剂量。" + "value" : "您的胰岛素泵数据已过期。%1$@ 无法推荐大剂量。" } } } diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index 2f6a05bcfe..052b1f8b72 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -210,7 +210,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "自动追加胰岛素" + "value" : "自动大剂量" } } } diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index 16d11d5458..6eea2af596 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -3726,7 +3726,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "保存并注射追加胰岛素" + "value" : "保存并推注大剂量" } } } @@ -3934,7 +3934,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "旋转数字表冠\n以注射追加胰岛素" + "value" : "旋转数字表冠\n以推注大剂量" } } } From 7bf62f5674fb5b8ced0dbebc7a98f9b06e586566 Mon Sep 17 00:00:00 2001 From: Bastiaan Verhaar <3987804+bastiaanv@users.noreply.github.com> Date: Sat, 22 Nov 2025 04:31:13 +0100 Subject: [PATCH 25/41] feature: Live Activity (#2191) --- .../Bootstrap/Bootstrap.swift | 11 + .../Helpers/LocalizedString.swift | 21 + .../Live Activity/BasalViewActivity.swift | 46 ++ .../Live Activity/ChartView.swift | 161 ++++++ .../GlucoseLiveActivityConfiguration.swift | 490 +++++++++++++++++ Loop Widget Extension/LoopWidgets.swift | 3 + Loop.xcconfig | 2 +- Loop.xcodeproj/project.pbxproj | 80 ++- Loop/Info.plist | 4 + Loop/Loop.entitlements | 2 + .../Live Activity/ChartAxisGenerator.swift | 125 +++++ .../GlucoseActivityAttributes.swift | 139 +++++ .../Live Activity/LiveActivityManager.swift | 515 ++++++++++++++++++ .../LiveActivityManagerProxy.swift | 13 + Loop/Managers/LoopDataManager.swift | 23 +- .../LiveActivityManagementViewModel.swift | 35 ++ Loop/Views/AlertManagementView.swift | 7 + .../LiveActivityBottomRowManagerView.swift | 133 +++++ Loop/Views/LiveActivityManagementView.swift | 140 +++++ LoopCore/LiveActivitySettings.swift | 154 ++++++ LoopCore/Localizable.xcstrings | 58 +- LoopCore/NSUserDefaults.swift | 24 + 22 files changed, 2174 insertions(+), 12 deletions(-) create mode 100644 Loop Widget Extension/Bootstrap/Bootstrap.swift create mode 100644 Loop Widget Extension/Helpers/LocalizedString.swift create mode 100644 Loop Widget Extension/Live Activity/BasalViewActivity.swift create mode 100644 Loop Widget Extension/Live Activity/ChartView.swift create mode 100644 Loop Widget Extension/Live Activity/GlucoseLiveActivityConfiguration.swift create mode 100644 Loop/Managers/Live Activity/ChartAxisGenerator.swift create mode 100644 Loop/Managers/Live Activity/GlucoseActivityAttributes.swift create mode 100644 Loop/Managers/Live Activity/LiveActivityManager.swift create mode 100644 Loop/Managers/Live Activity/LiveActivityManagerProxy.swift create mode 100644 Loop/View Models/LiveActivityManagementViewModel.swift create mode 100644 Loop/Views/LiveActivityBottomRowManagerView.swift create mode 100644 Loop/Views/LiveActivityManagementView.swift create mode 100644 LoopCore/LiveActivitySettings.swift diff --git a/Loop Widget Extension/Bootstrap/Bootstrap.swift b/Loop Widget Extension/Bootstrap/Bootstrap.swift new file mode 100644 index 0000000000..00823471c1 --- /dev/null +++ b/Loop Widget Extension/Bootstrap/Bootstrap.swift @@ -0,0 +1,11 @@ +// +// Bootstrap.swift +// Loop Widget Extension +// +// Created by Bastiaan Verhaar on 25/06/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import Foundation + +class Bootstrap{} diff --git a/Loop Widget Extension/Helpers/LocalizedString.swift b/Loop Widget Extension/Helpers/LocalizedString.swift new file mode 100644 index 0000000000..158181755d --- /dev/null +++ b/Loop Widget Extension/Helpers/LocalizedString.swift @@ -0,0 +1,21 @@ +// +// LocalizedString.swift +// Loop Widget Extension +// +// Created by Bastiaan Verhaar on 25/06/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import Foundation + +private class FrameworkBundle { + static let main = Bundle(for: Bootstrap.self) +} + +func LocalizedString(_ key: String, tableName: String? = nil, value: String? = nil, comment: String) -> String { + if let value = value { + return NSLocalizedString(key, tableName: tableName, bundle: FrameworkBundle.main, value: value, comment: comment) + } else { + return NSLocalizedString(key, tableName: tableName, bundle: FrameworkBundle.main, comment: comment) + } +} diff --git a/Loop Widget Extension/Live Activity/BasalViewActivity.swift b/Loop Widget Extension/Live Activity/BasalViewActivity.swift new file mode 100644 index 0000000000..915335c5fb --- /dev/null +++ b/Loop Widget Extension/Live Activity/BasalViewActivity.swift @@ -0,0 +1,46 @@ +// +// BasalView.swift +// Loop +// +// Created by Noah Brauner on 8/15/22. +// Copyright © 2022 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +struct BasalViewActivity: View { + let percent: Double + let rate: Double + + var body: some View { + VStack(spacing: 1) { + BasalRateView(percent: percent) + .overlay( + BasalRateView(percent: percent) + .stroke(Color("insulin"), lineWidth: 2) + ) + .foregroundColor(Color("insulin").opacity(0.5)) + .frame(width: 44, height: 22) + + if let rateString = decimalFormatter.string(from: NSNumber(value: rate)) { + Text("\(rateString)U") + .font(.subheadline) + } + else { + Text("-U") + .font(.subheadline) + } + } + } + + private let decimalFormatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.numberStyle = .decimal + formatter.minimumFractionDigits = 1 + formatter.minimumIntegerDigits = 1 + formatter.positiveFormat = "+0.0##" + formatter.negativeFormat = "-0.0##" + + return formatter + }() +} diff --git a/Loop Widget Extension/Live Activity/ChartView.swift b/Loop Widget Extension/Live Activity/ChartView.swift new file mode 100644 index 0000000000..b69bf3397c --- /dev/null +++ b/Loop Widget Extension/Live Activity/ChartView.swift @@ -0,0 +1,161 @@ +// +// ChartValues.swift +// Loop Widget Extension +// +// Created by Bastiaan Verhaar on 25/06/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import Foundation +import SwiftUI +import Charts + +@available(iOS 16.2, *) +struct ChartView: View { + private let glucoseSampleData: [ChartValues] + private let predicatedData: [ChartValues] + private let glucoseRanges: [GlucoseRangeValue] + private let preset: Preset? + private let yAxisMarks: [Double] + + init(glucoseSamples: [GlucoseSampleAttributes], predicatedGlucose: [Double], predicatedStartDate: Date?, predicatedInterval: TimeInterval?, useLimits: Bool, lowerLimit: Double, upperLimit: Double, glucoseRanges: [GlucoseRangeValue], preset: Preset?, yAxisMarks: [Double]) { + self.glucoseSampleData = ChartValues.convert(data: glucoseSamples, useLimits: useLimits, lowerLimit: lowerLimit, upperLimit: upperLimit) + self.predicatedData = ChartValues.convert( + data: predicatedGlucose, + startDate: predicatedStartDate ?? Date.now, + interval: predicatedInterval ?? .minutes(5), + useLimits: useLimits, + lowerLimit: lowerLimit, + upperLimit: upperLimit + ) + self.preset = preset + self.glucoseRanges = glucoseRanges + self.yAxisMarks = yAxisMarks + } + + init(glucoseSamples: [GlucoseSampleAttributes], useLimits: Bool, lowerLimit: Double, upperLimit: Double, glucoseRanges: [GlucoseRangeValue], preset: Preset?, yAxisMarks: [Double]) { + self.glucoseSampleData = ChartValues.convert(data: glucoseSamples, useLimits: useLimits, lowerLimit: lowerLimit, upperLimit: upperLimit) + self.predicatedData = [] + self.preset = preset + self.glucoseRanges = glucoseRanges + self.yAxisMarks = yAxisMarks + } + + var body: some View { + ZStack(alignment: Alignment(horizontal: .trailing, vertical: .top)){ + Chart { + if let preset = self.preset, predicatedData.count > 0, preset.endDate > Date.now.addingTimeInterval(.hours(-6)) { + RectangleMark( + xStart: .value("Start", preset.startDate), + xEnd: .value("End", preset.endDate), + yStart: .value("Preset override", preset.minValue), + yEnd: .value("Preset override", preset.maxValue) + ) + .foregroundStyle(.primary) + .opacity(0.6) + } + + ForEach(glucoseRanges) { item in + RectangleMark( + xStart: .value("Start", item.startDate), + xEnd: .value("End", item.endDate), + yStart: .value("Glucose range", item.minValue), + yEnd: .value("Glucose range", item.maxValue) + ) + .foregroundStyle(.primary) + .opacity(0.3) + } + + ForEach(glucoseSampleData) { item in + PointMark (x: .value("Date", item.x), + y: .value("Glucose level", item.y) + ) + .symbolSize(10) + .foregroundStyle(by: .value("Color", item.color)) + } + + ForEach(predicatedData) { item in + LineMark (x: .value("Date", item.x), + y: .value("Glucose level", item.y) + ) + .lineStyle(StrokeStyle(lineWidth: 2, dash: [6, 5])) + .foregroundStyle(by: .value("Color", item.color)) + } + } + .chartForegroundStyleScale([ + "Good": .green, + "High": .orange, + "Low": .red, + "Default": Color("glucose") + ]) + .chartPlotStyle { plotContent in + plotContent.background(.cyan.opacity(0.15)) + } + .chartLegend(.hidden) + .chartYScale(domain: [yAxisMarks.first ?? 0, yAxisMarks.last ?? 0]) + .chartYAxis { + AxisMarks(values: yAxisMarks) + } + .chartYAxis { + AxisMarks(position: .leading) { _ in + AxisValueLabel().foregroundStyle(Color.primary) + AxisGridLine(stroke: .init(lineWidth: 0.1, dash: [2, 3])) + .foregroundStyle(Color.primary) + } + } + .chartXAxis { + AxisMarks(position: .automatic, values: .stride(by: .hour)) { _ in + AxisValueLabel(format: .dateTime.hour(.twoDigits(amPM: .narrow)), anchor: .top) + .foregroundStyle(Color.primary) + AxisGridLine(stroke: .init(lineWidth: 0.1, dash: [2, 3])) + .foregroundStyle(Color.primary) + } + } + + if let preset = self.preset, preset.endDate > Date.now { + Text(preset.title) + .font(.footnote) + .padding(.trailing, 5) + .padding(.top, 2) + } + } + } +} + +struct ChartValues: Identifiable { + public let id: UUID + public let x: Date + public let y: Double + public let color: String + + init(x: Date, y: Double, color: String) { + self.id = UUID() + self.x = x + self.y = y + self.color = color + } + + static func convert(data: [Double], startDate: Date, interval: TimeInterval, useLimits: Bool, lowerLimit: Double, upperLimit: Double) -> [ChartValues] { + let twoHours = Date.now.addingTimeInterval(.hours(4)) + + return data.enumerated().filter { (index, item) in + return startDate.addingTimeInterval(interval * Double(index)) < twoHours + }.map { (index, item) in + return ChartValues( + x: startDate.addingTimeInterval(interval * Double(index)), + y: item, + color: !useLimits ? "Default" : item < lowerLimit ? "Low" : item > upperLimit ? "High" : "Good" + ) + } + } + + static func convert(data: [GlucoseSampleAttributes], useLimits: Bool, lowerLimit: Double, upperLimit: Double) -> [ChartValues] { + return data.map { item in + return ChartValues( + x: item.x, + y: item.y, + color: !useLimits ? "Default" : item.y < lowerLimit ? "Low" : item.y > upperLimit ? "High" : "Good" + ) + } + } +} diff --git a/Loop Widget Extension/Live Activity/GlucoseLiveActivityConfiguration.swift b/Loop Widget Extension/Live Activity/GlucoseLiveActivityConfiguration.swift new file mode 100644 index 0000000000..b288c71458 --- /dev/null +++ b/Loop Widget Extension/Live Activity/GlucoseLiveActivityConfiguration.swift @@ -0,0 +1,490 @@ +// +// LiveActivityConfiguration.swift +// Loop Widget Extension +// +// Created by Bastiaan Verhaar on 23/06/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import ActivityKit +import Charts +import HealthKit +import LoopCore +import LoopKit +import SwiftUI +import WidgetKit + +@available(iOS 16.2, *) +struct GlucoseLiveActivityConfiguration: Widget { + var body: some WidgetConfiguration { + if #available(iOS 18.0, *) { + return ActivityConfiguration(for: GlucoseActivityAttributes.self) { + context in + lockScreenView(context: context) + } dynamicIsland: { context in + dynamicIslandView(context: context) + } + .supplementalActivityFamilies([.small]) + } else { + return ActivityConfiguration(for: GlucoseActivityAttributes.self) { + context in + lockScreenView(context: context) + } dynamicIsland: { context in + dynamicIslandView(context: context) + } + } + } + + // MARK: - Lock Screen View + + @ViewBuilder + private func lockScreenView( + context: ActivityViewContext + ) -> some View { + // Create the presentation that appears on the Lock Screen and as a + // banner on the Home Screen of devices that don't support the Dynamic Island. + if #available(iOS 18.0, *) { + AdaptiveLockScreenView(context: context) + } else { + fullLockScreenView(context: context) + } + } + + @available(iOS 18.0, *) + struct AdaptiveLockScreenView: View { + let context: ActivityViewContext + @Environment(\.activityFamily) private var activityFamily + + var body: some View { + if activityFamily == .small { + // WatchOS & CarPlay supplemental view - show only bottom row + compactLockScreenView(context: context) + } else { + // Lock screen - show full view with chart + fullLockScreenView(context: context) + } + } + + @ViewBuilder + private func fullLockScreenView( + context: ActivityViewContext + ) -> some View { + GlucoseLiveActivityConfiguration().fullLockScreenView( + context: context + ) + } + + @ViewBuilder + private func compactLockScreenView( + context: ActivityViewContext + ) -> some View { + GlucoseLiveActivityConfiguration().compactLockScreenView( + context: context + ) + } + } + + @ViewBuilder + private func fullLockScreenView( + context: ActivityViewContext + ) -> some View { + ZStack { + VStack { + if context.attributes.mode == .large { + HStack(spacing: 15) { + loopIcon(context) + if context.attributes.addPredictiveLine { + ChartView( + glucoseSamples: context.state.glucoseSamples, + predicatedGlucose: context.state + .predicatedGlucose, + predicatedStartDate: context.state + .predicatedStartDate, + predicatedInterval: context.state + .predicatedInterval, + useLimits: context.attributes.useLimits, + lowerLimit: context.state.isMmol + ? context.attributes.lowerLimitChartMmol + : context.attributes.lowerLimitChartMg, + upperLimit: context.state.isMmol + ? context.attributes.upperLimitChartMmol + : context.attributes.upperLimitChartMg, + glucoseRanges: context.state.glucoseRanges, + preset: context.state.preset, + yAxisMarks: context.state.yAxisMarks + ) + .frame(height: 85) + } else { + ChartView( + glucoseSamples: context.state.glucoseSamples, + useLimits: context.attributes.useLimits, + lowerLimit: context.state.isMmol + ? context.attributes.lowerLimitChartMmol + : context.attributes.lowerLimitChartMg, + upperLimit: context.state.isMmol + ? context.attributes.upperLimitChartMmol + : context.attributes.upperLimitChartMg, + glucoseRanges: context.state.glucoseRanges, + preset: context.state.preset, + yAxisMarks: context.state.yAxisMarks + ) + .frame(height: 85) + } + } + } + + HStack { + bottomSpacer(border: false) + + let endIndex = context.state.bottomRow.endIndex - 1 + ForEach( + Array(context.state.bottomRow.enumerated()), + id: \.element + ) { (index, item) in + switch item.type { + case .generic: + bottomItemGeneric( + title: item.label, + value: item.value, + unit: LocalizedString( + item.unit, + comment: "No comment" + ) + ) + + case .basal: + BasalViewActivity( + percent: item.percentage, + rate: item.rate + ) + + case .currentBg: + bottomItemCurrentBG( + value: item.value, + trend: item.trend, + context: context + ) + } + + if index != endIndex { + bottomSpacer(border: true) + } + } + + bottomSpacer(border: false) + } + } + if context.state.ended { + VStack { + Spacer() + HStack { + Spacer() + Text( + NSLocalizedString( + "Open the app to update the widget", + comment: "No comment" + ) + ) + Spacer() + } + Spacer() + } + .background(.ultraThinMaterial.opacity(0.8)) + .padding(.all, -15) + } + } + .privacySensitive() + .padding(.all, 15) + .background(BackgroundStyle.background.opacity(0.4)) + .activityBackgroundTint(Color.clear) + } + + @ViewBuilder + private func compactLockScreenView( + context: ActivityViewContext + ) -> some View { + let glucoseFormatter = NumberFormatter.glucoseFormatter( + for: context.state.isMmol + ? HKUnit.millimolesPerLiter + : HKUnit.milligramsPerDeciliter + ) + let unit = context.state.isMmol + ? HKUnit.millimolesPerLiter.localizedShortUnitString + : HKUnit.milligramsPerDeciliter.localizedShortUnitString + + let glucoseColor = !context.attributes.useLimits ? .primary : getGlucoseColor(context: context) + let currentBG = (glucoseFormatter.string(from: context.state.currentGlucose) ?? "??") + getArrowImage(context.state.trendType) + let eventualBG = formatEventualBG(value: context.state.eventualGlucose, formatter: glucoseFormatter) + + HStack(spacing: 10) { + loopIcon(context, size: 24) + + HStack(alignment: .top) { + VStack(alignment: .leading) { + Text(currentBG) + .font(.headline) + .foregroundStyle(glucoseColor) + Text(context.state.delta + " " + unit) + .font(.caption2) + .foregroundStyle(Color(white: 0.7)) + } + + Spacer() + + VStack(alignment: .trailing) { + Text(eventualBG) + .font(.headline) + .foregroundStyle(.primary) + + Text(unit) + .font(.caption2) + .foregroundStyle(Color(white: 0.7)) + } + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity) // Allow HStack to use full available width + .privacySensitive() + .padding(.all, 14) + .background(Color.clear) + } + + private func formatEventualBG(value: Double?, formatter: NumberFormatter) -> String { + guard let value = value else { + return "??" + } + + return formatter.string(from: NSNumber(value: value)) ?? "??" + } + + // MARK: - Dynamic Island View + + private func dynamicIslandView( + context: ActivityViewContext + ) -> DynamicIsland { + let glucoseFormatter = NumberFormatter.glucoseFormatter( + for: context.state.isMmol + ? HKUnit.millimolesPerLiter : HKUnit.milligramsPerDeciliter + ) + + return DynamicIsland { + DynamicIslandExpandedRegion(.leading) { + HStack(alignment: .center) { + loopIcon(context) + .frame(width: 40, height: 40, alignment: .trailing) + Spacer() + Text( + "\(glucoseFormatter.string(from: context.state.currentGlucose) ?? "??")\(getArrowImage(context.state.trendType))" + ) + .foregroundStyle(getGlucoseColor(context: context)) + .font(.headline) + .fontWeight(.heavy) + } + } + DynamicIslandExpandedRegion(.trailing) { + HStack { + Text(context.state.delta) + .foregroundStyle(Color(white: 0.9)) + .font(.headline) + Text( + context.state.isMmol + ? HKUnit.millimolesPerLiter.localizedShortUnitString + : HKUnit.milligramsPerDeciliter + .localizedShortUnitString + ) + .foregroundStyle(Color(white: 0.7)) + .font(.subheadline) + } + } + DynamicIslandExpandedRegion(.bottom) { + if context.attributes.addPredictiveLine { + ChartView( + glucoseSamples: context.state.glucoseSamples, + predicatedGlucose: context.state.predicatedGlucose, + predicatedStartDate: context.state.predicatedStartDate, + predicatedInterval: context.state.predicatedInterval, + useLimits: context.attributes.useLimits, + lowerLimit: context.state.isMmol + ? context.attributes.lowerLimitChartMmol + : context.attributes.lowerLimitChartMg, + upperLimit: context.state.isMmol + ? context.attributes.upperLimitChartMmol + : context.attributes.upperLimitChartMg, + glucoseRanges: context.state.glucoseRanges, + preset: context.state.preset, + yAxisMarks: context.state.yAxisMarks + ) + .frame(height: 75) + } else { + ChartView( + glucoseSamples: context.state.glucoseSamples, + useLimits: context.attributes.useLimits, + lowerLimit: context.state.isMmol + ? context.attributes.lowerLimitChartMmol + : context.attributes.lowerLimitChartMg, + upperLimit: context.state.isMmol + ? context.attributes.upperLimitChartMmol + : context.attributes.upperLimitChartMg, + glucoseRanges: context.state.glucoseRanges, + preset: context.state.preset, + yAxisMarks: context.state.yAxisMarks + ) + .frame(height: 75) + } + } + } compactLeading: { + Text( + "\(glucoseFormatter.string(from: context.state.currentGlucose) ?? "??")\(getArrowImage(context.state.trendType))" + ) + .foregroundStyle( + getGlucoseColor(context: context) + ) + .minimumScaleFactor(0.1) + } compactTrailing: { + Text(context.state.delta) + .foregroundStyle(Color(white: 0.9)) + .minimumScaleFactor(0.1) + } minimal: { + Text( + glucoseFormatter.string(from: context.state.currentGlucose) + ?? "??" + ) + .foregroundStyle( + getGlucoseColor(context: context) + ) + .minimumScaleFactor(0.1) + } + } + + @ViewBuilder + private func loopIcon( + _ context: ActivityViewContext, + size: CGFloat = 36 + ) -> some View { + Circle() + .trim(from: context.state.isCloseLoop ? 0 : 0.2, to: 1) + .stroke(getLoopColor(context.state.lastCompleted), lineWidth: size/4.5) + .rotationEffect(Angle(degrees: -126)) + .frame(width: size, height: size) + } + + @ViewBuilder + private func bottomItemGeneric(title: String, value: String, unit: String) + -> some View + { + VStack(alignment: .center) { + Text("\(value)\(unit)") + .font(.headline) + .foregroundStyle(.primary) + .fontWeight(.heavy) + .font(Font.body.leading(.tight)) + Text(title) + .font(.caption2) + } + } + + @ViewBuilder + private func bottomItemCurrentBG( + value: String, + trend: GlucoseTrend?, + context: ActivityViewContext + ) -> some View { + VStack(alignment: .center) { + HStack { + Text(value + getArrowImage(trend)) + .font(.title) + .foregroundStyle( + !context.attributes.useLimits + ? .primary + : getGlucoseColor(context: context) + ) + .fontWeight(.heavy) + .font(Font.body.leading(.tight)) + } + } + } + + @ViewBuilder + private func bottomItemLoopCircle( + context: ActivityViewContext + ) -> some View { + VStack(alignment: .center) { + loopIcon(context) + } + } + + @ViewBuilder + private func bottomSpacer(border: Bool) -> some View { + Spacer() + if border { + Divider() + .background(.secondary) + Spacer() + } + + } + + private func getArrowImage(_ trendType: GlucoseTrend?) -> String { + switch trendType { + case .upUpUp: + return "\u{2191}\u{2191}" // ↑↑ + case .upUp: + return "\u{2191}" // ↑ + case .up: + return "\u{2197}" // ↗ + case .flat: + return "\u{2192}" // → + case .down: + return "\u{2198}" // ↘ + case .downDown: + return "\u{2193}" // ↓ + case .downDownDown: + return "\u{2193}\u{2193}" // ↓↓ + case .none: + return "" + } + } + + private func getLoopColor(_ age: Date?) -> Color { + var freshness: LoopCompletionFreshness = .stale + if let age = age { + freshness = LoopCompletionFreshness( + age: abs(min(0, age.timeIntervalSinceNow)) + ) + } + + switch freshness { + case .fresh: + return Color("fresh") + case .aging: + return Color("warning") + case .stale: + return .red + } + } + + private func getGlucoseColor(context: ActivityViewContext) -> Color { + guard context.attributes.useLimits else { + return .primary + } + + let value = context.state.currentGlucose + if context.state.isMmol + && value < context.attributes.lowerLimitChartMmol + || !context.state.isMmol + && value < context.attributes.lowerLimitChartMg + { + return .red + } + + if context.state.isMmol + && value > context.attributes.upperLimitChartMmol + || !context.state.isMmol + && value > context.attributes.upperLimitChartMg + { + return .orange + } + + return .green + } + +} diff --git a/Loop Widget Extension/LoopWidgets.swift b/Loop Widget Extension/LoopWidgets.swift index a7065deb4a..f87c2b89ff 100644 --- a/Loop Widget Extension/LoopWidgets.swift +++ b/Loop Widget Extension/LoopWidgets.swift @@ -16,5 +16,8 @@ struct LoopWidgets: WidgetBundle { if #available(iOS 16.1, *) { SystemStatusWidget() } + if #available(iOS 16.2, *) { + GlucoseLiveActivityConfiguration() + } } } diff --git a/Loop.xcconfig b/Loop.xcconfig index 9e1bb856ae..7827f574d5 100644 --- a/Loop.xcconfig +++ b/Loop.xcconfig @@ -43,7 +43,7 @@ LOOP_PROVISIONING_PROFILE_SPECIFIER_WATCHAPP_RELEASE = LOOP_PROVISIONING_PROFILE_SPECIFIER_WATCHAPP_EXTENSION_RELEASE = // Min iOS Version [DEFAULT] -IPHONEOS_DEPLOYMENT_TARGET = 15.1 +IPHONEOS_DEPLOYMENT_TARGET = 16.2 // Base string for opening app via URL [DEFAULT] URL_SCHEME_NAME = $(MAIN_APP_DISPLAY_NAME) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 7f527ecca9..4767ba3142 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -71,6 +71,21 @@ 1DDE273E24AEA4B000796622 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DE09BA824A3E23F009EE9F9 /* SettingsView.swift */; }; 1DDE274024AEA4F200796622 /* NotificationsCriticalAlertPermissionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA46B5F2492E2E300D71A63 /* NotificationsCriticalAlertPermissionsView.swift */; }; 1DFE9E172447B6270082C280 /* UserNotificationAlertSchedulerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DFE9E162447B6270082C280 /* UserNotificationAlertSchedulerTests.swift */; }; + 3ED3198A2EB659E600820BCF /* GlucoseLiveActivityConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319882EB659E600820BCF /* GlucoseLiveActivityConfiguration.swift */; }; + 3ED3198B2EB659E600820BCF /* ChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319872EB659E600820BCF /* ChartView.swift */; }; + 3ED3198C2EB659E600820BCF /* BasalViewActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319862EB659E600820BCF /* BasalViewActivity.swift */; }; + 3ED319912EB65A2D00820BCF /* GlucoseActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3198E2EB65A2D00820BCF /* GlucoseActivityAttributes.swift */; }; + 3ED319922EB65A2D00820BCF /* LiveActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3198F2EB65A2D00820BCF /* LiveActivityManager.swift */; }; + 3ED319932EB65A2D00820BCF /* ChartAxisGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3198D2EB65A2D00820BCF /* ChartAxisGenerator.swift */; }; + 3ED319942EB65A3E00820BCF /* GlucoseActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3198E2EB65A2D00820BCF /* GlucoseActivityAttributes.swift */; }; + 3ED319962EB65A5C00820BCF /* LiveActivityManagementViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319952EB65A5C00820BCF /* LiveActivityManagementViewModel.swift */; }; + 3ED319992EB65A6900820BCF /* LiveActivityManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319982EB65A6900820BCF /* LiveActivityManagementView.swift */; }; + 3ED3199A2EB65A6900820BCF /* LiveActivityBottomRowManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319972EB65A6900820BCF /* LiveActivityBottomRowManagerView.swift */; }; + 3ED3199C2EB65A9B00820BCF /* LiveActivitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3199B2EB65A9B00820BCF /* LiveActivitySettings.swift */; }; + 3ED3199D2EB65A9B00820BCF /* LiveActivitySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3199B2EB65A9B00820BCF /* LiveActivitySettings.swift */; }; + 3ED3199F2EB65AFE00820BCF /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED3199E2EB65AFE00820BCF /* LocalizedString.swift */; }; + 3ED319A12EB65B4100820BCF /* Bootstrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319A02EB65B4100820BCF /* Bootstrap.swift */; }; + 3ED319A32EB65DA800820BCF /* LiveActivityManagerProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED319A22EB65DA300820BCF /* LiveActivityManagerProxy.swift */; }; 43027F0F1DFE0EC900C51989 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D5E1DF2459000A04910 /* HKUnit.swift */; }; 4302F4E11D4E9C8900F0FCAF /* TextFieldTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E01D4E9C8900F0FCAF /* TextFieldTableViewController.swift */; }; 4302F4E31D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */; }; @@ -791,6 +806,19 @@ 1DE09BA824A3E23F009EE9F9 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 1DFE9E162447B6270082C280 /* UserNotificationAlertSchedulerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserNotificationAlertSchedulerTests.swift; sourceTree = ""; }; 3D03C6DA2AACE6AC00FDE5D2 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Intents.strings; sourceTree = ""; }; + 3ED319862EB659E600820BCF /* BasalViewActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasalViewActivity.swift; sourceTree = ""; }; + 3ED319872EB659E600820BCF /* ChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartView.swift; sourceTree = ""; }; + 3ED319882EB659E600820BCF /* GlucoseLiveActivityConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseLiveActivityConfiguration.swift; sourceTree = ""; }; + 3ED3198D2EB65A2D00820BCF /* ChartAxisGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartAxisGenerator.swift; sourceTree = ""; }; + 3ED3198E2EB65A2D00820BCF /* GlucoseActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseActivityAttributes.swift; sourceTree = ""; }; + 3ED3198F2EB65A2D00820BCF /* LiveActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityManager.swift; sourceTree = ""; }; + 3ED319952EB65A5C00820BCF /* LiveActivityManagementViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityManagementViewModel.swift; sourceTree = ""; }; + 3ED319972EB65A6900820BCF /* LiveActivityBottomRowManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityBottomRowManagerView.swift; sourceTree = ""; }; + 3ED319982EB65A6900820BCF /* LiveActivityManagementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityManagementView.swift; sourceTree = ""; }; + 3ED3199B2EB65A9B00820BCF /* LiveActivitySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivitySettings.swift; sourceTree = ""; }; + 3ED3199E2EB65AFE00820BCF /* LocalizedString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizedString.swift; sourceTree = ""; }; + 3ED319A02EB65B4100820BCF /* Bootstrap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bootstrap.swift; sourceTree = ""; }; + 3ED319A22EB65DA300820BCF /* LiveActivityManagerProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityManagerProxy.swift; sourceTree = ""; }; 4302F4E01D4E9C8900F0FCAF /* TextFieldTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldTableViewController.swift; sourceTree = ""; }; 4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsulinDeliveryTableViewController.swift; sourceTree = ""; }; 430B29892041F54A00BA9F93 /* NSUserDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSUserDefaults.swift; sourceTree = ""; }; @@ -1503,6 +1531,7 @@ 84AA81D92A4A2966000B658B /* Helpers */, 84AA81DE2A4A2B3D000B658B /* Timeline */, 84AA81DF2A4A2B7A000B658B /* Widgets */, + 3ED319892EB659E600820BCF /* Live Activity */, 84AA81D22A4A27A3000B658B /* LoopWidgets.swift */, ); path = "Loop Widget Extension"; @@ -1553,6 +1582,27 @@ path = Alerts; sourceTree = ""; }; + 3ED319892EB659E600820BCF /* Live Activity */ = { + isa = PBXGroup; + children = ( + 3ED319862EB659E600820BCF /* BasalViewActivity.swift */, + 3ED319872EB659E600820BCF /* ChartView.swift */, + 3ED319882EB659E600820BCF /* GlucoseLiveActivityConfiguration.swift */, + ); + path = "Live Activity"; + sourceTree = ""; + }; + 3ED319902EB65A2D00820BCF /* Live Activity */ = { + isa = PBXGroup; + children = ( + 3ED319A22EB65DA300820BCF /* LiveActivityManagerProxy.swift */, + 3ED3198D2EB65A2D00820BCF /* ChartAxisGenerator.swift */, + 3ED3198E2EB65A2D00820BCF /* GlucoseActivityAttributes.swift */, + 3ED3198F2EB65A2D00820BCF /* LiveActivityManager.swift */, + ); + path = "Live Activity"; + sourceTree = ""; + }; 4328E0121CFBE1B700E199AA /* Controllers */ = { isa = PBXGroup; children = ( @@ -1621,7 +1671,6 @@ C17824A41E1AD4D100D9D25C /* ManualBolusRecommendation.swift */, 4F526D601DF8D9A900A04910 /* NetBasal.swift */, 438D42F81D7C88BC003244B0 /* PredictionInputEffect.swift */, - A99A114029A581D6007919CE /* Remote */, C19008FD25225D3900721625 /* SimpleBolusCalculator.swift */, C1E3862428247B7100F561A4 /* StoredLoopNotRunningNotification.swift */, 4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */, @@ -1825,6 +1874,7 @@ 43D9FFD021EAE05D00AF44BF /* LoopCore */ = { isa = PBXGroup; children = ( + 3ED3199B2EB65A9B00820BCF /* LiveActivitySettings.swift */, C1DA986B2843B6F9001D04CC /* PersistedProperty.swift */, 43DE92581C5479E4001FFDE1 /* PotentialCarbEntryUserInfo.swift */, 43C05CB721EBEA54006FB252 /* HKUnit.swift */, @@ -1927,6 +1977,8 @@ B43CF07D29434EC4008A520B /* HowMuteAlertWorkView.swift */, 430D85881F44037000AF2D4F /* HUDViewTableViewCell.swift */, A91D2A3E26CF0FF80023B075 /* IconTitleSubtitleTableViewCell.swift */, + 3ED319972EB65A6900820BCF /* LiveActivityBottomRowManagerView.swift */, + 3ED319982EB65A6900820BCF /* LiveActivityManagementView.swift */, C1742331259BEADC00399C9D /* ManualEntryDoseView.swift */, 1DA46B5F2492E2E300D71A63 /* NotificationsCriticalAlertPermissionsView.swift */, 899433B723FE129700FA4BEA /* OverrideBadgeView.swift */, @@ -1981,6 +2033,7 @@ 1DA6499D2441266400F61E75 /* Alerts */, E95D37FF24EADE68005E2F50 /* Store Protocols */, E9B355232935906B0076AB04 /* Missed Meal Detection */, + 3ED319902EB65A2D00820BCF /* Live Activity */, C1F2075B26D6F9B0007AB7EB /* AppExpirationAlerter.swift */, A96DAC2B2838F31200D94E38 /* SharedLogging.swift */, 7E69CFFB2A16A77E00203CBD /* ResetLoopManager.swift */, @@ -2187,6 +2240,7 @@ 84AA81D42A4A2813000B658B /* Bootstrap */ = { isa = PBXGroup; children = ( + 3ED319A02EB65B4100820BCF /* Bootstrap.swift */, B66D1F262E6A5D6500471149 /* Localizable.xcstrings */, B66D1F2E2E6A5D6600471149 /* InfoPlist.xcstrings */, 14B1736D28AEDA63006CCD7C /* LoopWidgetExtension.entitlements */, @@ -2200,6 +2254,7 @@ children = ( 84AA81DA2A4A2973000B658B /* Date.swift */, 84AA81D52A4A28AF000B658B /* WidgetBackground.swift */, + 3ED3199E2EB65AFE00820BCF /* LocalizedString.swift */, 84D2879E2AC756C8007ED283 /* ContentMargin.swift */, ); path = Helpers; @@ -2294,6 +2349,7 @@ 1D49795724E7289700948F05 /* ServicesViewModel.swift */, C174233B259BEB0F00399C9D /* ManualEntryDoseViewModel.swift */, 1DB619AB270BAD3D006C9D07 /* VersionUpdateViewModel.swift */, + 3ED319952EB65A5C00820BCF /* LiveActivityManagementViewModel.swift */, ); path = "View Models"; sourceTree = ""; @@ -2379,13 +2435,6 @@ path = Shortcuts; sourceTree = ""; }; - A99A114029A581D6007919CE /* Remote */ = { - isa = PBXGroup; - children = ( - ); - path = Remote; - sourceTree = ""; - }; A9E6DFED246A0460005B1A1C /* Models */ = { isa = PBXGroup; children = ( @@ -3304,10 +3353,16 @@ 14B1737A28AEDC6C006CCD7C /* NumberFormatter.swift in Sources */, 14B1737B28AEDC6C006CCD7C /* OSLog.swift in Sources */, 14B1737C28AEDC6C006CCD7C /* PumpManager.swift in Sources */, + 3ED319942EB65A3E00820BCF /* GlucoseActivityAttributes.swift in Sources */, 14B1737D28AEDC6C006CCD7C /* PumpManagerUI.swift in Sources */, + 3ED319A12EB65B4100820BCF /* Bootstrap.swift in Sources */, 14B1737E28AEDC6C006CCD7C /* FeatureFlags.swift in Sources */, 84AA81E72A4A4DEF000B658B /* PumpView.swift in Sources */, 14B1737F28AEDC6C006CCD7C /* PluginManager.swift in Sources */, + 3ED3198A2EB659E600820BCF /* GlucoseLiveActivityConfiguration.swift in Sources */, + 3ED3198B2EB659E600820BCF /* ChartView.swift in Sources */, + 3ED3199F2EB65AFE00820BCF /* LocalizedString.swift in Sources */, + 3ED3198C2EB659E600820BCF /* BasalViewActivity.swift in Sources */, 14B1738028AEDC6C006CCD7C /* Debug.swift in Sources */, 84AA81DB2A4A2973000B658B /* Date.swift in Sources */, 14B1737228AEDBF6006CCD7C /* BasalView.swift in Sources */, @@ -3332,6 +3387,8 @@ C1D289B522F90A52003FFBD9 /* BasalDeliveryState.swift in Sources */, 4F2C15821E074FC600E160D4 /* NSTimeInterval.swift in Sources */, 4311FB9B1F37FE1B00D4C0A7 /* TitleSubtitleTextFieldTableViewCell.swift in Sources */, + 3ED319992EB65A6900820BCF /* LiveActivityManagementView.swift in Sources */, + 3ED3199A2EB65A6900820BCF /* LiveActivityBottomRowManagerView.swift in Sources */, C1F2075C26D6F9B0007AB7EB /* AppExpirationAlerter.swift in Sources */, B4FEEF7D24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift in Sources */, 142CB7592A60BF2E0075748A /* EditMode.swift in Sources */, @@ -3408,6 +3465,7 @@ 434FF1EE1CF27EEF000DB779 /* UITableViewCell.swift in Sources */, 439BED2A1E76093C00B0AED5 /* CGMManager.swift in Sources */, C16B983E26B4893300256B05 /* DoseEnactor.swift in Sources */, + 3ED319962EB65A5C00820BCF /* LiveActivityManagementViewModel.swift in Sources */, E98A55EF24EDD6E60008715D /* DosingDecisionStoreProtocol.swift in Sources */, B4001CEE28CBBC82002FB414 /* AlertManagementView.swift in Sources */, E9C00EF524C623EF00628F35 /* LoopSettings+Loop.swift in Sources */, @@ -3496,8 +3554,12 @@ 1D05219D2469F1F5000EBBDE /* AlertStore.swift in Sources */, 439897371CD2F80600223065 /* AnalyticsServicesManager.swift in Sources */, 14D906F42A846510006EB79A /* FavoriteFoodsViewModel.swift in Sources */, + 3ED319912EB65A2D00820BCF /* GlucoseActivityAttributes.swift in Sources */, + 3ED319922EB65A2D00820BCF /* LiveActivityManager.swift in Sources */, + 3ED319932EB65A2D00820BCF /* ChartAxisGenerator.swift in Sources */, DDC389FE2A2C4C830066E2E8 /* GlucoseBasedApplicationFactorSelectionView.swift in Sources */, A9C62D842331700E00535612 /* DiagnosticLog+Subsystem.swift in Sources */, + 3ED319A32EB65DA800820BCF /* LiveActivityManagerProxy.swift in Sources */, 895FE0952201234000FCF18A /* OverrideSelectionViewController.swift in Sources */, C1EF747228D6A44A00C8C083 /* CrashRecoveryManager.swift in Sources */, A9F66FC3247F451500096EA7 /* UIDevice+Loop.swift in Sources */, @@ -3625,6 +3687,7 @@ C17DDC9D28AC33A1005FBF4C /* PersistedProperty.swift in Sources */, 43C05CA921EB2B26006FB252 /* PersistenceController.swift in Sources */, A9CE912224CA032E00302A40 /* NSUserDefaults.swift in Sources */, + 3ED3199D2EB65A9B00820BCF /* LiveActivitySettings.swift in Sources */, 43C05CAB21EB2B4A006FB252 /* NSBundle.swift in Sources */, 43C05CC721EC2ABC006FB252 /* IdentifiableClass.swift in Sources */, E9B3552B293591E70076AB04 /* MissedMealNotification.swift in Sources */, @@ -3646,6 +3709,7 @@ C17DDC9C28AC339E005FBF4C /* PersistedProperty.swift in Sources */, 43C05CA821EB2B26006FB252 /* PersistenceController.swift in Sources */, 43C05CAA21EB2B49006FB252 /* NSBundle.swift in Sources */, + 3ED3199C2EB65A9B00820BCF /* LiveActivitySettings.swift in Sources */, 43C05CC821EC2ABC006FB252 /* IdentifiableClass.swift in Sources */, 43C05CAD21EB2BBF006FB252 /* NSUserDefaults.swift in Sources */, E9B3552A293591E70076AB04 /* MissedMealNotification.swift in Sources */, diff --git a/Loop/Info.plist b/Loop/Info.plist index 024c483497..db76e6e846 100644 --- a/Loop/Info.plist +++ b/Loop/Info.plist @@ -71,6 +71,10 @@ Carbohydrate meal data entered in the app and on the watch is stored in the Health database. Glucose data retrieved from the CGM is stored securely in HealthKit. NSSiriUsageDescription Loop uses Siri to allow you to enact presets with your voice. + NSSupportsLiveActivities + + NSSupportsLiveActivitiesFrequentUpdates + NSUserActivityTypes EnableOverridePresetIntent diff --git a/Loop/Loop.entitlements b/Loop/Loop.entitlements index 50ba55d9e5..e6a2f9b9f0 100644 --- a/Loop/Loop.entitlements +++ b/Loop/Loop.entitlements @@ -8,6 +8,8 @@ com.apple.developer.healthkit.access + com.apple.developer.healthkit.background-delivery + com.apple.developer.nfc.readersession.formats TAG diff --git a/Loop/Managers/Live Activity/ChartAxisGenerator.swift b/Loop/Managers/Live Activity/ChartAxisGenerator.swift new file mode 100644 index 0000000000..0fcc3ca80d --- /dev/null +++ b/Loop/Managers/Live Activity/ChartAxisGenerator.swift @@ -0,0 +1,125 @@ +// +// ChartAxisGenerator.swift +// Loop +// +// Created by Bastiaan Verhaar on 12/09/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import Foundation +import HealthKit +import SwiftCharts +import UIKit + +struct ChartAxisGenerator { + private static let yAxisStepSizeMGDLOverride: Double? = FeatureFlags.predictedGlucoseChartClampEnabled ? 40 : nil + private static let range = FeatureFlags.predictedGlucoseChartClampEnabled ? LoopConstants.glucoseChartDefaultDisplayBoundClamped : LoopConstants.glucoseChartDefaultDisplayBound + private static let predictedGlucoseSoftBoundsMinimum = FeatureFlags.predictedGlucoseChartClampEnabled ? HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 40) : nil + + private static let minSegmentCount: Double = 2 + private static let addPaddingSegmentIfEdge = false + private static let axisLabelSettings = ChartLabelSettings(font: .systemFont(ofSize: 14), fontColor: UIColor.secondaryLabel) + + // This logic is copied/ported from generateYAxisValuesUsingLinearSegmentStep + static func getYAxis(points: [Double], isMmol: Bool) -> [Double] { + let unit: HKUnit = isMmol ? .millimolesPerLiter : .milligramsPerDeciliter + + let glucoseDisplayRange = [ + range.lowerBound.doubleValue(for: unit), + range.upperBound.doubleValue(for: unit) + ] + + let actualPoints = points + glucoseDisplayRange + let sortedChartPoints = actualPoints.sorted {(obj1, obj2) in + return obj1 < obj2 + } + + guard let first = sortedChartPoints.first, let lastPar = sortedChartPoints.last else { + print("Trying to generate Y axis without datapoints, returning empty array") + return [] + } + + let maxSegmentCount: Double = glucoseValueBelowSoftBoundsMinimum(first, unit) ? 5 : 4 + + guard lastPar >=~ first else {fatalError("Invalid range generating axis values")} + let multiple: Double = !isMmol ? (yAxisStepSizeMGDLOverride ?? 25) : 1 + + let last = needsToAddOne(lastPar, first) ? lastPar + 1 : lastPar + + /// The first axis value will be less than or equal to the first scalar value, aligned with the desired multiple + var firstValue = first - (first.truncatingRemainder(dividingBy: multiple)) + /// The last axis value will be greater than or equal to the last scalar value, aligned with the desired multiple + let remainder = last.truncatingRemainder(dividingBy: multiple) + var lastValue = remainder == 0 ? last : last + (multiple - remainder) + var segmentSize = multiple + + /// If there should be a padding segment added when a scalar value falls on the first or last axis value, adjust the first and last axis values + if firstValue =~ first && addPaddingSegmentIfEdge { + firstValue = firstValue - segmentSize + } + + // do not allow the first label to be displayed as -0 + while firstValue < 0 && firstValue.rounded() == -0 { + firstValue = firstValue - segmentSize + } + + if lastValue =~ last && addPaddingSegmentIfEdge { + lastValue = lastValue + segmentSize + } + + let distance = lastValue - firstValue + var currentMultiple = multiple + var segmentCount = distance / currentMultiple + var potentialSegmentValues = stride(from: firstValue, to: lastValue, by: currentMultiple) + + /// Find the optimal number of segments and segment width + /// If the number of segments is greater than desired, make each segment wider + /// ensure no label of -0 will be displayed on the axis + while segmentCount > maxSegmentCount || + !potentialSegmentValues.filter({ $0 < 0 && $0.rounded() == -0 }).isEmpty + { + currentMultiple += multiple + segmentCount = distance / currentMultiple + potentialSegmentValues = stride(from: firstValue, to: lastValue, by: currentMultiple) + } + segmentCount = ceil(segmentCount) + + /// Increase the number of segments until there are enough as desired + while segmentCount < minSegmentCount { + segmentCount += 1 + } + segmentSize = currentMultiple + + /// Generate axis values from the first value, segment size and number of segments + let offset = firstValue + return (0...Int(segmentCount)).map {segment in + var scalar = offset + (Double(segment) * segmentSize) + // a value that could be displayed as 0 should truly be 0 to have the zero-line drawn correctly. + if scalar != 0, + scalar.rounded() == 0 + { + scalar = 0 + } + return ChartAxisValueDouble(scalar, labelSettings: axisLabelSettings).scalar + } + } + + private static func needsToAddOne(_ a: Double, _ b: Double) -> Bool { + return fabs(a - b) < Double.ulpOfOne + } + + private static func glucoseValueBelowSoftBoundsMinimum(_ glucoseMinimum: Double, _ unit: HKUnit) -> Bool { + guard let predictedGlucoseSoftBoundsMinimum = predictedGlucoseSoftBoundsMinimum else + { + return false + } + + return HKQuantity(unit: unit, doubleValue: glucoseMinimum) < predictedGlucoseSoftBoundsMinimum + } +} + +fileprivate extension Double { + static func >=~ (a: Double, b: Double) -> Bool { + return a =~ b || a > b + } +} diff --git a/Loop/Managers/Live Activity/GlucoseActivityAttributes.swift b/Loop/Managers/Live Activity/GlucoseActivityAttributes.swift new file mode 100644 index 0000000000..173a46cb86 --- /dev/null +++ b/Loop/Managers/Live Activity/GlucoseActivityAttributes.swift @@ -0,0 +1,139 @@ +// +// LiveActivityAttributes.swift +// LoopUI +// +// Created by Bastiaan Verhaar on 23/06/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import ActivityKit +import Foundation +import LoopKit +import LoopCore + +public struct GlucoseActivityAttributes: ActivityAttributes { + public struct ContentState: Codable, Hashable { + // Meta data + public let date: Date + public let ended: Bool + public let preset: Preset? + public let glucoseRanges: [GlucoseRangeValue] + + // Dynamic island data + public let currentGlucose: Double + public let eventualGlucose: Double? + public let trendType: GlucoseTrend? + public let delta: String + public let isMmol: Bool + + // Loop circle + public let isCloseLoop: Bool + public let lastCompleted: Date? + + // Bottom row + public let bottomRow: [BottomRowItem] + + // Chart view + public let glucoseSamples: [GlucoseSampleAttributes] + public let predicatedGlucose: [Double] + public let predicatedStartDate: Date? + public let predicatedInterval: TimeInterval? + public let yAxisMarks: [Double] + } + + public let mode: LiveActivityMode + public let addPredictiveLine: Bool + public let useLimits: Bool + public let upperLimitChartMmol: Double + public let lowerLimitChartMmol: Double + public let upperLimitChartMg: Double + public let lowerLimitChartMg: Double +} + +public struct Preset: Codable, Hashable { + public let title: String + public let startDate: Date + public let endDate: Date + public let minValue: Double + public let maxValue: Double +} + +public struct GlucoseRangeValue: Identifiable, Codable, Hashable { + public let id: UUID + public let minValue: Double + public let maxValue: Double + public let startDate: Date + public let endDate: Date +} + +public struct BottomRowItem: Codable, Hashable { + public enum BottomRowType: Codable, Hashable { + case generic + case basal + case currentBg + } + + public let type: BottomRowType + + // Generic properties + public let label: String + public let value: String + public let unit: String + + public let trend: GlucoseTrend? + + // Basal properties + public let rate: Double + public let percentage: Double + + private init(type: BottomRowType, label: String?, value: String?, unit: String?, trend: GlucoseTrend?, rate: Double?, percentage: Double?) { + self.type = type + self.label = label ?? "" + self.value = value ?? "" + self.trend = trend + self.unit = unit ?? "" + self.rate = rate ?? 0 + self.percentage = percentage ?? 0 + } + + static func generic(label: String, value: String, unit: String) -> BottomRowItem { + return BottomRowItem( + type: .generic, + label: label, + value: value, + unit: unit, + trend: nil, + rate: nil, + percentage: nil + ) + } + + static func basal(rate: Double, percentage: Double) -> BottomRowItem { + return BottomRowItem( + type: .basal, + label: nil, + value: nil, + unit: nil, + trend: nil, + rate: rate, + percentage: percentage + ) + } + + static func currentBg(label: String, value: String, trend: GlucoseTrend?) -> BottomRowItem { + return BottomRowItem( + type: .currentBg, + label: label, + value: value, + unit: nil, + trend: trend, + rate: nil, + percentage: nil + ) + } +} + +public struct GlucoseSampleAttributes: Codable, Hashable { + public let x: Date + public let y: Double +} diff --git a/Loop/Managers/Live Activity/LiveActivityManager.swift b/Loop/Managers/Live Activity/LiveActivityManager.swift new file mode 100644 index 0000000000..da1d4fdfa7 --- /dev/null +++ b/Loop/Managers/Live Activity/LiveActivityManager.swift @@ -0,0 +1,515 @@ +// +// LiveActivityManaer.swift +// Loop +// +// Created by Bastiaan Verhaar on 24/06/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import LoopKitUI +import LoopKit +import LoopCore +import Foundation +import HealthKit +import ActivityKit + +extension Notification.Name { + static let LiveActivitySettingsChanged = Notification.Name(rawValue: "com.loopKit.notification.LiveActivitySettingsChanged") +} + +@available(iOS 16.2, *) +class LiveActivityManager : LiveActivityManagerProxy { + private let activityInfo = ActivityAuthorizationInfo() + private var activity: Activity? + private let healthStore = HKHealthStore() + + private let glucoseStore: GlucoseStoreProtocol + private let doseStore: DoseStoreProtocol + private var loopSettings: LoopSettings + + private var startDate: Date = Date.now + private var settings: LiveActivitySettings = UserDefaults.standard.liveActivity ?? LiveActivitySettings() + + private let cobFormatter: NumberFormatter = { + let numberFormatter = NumberFormatter() + numberFormatter.numberStyle = .none + return numberFormatter + }() + private let iobFormatter: NumberFormatter = { + let numberFormatter = NumberFormatter() + numberFormatter.numberStyle = .none + numberFormatter.maximumFractionDigits = 1 + numberFormatter.minimumFractionDigits = 1 + return numberFormatter + }() + private let timeFormatter: DateFormatter = { + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .none + dateFormatter.timeStyle = .short + + return dateFormatter + }() + + init?(glucoseStore: GlucoseStoreProtocol, doseStore: DoseStoreProtocol, loopSettings: LoopSettings) { + guard self.activityInfo.areActivitiesEnabled else { + print("ERROR: Live Activities are not enabled...") + return nil + } + + self.glucoseStore = glucoseStore + self.doseStore = doseStore + self.loopSettings = loopSettings + + // Ensure settings exist + if UserDefaults.standard.liveActivity == nil { + self.settings = LiveActivitySettings() + } + + let nc = NotificationCenter.default + nc.addObserver(self, selector: #selector(self.appMovedToForeground), name: UIApplication.willEnterForegroundNotification, object: nil) + nc.addObserver(self, selector: #selector(self.settingsChanged), name: .LiveActivitySettingsChanged, object: nil) + guard self.settings.enabled else { + return + } + + initEmptyActivity(settings: self.settings) + update() + + Task { + await self.endUnknownActivities() + } + } + + public func update(loopSettings: LoopSettings) { + self.loopSettings = loopSettings + update() + } + + private func update() { + Task { + if self.needsRecreation(), await UIApplication.shared.applicationState == .active { + // activity is no longer visible or old. End it and try to push the update again + await endActivity() + } + + guard let unit = await self.healthStore.cachedPreferredUnits(for: .bloodGlucose) else { + print("ERROR: No unit found...") + return + } + + let isMmol = unit == HKUnit.millimolesPerLiter + await self.endUnknownActivities() + + let statusContext = UserDefaults.appGroup?.statusExtensionContext + let glucoseFormatter = NumberFormatter.glucoseFormatter(for: unit) + + let glucoseSamples = self.getGlucoseSample(unit: unit) + guard let currentGlucose = glucoseSamples.last else { + print("ERROR: No glucose sample found...") + return + } + + let current = currentGlucose.quantity.doubleValue(for: unit) + + var delta: String = "+\(glucoseFormatter.string(from: Double(0)) ?? "")" + if glucoseSamples.count > 1 { + let prevSample = glucoseSamples[glucoseSamples.count - 2] + let deltaValue = current - (prevSample.quantity.doubleValue(for: unit)) + delta = "\(deltaValue < 0 ? "-" : "+")\(glucoseFormatter.string(from: abs(deltaValue)) ?? "??")" + } + + let bottomRow = self.getBottomRow( + currentGlucose: current, + delta: delta, + statusContext: statusContext, + glucoseFormatter: glucoseFormatter + ) + + var predicatedGlucose: [Double] = [] + if let samples = statusContext?.predictedGlucose?.values, settings.addPredictiveLine { + predicatedGlucose = samples + } + + var endDateChart: Date? = nil + if predicatedGlucose.count == 0 { + endDateChart = glucoseSamples.last?.startDate + } else if let predictedGlucose = statusContext?.predictedGlucose { + endDateChart = predictedGlucose.startDate.addingTimeInterval(.hours(4)) + } + + guard let endDateChart = endDateChart else { + return + } + + var presetContext: Preset? = nil + if let override = self.loopSettings.preMealOverride ?? self.loopSettings.scheduleOverride, let start = glucoseSamples.first?.startDate { + presetContext = Preset( + title: override.getTitle(), + startDate: max(override.startDate, start), + endDate: override.duration.isInfinite ? endDateChart : min(override.actualEndDate, endDateChart), + minValue: override.settings.targetRange?.lowerBound.doubleValue(for: unit) ?? 0, + maxValue: override.settings.targetRange?.upperBound.doubleValue(for: unit) ?? 0 + ) + } + + var glucoseRanges: [GlucoseRangeValue] = [] + if let glucoseRangeSchedule = self.loopSettings.glucoseTargetRangeSchedule, let start = glucoseSamples.first?.startDate { + glucoseRanges = getGlucoseRanges( + glucoseRangeSchedule: glucoseRangeSchedule, + presetContext: presetContext, + start: start, + end: endDateChart, + unit: unit + ) + } + + let yAxisPoints = glucoseSamples.map{ item in item.quantity.doubleValue(for: unit) } + predicatedGlucose + let chartYAxis = ChartAxisGenerator.getYAxis( + points: yAxisPoints, + isMmol: unit == HKUnit.millimolesPerLiter + ) + + let state = GlucoseActivityAttributes.ContentState( + date: currentGlucose.startDate, + ended: false, + preset: presetContext, + glucoseRanges: glucoseRanges, + currentGlucose: current, + eventualGlucose: statusContext?.predictedGlucose?.values.last, + trendType: statusContext?.glucoseDisplay?.trendType, + delta: delta, + isMmol: isMmol, + isCloseLoop: statusContext?.isClosedLoop ?? false, + lastCompleted: statusContext?.lastLoopCompleted, + bottomRow: bottomRow, + // In order to prevent maxSize errors, only allow the last 100 samples to be sent + // Will most likely not be an issue, might be an issue for debugging/CGM simulator with 5sec interval + glucoseSamples: glucoseSamples.suffix(100).map { item in + return GlucoseSampleAttributes(x: item.startDate, y: item.quantity.doubleValue(for: unit)) + }, + predicatedGlucose: predicatedGlucose, + predicatedStartDate: statusContext?.predictedGlucose?.startDate, + predicatedInterval: statusContext?.predictedGlucose?.interval, + yAxisMarks: chartYAxis + ) + + await self.activity?.update(ActivityContent( + state: state, + staleDate: Date.now.addingTimeInterval(.hours(1)) + )) + } + } + + @objc private func settingsChanged() { + Task { + let newSettings = UserDefaults.standard.liveActivity ?? LiveActivitySettings() + + // Update live activity if needed + if !newSettings.enabled, let activity = self.activity { + await activity.end(nil, dismissalPolicy: .immediate) + self.activity = nil + + return + } else if newSettings.enabled && self.activity == nil { + initEmptyActivity(settings: newSettings) + + } else if newSettings != self.settings { + await self.activity?.end(nil, dismissalPolicy: .immediate) + self.activity = nil + + initEmptyActivity(settings: newSettings) + } + + self.settings = newSettings + update() + } + } + + @objc private func appMovedToForeground() { + guard self.settings.enabled else { + return + } + + guard let activity = self.activity else { + initEmptyActivity(settings: self.settings) + update() + return + } + + Task { + await activity.end(nil, dismissalPolicy: .immediate) + await self.endUnknownActivities() + self.activity = nil + + initEmptyActivity(settings: self.settings) + update() + } + } + + private func endUnknownActivities() async { + for unknownActivity in Activity.activities + .filter({ self.activity?.id != $0.id }) + { + await unknownActivity.end(nil, dismissalPolicy: .immediate) + } + } + + private func endActivity() async { + let dynamicState = self.activity?.content.state + await self.activity?.end(nil, dismissalPolicy: .immediate) + for unknownActivity in Activity.activities { + await unknownActivity.end(nil, dismissalPolicy: .immediate) + } + + do { + if let dynamicState = dynamicState { + self.activity = try Activity.request( + attributes: GlucoseActivityAttributes( + mode: self.settings.mode, + addPredictiveLine: self.settings.addPredictiveLine, + useLimits: self.settings.useLimits, + upperLimitChartMmol: self.settings.upperLimitChartMmol, + lowerLimitChartMmol: self.settings.lowerLimitChartMmol, + upperLimitChartMg: self.settings.upperLimitChartMg, + lowerLimitChartMg: self.settings.lowerLimitChartMg + ), + content: .init(state: dynamicState, staleDate: nil), + pushType: .token + ) + } + self.startDate = Date.now + } catch { + print("ERROR: Error while ending live activity: \(error.localizedDescription)") + } + } + + private func needsRecreation() -> Bool { + if !self.settings.enabled { + return false + } + + switch activity?.activityState { + case .dismissed, + .ended, + .stale: + return true + case .active: + return -startDate.timeIntervalSinceNow > .hours(1) + default: + return true + } + } + + private func getInsulinOnBoard() -> String { + let updateGroup = DispatchGroup() + var iob = "??" + + updateGroup.enter() + self.doseStore.insulinOnBoard(at: Date.now) { result in + switch (result) { + case .failure: + break + case .success(let iobValue): + iob = self.iobFormatter.string(from: iobValue.value) ?? "??" + break + } + + updateGroup.leave() + } + + _ = updateGroup.wait(timeout: .distantFuture) + return iob + } + + private func getGlucoseSample(unit: HKUnit) -> [StoredGlucoseSample] { + let updateGroup = DispatchGroup() + var samples: [StoredGlucoseSample] = [] + + updateGroup.enter() + + // When in spacious mode, we want to show the predictive line + // In compact mode, we only want to show the history + let timeInterval: TimeInterval = self.settings.addPredictiveLine ? .hours(-2) : .hours(-6) + self.glucoseStore.getGlucoseSamples( + start: Date.now.addingTimeInterval(timeInterval), + end: Date.now + ) { result in + switch (result) { + case .failure: + break + case .success(let data): + samples = data + break + } + + updateGroup.leave() + } + + _ = updateGroup.wait(timeout: .distantFuture) + return samples + } + + private func getGlucoseRanges(glucoseRangeSchedule: GlucoseRangeSchedule, presetContext: Preset?, start: Date, end: Date, unit: HKUnit) -> [GlucoseRangeValue] { + var glucoseRanges: [GlucoseRangeValue] = [] + for item in glucoseRangeSchedule.quantityBetween(start: start, end: end) { + let minValue = item.value.lowerBound.doubleValue(for: unit) + let maxValue = item.value.upperBound.doubleValue(for: unit) + let startDate = max(item.startDate, start) + let endDate = min(item.endDate, end) + + if let presetContext = presetContext { + if presetContext.startDate > startDate, presetContext.endDate < endDate { + // A preset is active during this schedule + glucoseRanges.append(GlucoseRangeValue( + id: UUID(), + minValue: minValue, + maxValue: maxValue, + startDate: startDate, + endDate: presetContext.startDate + )) + glucoseRanges.append(GlucoseRangeValue( + id: UUID(), + minValue: minValue, + maxValue: maxValue, + startDate: presetContext.endDate, + endDate: endDate + )) + } else if presetContext.endDate > startDate, presetContext.endDate < endDate { + // Cut off the start of the glucose target + glucoseRanges.append(GlucoseRangeValue( + id: UUID(), + minValue: minValue, + maxValue: maxValue, + startDate: presetContext.endDate, + endDate: endDate + )) + } else if presetContext.startDate < endDate, presetContext.startDate > startDate { + // Cut off the end of the glucose target + glucoseRanges.append(GlucoseRangeValue( + id: UUID(), + minValue: minValue, + maxValue: maxValue, + startDate: startDate, + endDate: presetContext.startDate + )) + if presetContext.endDate == end { + break + } + } else { + // No overlap with target and override + glucoseRanges.append(GlucoseRangeValue( + id: UUID(), + minValue: minValue, + maxValue: maxValue, + startDate: startDate, + endDate: endDate + )) + } + } else { + glucoseRanges.append(GlucoseRangeValue( + id: UUID(), + minValue: minValue, + maxValue: maxValue, + startDate: startDate, + endDate: endDate + )) + } + } + + return glucoseRanges + } + + private func getBottomRow(currentGlucose: Double, delta: String, statusContext: StatusExtensionContext?, glucoseFormatter: NumberFormatter) -> [BottomRowItem] { + return self.settings.bottomRowConfiguration.map { type in + switch(type) { + case .iob: + return BottomRowItem.generic(label: type.name(), value: getInsulinOnBoard(), unit: "U") + + case .cob: + var cob: String = "0" + if let cobValue = statusContext?.carbsOnBoard { + cob = self.cobFormatter.string(from: cobValue) ?? "??" + } + return BottomRowItem.generic(label: type.name(), value: cob, unit: "g") + + case .basal: + guard let netBasalContext = statusContext?.netBasal else { + return BottomRowItem.basal(rate: 0, percentage: 0) + } + + return BottomRowItem.basal(rate: netBasalContext.rate, percentage: netBasalContext.percentage) + + case .currentBg: + return BottomRowItem.currentBg(label: type.name(), value: "\(glucoseFormatter.string(from: currentGlucose) ?? "??")", trend: statusContext?.glucoseDisplay?.trendType) + + case .eventualBg: + guard let eventual = statusContext?.predictedGlucose?.values.last else { + return BottomRowItem.generic(label: type.name(), value: "??", unit: "") + } + + return BottomRowItem.generic(label: type.name(), value: glucoseFormatter.string(from: eventual) ?? "??", unit: "") + + case .deltaBg: + return BottomRowItem.generic(label: type.name(), value: delta, unit: "") + + case .updatedAt: + return BottomRowItem.generic(label: type.name(), value: timeFormatter.string(from: Date.now), unit: "") + } + } + } + + private func initEmptyActivity(settings: LiveActivitySettings) { + do { + let dynamicState = GlucoseActivityAttributes.ContentState( + date: Date.now, + ended: true, + preset: nil, + glucoseRanges: [], + currentGlucose: 0, + eventualGlucose: nil, + trendType: nil, + delta: "", + isMmol: true, + isCloseLoop: false, + lastCompleted: nil, + bottomRow: [], + glucoseSamples: [], + predicatedGlucose: [], + predicatedStartDate: nil, + predicatedInterval: nil, + yAxisMarks: [] + ) + + self.activity = try Activity.request( + attributes: GlucoseActivityAttributes( + mode: settings.mode, + addPredictiveLine: settings.addPredictiveLine, + useLimits: settings.useLimits, + upperLimitChartMmol: settings.upperLimitChartMmol, + lowerLimitChartMmol: settings.lowerLimitChartMmol, + upperLimitChartMg: settings.upperLimitChartMg, + lowerLimitChartMg: settings.lowerLimitChartMg + ), + content: .init(state: dynamicState, staleDate: nil), + pushType: .token + ) + } catch { + print("ERROR: Error while creating empty live activity: \(error.localizedDescription)") + } + } +} + +extension TemporaryScheduleOverride { + func getTitle() -> String { + switch (self.context) { + case .preset(let preset): + return "\(preset.symbol) \(preset.name)" + case .custom: + return NSLocalizedString("Custom preset", comment: "The title of the cell indicating a generic custom preset is enabled") + case .preMeal: + return NSLocalizedString(" Pre-meal Preset", comment: "Status row title for premeal override enabled (leading space is to separate from symbol)") + case .legacyWorkout: + return "" + } + } +} diff --git a/Loop/Managers/Live Activity/LiveActivityManagerProxy.swift b/Loop/Managers/Live Activity/LiveActivityManagerProxy.swift new file mode 100644 index 0000000000..ed88c92794 --- /dev/null +++ b/Loop/Managers/Live Activity/LiveActivityManagerProxy.swift @@ -0,0 +1,13 @@ +// +// LiveActivityManagerProxy.swift +// Loop +// +// Created by Bastiaan Verhaar on 01/11/2025. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import LoopCore + +protocol LiveActivityManagerProxy { + func update(loopSettings: LoopSettings) +} diff --git a/Loop/Managers/LoopDataManager.swift b/Loop/Managers/LoopDataManager.swift index 2319f4eceb..c9aef285e8 100644 --- a/Loop/Managers/LoopDataManager.swift +++ b/Loop/Managers/LoopDataManager.swift @@ -68,6 +68,8 @@ final class LoopDataManager { private var timeBasedDoseApplicationFactor: Double = 1.0 private var insulinOnBoard: InsulinValue? + + private var liveActivityManager: LiveActivityManagerProxy? deinit { for observer in notificationObservers { @@ -124,6 +126,14 @@ final class LoopDataManager { self.automaticDosingStatus = automaticDosingStatus self.trustedTimeOffset = trustedTimeOffset + + if #available(iOS 16.2, *) { + self.liveActivityManager = LiveActivityManager( + glucoseStore: self.glucoseStore, + doseStore: self.doseStore, + loopSettings: self.settings + ) + } overrideIntentObserver = UserDefaults.appGroup?.observe(\.intentExtensionOverrideToSet, options: [.new], changeHandler: {[weak self] (defaults, change) in guard let name = change.newValue??.lowercased(), let appGroup = UserDefaults.appGroup else { @@ -144,12 +154,14 @@ final class LoopDataManager { } } } + settings.scheduleOverride = preset.createOverride(enactTrigger: .remote("Siri")) if let observers = self?.presetActivationObservers { for observer in observers { observer.presetActivated(context: .preset(preset), duration: preset.duration) } } + self?.liveActivityManager?.update(loopSettings: settings) } // Remove the override from UserDefaults so we don't set it multiple times appGroup.intentExtensionOverrideToSet = nil @@ -167,6 +179,7 @@ final class LoopDataManager { ) { (note) -> Void in self.dataAccessQueue.async { self.logger.default("Received notification of carb entries changing") + self.liveActivityManager?.update(loopSettings: self.settings) self.carbEffect = nil self.carbsOnBoard = nil @@ -182,7 +195,8 @@ final class LoopDataManager { ) { (note) in self.dataAccessQueue.async { self.logger.default("Received notification of glucose samples changing") - + self.liveActivityManager?.update(loopSettings: self.settings) + self.glucoseMomentumEffect = nil self.remoteRecommendationNeedsUpdating = true @@ -196,6 +210,7 @@ final class LoopDataManager { ) { (note) in self.dataAccessQueue.async { self.logger.default("Received notification of dosing changing") + self.liveActivityManager?.update(loopSettings: self.settings) self.clearCachedInsulinEffects() self.remoteRecommendationNeedsUpdating = true @@ -247,6 +262,8 @@ final class LoopDataManager { if newValue.preMealOverride != oldValue.preMealOverride { // The prediction isn't actually invalid, but a target range change requires recomputing recommended doses predictedGlucose = nil + + self.liveActivityManager?.update(loopSettings: newValue) } if newValue.scheduleOverride != oldValue.scheduleOverride { @@ -256,12 +273,14 @@ final class LoopDataManager { for observer in self.presetActivationObservers { observer.presetDeactivated(context: oldPreset.context) } - + self.liveActivityManager?.update(loopSettings: newValue) } if let newPreset = newValue.scheduleOverride { for observer in self.presetActivationObservers { observer.presetActivated(context: newPreset.context, duration: newPreset.duration) } + + self.liveActivityManager?.update(loopSettings: newValue) } // Invalidate cached effects affected by the override diff --git a/Loop/View Models/LiveActivityManagementViewModel.swift b/Loop/View Models/LiveActivityManagementViewModel.swift new file mode 100644 index 0000000000..46fc560d6c --- /dev/null +++ b/Loop/View Models/LiveActivityManagementViewModel.swift @@ -0,0 +1,35 @@ +// +// LiveActivityManagementViewModel.swift +// Loop +// +// Created by Bastiaan Verhaar on 12/09/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopCore + +class LiveActivityManagementViewModel : ObservableObject { + @Published var enabled: Bool + @Published var mode: LiveActivityMode + @Published var isEditingMode: Bool = false + @Published var addPredictiveLine: Bool + @Published var useLimits: Bool + @Published var upperLimitChartMmol: Double + @Published var lowerLimitChartMmol: Double + @Published var upperLimitChartMg: Double + @Published var lowerLimitChartMg: Double + + init() { + let liveActivitySettings = UserDefaults.standard.liveActivity ?? LiveActivitySettings() + + self.enabled = liveActivitySettings.enabled + self.mode = liveActivitySettings.mode + self.addPredictiveLine = liveActivitySettings.addPredictiveLine + self.useLimits = liveActivitySettings.useLimits + self.upperLimitChartMmol = liveActivitySettings.upperLimitChartMmol + self.lowerLimitChartMmol = liveActivitySettings.lowerLimitChartMmol + self.upperLimitChartMg = liveActivitySettings.upperLimitChartMg + self.lowerLimitChartMg = liveActivitySettings.lowerLimitChartMg + } +} diff --git a/Loop/Views/AlertManagementView.swift b/Loop/Views/AlertManagementView.swift index e9a38e72a0..94e542a6ab 100644 --- a/Loop/Views/AlertManagementView.swift +++ b/Loop/Views/AlertManagementView.swift @@ -7,8 +7,10 @@ // import SwiftUI +import LoopCore import LoopKit import LoopKitUI +import HealthKit struct AlertManagementView: View { @Environment(\.appName) private var appName @@ -157,6 +159,11 @@ struct AlertManagementView: View { } } } + + NavigationLink(destination: LiveActivityManagementView()) + { + Text(NSLocalizedString("Live activity", comment: "Alert Permissions live activity")) + } } } diff --git a/Loop/Views/LiveActivityBottomRowManagerView.swift b/Loop/Views/LiveActivityBottomRowManagerView.swift new file mode 100644 index 0000000000..85a45b017f --- /dev/null +++ b/Loop/Views/LiveActivityBottomRowManagerView.swift @@ -0,0 +1,133 @@ +// +// LiveActivityBottomRowManagerView.swift +// Loop +// +// Created by Bastiaan Verhaar on 06/07/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import LoopKitUI +import LoopCore +import SwiftUI + +struct LiveActivityBottomRowManagerView: View { + @Environment(\.presentationMode) var presentationMode: Binding + + // The maximum items in the bottom row + private let maxSize = 4 + + @State var showAdd: Bool = false + @State var configuration: [BottomRowConfiguration] + @State private var previousConfiguration: [BottomRowConfiguration] + @State private var isDirty = false + + init() { + configuration = (UserDefaults.standard.liveActivity ?? LiveActivitySettings()).bottomRowConfiguration + previousConfiguration = (UserDefaults.standard.liveActivity ?? LiveActivitySettings()).bottomRowConfiguration + } + + var addItem: ActionSheet { + var buttons: [ActionSheet.Button] = BottomRowConfiguration.all.map { item in + ActionSheet.Button.default(Text(item.description())) { + configuration.append(item) + + isDirty = configuration != previousConfiguration + } + } + buttons.append(.cancel(Text(NSLocalizedString("Cancel", comment: "Button text to cancel")))) + + return ActionSheet(title: Text(NSLocalizedString("Add item to bottom row", comment: "Title for Add item")), buttons: buttons) + } + + var body: some View { + List { + ForEach($configuration, id: \.self) { item in + HStack { + deleteButton + .onTapGesture { + onDelete(item.wrappedValue) + isDirty = configuration != previousConfiguration + } + Text(item.wrappedValue.description()) + + Spacer() + editBars + } + } + .onMove(perform: onReorder) + .deleteDisabled(true) + + Section { + Button(action: onSave) { + Text(NSLocalizedString("Save", comment: "")) + } + .disabled(!isDirty) + .buttonStyle(ActionButtonStyle()) + .listRowInsets(EdgeInsets()) + } + } + .onAppear { + configuration = (UserDefaults.standard.liveActivity ?? LiveActivitySettings()).bottomRowConfiguration + previousConfiguration = (UserDefaults.standard.liveActivity ?? LiveActivitySettings()).bottomRowConfiguration + } + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button( + action: { showAdd = true }, + label: { Image(systemName: "plus") } + ) + .disabled(configuration.count >= self.maxSize) + } + } + .actionSheet(isPresented: $showAdd, content: { addItem }) + .insetGroupedListStyle() + .navigationBarTitle(Text(NSLocalizedString("Bottom row", comment: "Live activity Bottom row configuration title"))) + } + + @ViewBuilder + private var deleteButton: some View { + ZStack { + Color.red + .clipShape(RoundedRectangle(cornerRadius: 12.5)) + .frame(width: 20, height: 20) + + Image(systemName: "minus") + .foregroundColor(.white) + } + .contentShape(Rectangle()) + } + + @ViewBuilder + private var editBars: some View { + Image(systemName: "line.3.horizontal") + .foregroundColor(Color(UIColor.tertiaryLabel)) + .font(.title2) + } + + private func onSave() { + var settings = UserDefaults.standard.liveActivity ?? LiveActivitySettings() + settings.bottomRowConfiguration = configuration + + UserDefaults.standard.liveActivity = settings + NotificationCenter.default.post(name: .LiveActivitySettingsChanged, object: settings) + + self.presentationMode.wrappedValue.dismiss() + } + + func onReorder(from: IndexSet, to: Int) { + withAnimation { + configuration.move(fromOffsets: from, toOffset: to) + isDirty = configuration != previousConfiguration + } + } + + func onDelete(_ item: BottomRowConfiguration) { + withAnimation { + _ = configuration.remove(item) + } + } +} + +#Preview { + LiveActivityBottomRowManagerView() +} diff --git a/Loop/Views/LiveActivityManagementView.swift b/Loop/Views/LiveActivityManagementView.swift new file mode 100644 index 0000000000..bdf87dc553 --- /dev/null +++ b/Loop/Views/LiveActivityManagementView.swift @@ -0,0 +1,140 @@ +// +// LiveActivityManagementView.swift +// Loop +// +// Created by Bastiaan Verhaar on 04/07/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKitUI +import LoopCore +import HealthKit + +struct LiveActivityManagementView: View { + @EnvironmentObject private var displayGlucosePreference: DisplayGlucosePreference + @StateObject private var viewModel = LiveActivityManagementViewModel() + @State private var previousViewModel = LiveActivityManagementViewModel() + + @State private var isDirty = false + + var body: some View { + VStack { + List { + Section { + Toggle(NSLocalizedString("Enabled", comment: "Title for enable live activity toggle"), isOn: $viewModel.enabled) + .onChange(of: viewModel.enabled) { _ in + self.isDirty = previousViewModel.enabled != viewModel.enabled + } + + ExpandableSetting( + isEditing: $viewModel.isEditingMode, + leadingValueContent: { + Text(NSLocalizedString("Mode", comment: "Title for mode live activity toggle")) + .foregroundStyle(viewModel.isEditingMode ? .blue : .primary) + }, + trailingValueContent: { + Text(viewModel.mode.name()) + .foregroundStyle(viewModel.isEditingMode ? .blue : .primary) + }, + expandedContent: { + ResizeablePicker(selection: self.$viewModel.mode.animation(), + data: LiveActivityMode.all, + formatter: { $0.name() }) + } + ) + .onChange(of: viewModel.mode) { _ in + self.isDirty = previousViewModel.mode != viewModel.mode + } + } + + Section { + if viewModel.mode == .large { + Toggle(NSLocalizedString("Add predictive line", comment: "Title for predictive line toggle"), isOn: $viewModel.addPredictiveLine) + .transition(.move(edge: viewModel.mode == .large ? .top : .bottom)) + .onChange(of: viewModel.addPredictiveLine) { _ in + self.isDirty = previousViewModel.addPredictiveLine != viewModel.addPredictiveLine + } + } + + Toggle(NSLocalizedString("Use BG coloring", comment: "Title for BG coloring"), isOn: $viewModel.useLimits) + .transition(.move(edge: viewModel.mode == .large ? .top : .bottom)) + .onChange(of: viewModel.useLimits) { _ in + self.isDirty = previousViewModel.useLimits != viewModel.useLimits + } + + if self.displayGlucosePreference.unit == .millimolesPerLiter { + TextInput(label: "Upper limit", value: $viewModel.upperLimitChartMmol) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.upperLimitChartMmol) { _ in + self.isDirty = previousViewModel.upperLimitChartMmol != viewModel.upperLimitChartMmol + } + TextInput(label: "Lower limit", value: $viewModel.lowerLimitChartMmol) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.lowerLimitChartMmol) { _ in + self.isDirty = previousViewModel.lowerLimitChartMmol != viewModel.lowerLimitChartMmol + } + } else { + TextInput(label: "Upper limit", value: $viewModel.upperLimitChartMg) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.upperLimitChartMg) { _ in + self.isDirty = previousViewModel.upperLimitChartMg != viewModel.upperLimitChartMg + } + TextInput(label: "Lower limit", value: $viewModel.lowerLimitChartMg) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.lowerLimitChartMg) { _ in + self.isDirty = previousViewModel.lowerLimitChartMg != viewModel.lowerLimitChartMg + } + } + } + + Section { + NavigationLink( + destination: LiveActivityBottomRowManagerView(), + label: { Text(NSLocalizedString("Bottom row configuration", comment: "Title for Bottom row configuration")) } + ) + } + } + .animation(.easeInOut, value: UUID()) + .insetGroupedListStyle() + + Spacer() + Button(action: save) { + Text(NSLocalizedString("Save", comment: "")) + } + .buttonStyle(ActionButtonStyle()) + .disabled(!isDirty) + .padding([.bottom, .horizontal]) + } + .navigationBarTitle(Text(NSLocalizedString("Live activity", comment: "Live activity screen title"))) + } + + @ViewBuilder + private func TextInput(label: String, value: Binding) -> some View { + HStack { + Text(NSLocalizedString(label, comment: "no comment")) + Spacer() + TextField("", value: value, format: .number) + .multilineTextAlignment(.trailing) + Text(self.displayGlucosePreference.unit.localizedShortUnitString) + } + } + + private func save() { + var settings = UserDefaults.standard.liveActivity ?? LiveActivitySettings() + settings.enabled = viewModel.enabled + settings.mode = viewModel.mode + settings.addPredictiveLine = viewModel.addPredictiveLine + settings.useLimits = viewModel.useLimits + settings.upperLimitChartMmol = viewModel.upperLimitChartMmol + settings.lowerLimitChartMmol = viewModel.lowerLimitChartMmol + settings.upperLimitChartMg = viewModel.upperLimitChartMg + settings.lowerLimitChartMg = viewModel.lowerLimitChartMg + + UserDefaults.standard.liveActivity = settings + NotificationCenter.default.post(name: .LiveActivitySettingsChanged, object: settings) + + self.isDirty = false + previousViewModel = LiveActivityManagementViewModel() + } +} diff --git a/LoopCore/LiveActivitySettings.swift b/LoopCore/LiveActivitySettings.swift new file mode 100644 index 0000000000..ef37a88f28 --- /dev/null +++ b/LoopCore/LiveActivitySettings.swift @@ -0,0 +1,154 @@ +// +// LiveActivitySettings.swift +// LoopCore +// +// Created by Bastiaan Verhaar on 04/07/2024. +// Copyright © 2024 LoopKit Authors. All rights reserved. +// + +import Foundation + +public enum BottomRowConfiguration: Codable { + case iob + case cob + case basal + case currentBg + case eventualBg + case deltaBg + case updatedAt + + static let defaults: [BottomRowConfiguration] = [.currentBg, .iob, .cob, .updatedAt] + public static let all: [BottomRowConfiguration] = [.iob, .cob, .basal, .currentBg, .eventualBg, .deltaBg, .updatedAt] + + public func name() -> String { + switch self { + case .iob: + return NSLocalizedString("Active Insulin", comment: "") + case .cob: + return NSLocalizedString("Active Carbs", comment: "") + case .basal: + return NSLocalizedString("Basal", comment: "") + case .currentBg: + return NSLocalizedString("Current BG", comment: "") + case .eventualBg: + return NSLocalizedString("Eventual BG", comment: "") + case .deltaBg: + return NSLocalizedString("Delta", comment: "") + case .updatedAt: + return NSLocalizedString("Updated", comment: "") + } + } + + public func description() -> String { + switch self { + case .iob: + return NSLocalizedString("Active Insulin", comment: "") + case .cob: + return NSLocalizedString("Active Carbohydrates", comment: "") + case .basal: + return NSLocalizedString("Basal", comment: "") + case .currentBg: + return NSLocalizedString("Current Glucose", comment: "") + case .eventualBg: + return NSLocalizedString("Eventually", comment: "") + case .deltaBg: + return NSLocalizedString("Delta", comment: "") + case .updatedAt: + return NSLocalizedString("Updated at", comment: "") + } + } +} + +public enum LiveActivityMode: Codable, CustomStringConvertible { + case large + case small + + public static let all: [LiveActivityMode] = [.large, .small] + public var description: String { + NSLocalizedString("In which mode do you want to render the Live Activity", comment: "") + } + + public func name() -> String { + switch self { + case .large: + return NSLocalizedString("Large", comment: "") + case .small: + return NSLocalizedString("Small", comment: "") + } + } +} + +public struct LiveActivitySettings: Codable, Equatable { + public var enabled: Bool + public var mode: LiveActivityMode + public var addPredictiveLine: Bool + public var useLimits: Bool + public var upperLimitChartMmol: Double + public var lowerLimitChartMmol: Double + public var upperLimitChartMg: Double + public var lowerLimitChartMg: Double + public var bottomRowConfiguration: [BottomRowConfiguration] + + private enum CodingKeys: String, CodingKey { + case enabled + case mode + case addPredictiveLine + case bottomRowConfiguration + case useLimits + case upperLimitChartMmol + case lowerLimitChartMmol + case upperLimitChartMg + case lowerLimitChartMg + } + + private static let defaultUpperLimitMmol = Double(10) + private static let defaultLowerLimitMmol = Double(4) + private static let defaultUpperLimitMg = Double(180) + private static let defaultLowerLimitMg = Double(72) + + public init(from decoder:Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + + self.enabled = try values.decode(Bool.self, forKey: .enabled) + self.mode = try values.decodeIfPresent(LiveActivityMode.self, forKey: .mode) ?? .large + self.addPredictiveLine = try values.decode(Bool.self, forKey: .addPredictiveLine) + self.useLimits = try values.decode(Bool.self, forKey: .useLimits) + self.upperLimitChartMmol = try values.decode(Double?.self, forKey: .upperLimitChartMmol) ?? LiveActivitySettings.defaultUpperLimitMmol + self.lowerLimitChartMmol = try values.decode(Double?.self, forKey: .lowerLimitChartMmol) ?? LiveActivitySettings.defaultLowerLimitMmol + self.upperLimitChartMg = try values.decode(Double?.self, forKey: .upperLimitChartMg) ?? LiveActivitySettings.defaultUpperLimitMg + self.lowerLimitChartMg = try values.decode(Double?.self, forKey: .lowerLimitChartMg) ?? LiveActivitySettings.defaultLowerLimitMg + self.bottomRowConfiguration = try values.decode([BottomRowConfiguration].self, forKey: .bottomRowConfiguration) + } + + public init() { + self.enabled = true + self.mode = .large + self.addPredictiveLine = true + self.useLimits = true + self.upperLimitChartMmol = LiveActivitySettings.defaultUpperLimitMmol + self.lowerLimitChartMmol = LiveActivitySettings.defaultLowerLimitMmol + self.upperLimitChartMg = LiveActivitySettings.defaultUpperLimitMg + self.lowerLimitChartMg = LiveActivitySettings.defaultLowerLimitMg + self.bottomRowConfiguration = BottomRowConfiguration.defaults + } + + public static func == (lhs: LiveActivitySettings, rhs: LiveActivitySettings) -> Bool { + return lhs.addPredictiveLine == rhs.addPredictiveLine && + lhs.mode == rhs.mode && + lhs.useLimits == rhs.useLimits && + lhs.lowerLimitChartMmol == rhs.lowerLimitChartMmol && + lhs.upperLimitChartMmol == rhs.upperLimitChartMmol && + lhs.lowerLimitChartMg == rhs.lowerLimitChartMg && + lhs.upperLimitChartMg == rhs.upperLimitChartMg + } + + public static func != (lhs: LiveActivitySettings, rhs: LiveActivitySettings) -> Bool { + return lhs.addPredictiveLine != rhs.addPredictiveLine || + lhs.mode != rhs.mode || + lhs.useLimits != rhs.useLimits || + lhs.lowerLimitChartMmol != rhs.lowerLimitChartMmol || + lhs.upperLimitChartMmol != rhs.upperLimitChartMmol || + lhs.lowerLimitChartMg != rhs.lowerLimitChartMg || + lhs.upperLimitChartMg != rhs.upperLimitChartMg + } +} diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index 052b1f8b72..28eac3f1a7 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -126,6 +126,18 @@ } } }, + "Active Carbohydrates" : { + "comment" : "Description of a bottom row configuration option for active carbohydrates.", + "isCommentAutoGenerated" : true + }, + "Active Carbs" : { + "comment" : "Name of the \"Active Carbs\" option in the Live Activity settings.", + "isCommentAutoGenerated" : true + }, + "Active Insulin" : { + "comment" : "Name of the active insulin value in the bottom row.", + "isCommentAutoGenerated" : true + }, "Automatic Bolus" : { "comment" : "Title string for automatic bolus dosing strategy", "localizations" : { @@ -215,6 +227,42 @@ } } }, + "Basal" : { + "comment" : "Name of the basal insulin rate.", + "isCommentAutoGenerated" : true + }, + "Current BG" : { + "comment" : "Name of a bottom row item that shows the current blood glucose level.", + "isCommentAutoGenerated" : true + }, + "Current Glucose" : { + "comment" : "Description of a bottom row item that shows the current glucose level.", + "isCommentAutoGenerated" : true + }, + "Delta" : { + "comment" : "The name of the delta BG value.", + "isCommentAutoGenerated" : true + }, + "Eventual BG" : { + "comment" : "Description of a bottom row configuration option for displaying the eventual glucose value.", + "isCommentAutoGenerated" : true + }, + "Eventually" : { + "comment" : "Description of a glucose value that is expected to change in the future.", + "isCommentAutoGenerated" : true + }, + "In which mode do you want to render the Live Activity" : { + "comment" : "Description of a setting that allows the user to choose between a large or small display of the Live Activity.", + "isCommentAutoGenerated" : true + }, + "Large" : { + "comment" : "Name of the \"Large\" Live Activity mode.", + "isCommentAutoGenerated" : true + }, + "Small" : { + "comment" : "Name of the \"Small\" Live Activity mode.", + "isCommentAutoGenerated" : true + }, "Temp Basal Only" : { "comment" : "Title string for temp basal only dosing strategy", "localizations" : { @@ -303,7 +351,15 @@ } } } + }, + "Updated" : { + "comment" : "Name of the \"Updated\" option in the Live Activity settings.", + "isCommentAutoGenerated" : true + }, + "Updated at" : { + "comment" : "Label for the date and time when the last update was made.", + "isCommentAutoGenerated" : true } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file diff --git a/LoopCore/NSUserDefaults.swift b/LoopCore/NSUserDefaults.swift index 93fa7e17d6..dacf2ecdc7 100644 --- a/LoopCore/NSUserDefaults.swift +++ b/LoopCore/NSUserDefaults.swift @@ -23,6 +23,7 @@ extension UserDefaults { case allowSimulators = "com.loopkit.Loop.allowSimulators" case LastMissedMealNotification = "com.loopkit.Loop.lastMissedMealNotification" case userRequestedLoopReset = "com.loopkit.Loop.userRequestedLoopReset" + case liveActivity = "com.loopkit.Loop.liveActivity" } public static let appGroup = UserDefaults(suiteName: Bundle.main.appGroupSuiteName) @@ -165,6 +166,29 @@ extension UserDefaults { setValue(newValue, forKey: Key.userRequestedLoopReset.rawValue) } } + + public var liveActivity: LiveActivitySettings? { + get { + let decoder = JSONDecoder() + guard let data = object(forKey: Key.liveActivity.rawValue) as? Data else { + return nil + } + return try? decoder.decode(LiveActivitySettings.self, from: data) + } + set { + do { + if let newValue = newValue { + let encoder = JSONEncoder() + let data = try encoder.encode(newValue) + set(data, forKey: Key.liveActivity.rawValue) + } else { + set(nil, forKey: Key.liveActivity.rawValue) + } + } catch { + assertionFailure("Unable to encode MissedMealNotification") + } + } + } public func removeLegacyLoopSettings() { removeObject(forKey: "com.loudnate.Naterade.BasalRateSchedule") From a745f0bb37269de03f72c9991c0fcbc845f1167c Mon Sep 17 00:00:00 2001 From: marionbarker Date: Wed, 3 Dec 2025 06:04:16 -0800 Subject: [PATCH 26/41] update linting for Live Activity --- .../Bootstrap/Localizable.xcstrings | 37 +++++++++++++++++++ Loop/Localizable.xcstrings | 32 +++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings index a8dafa7b15..17bac774ed 100644 --- a/Loop Widget Extension/Bootstrap/Localizable.xcstrings +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -428,6 +428,19 @@ } } } + }, + "%@%@" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@%2$@" + } + } + } + }, + "%@U" : { + }, "%1$@ v%2$@" : { "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", @@ -553,6 +566,12 @@ } } } + }, + "Color" : { + + }, + "Date" : { + }, "dB" : { "comment" : "The short unit display string for decibles", @@ -672,6 +691,9 @@ } } } + }, + "End" : { + }, "Eventual" : { "localizations" : { @@ -873,6 +895,12 @@ } } } + }, + "Glucose level" : { + + }, + "Glucose range" : { + }, "Loop Status Widget" : { "localizations" : { @@ -1193,6 +1221,12 @@ } } } + }, + "Open the app to update the widget" : { + "comment" : "No comment" + }, + "Preset override" : { + }, "QUANTITY_VALUE_AND_UNIT" : { "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", @@ -1395,6 +1429,9 @@ } } } + }, + "Start" : { + }, "U" : { "comment" : "The short unit display string for international units of insulin", diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 91d0b53de7..17efd83086 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1,6 +1,9 @@ { "sourceLanguage" : "en", "strings" : { + "" : { + + }, " (pending: %@)" : { "comment" : "The string format appended to active insulin that describes pending insulin. (1: pending insulin)", "extractionState" : "manual", @@ -5318,6 +5321,9 @@ } } }, + "Add item to bottom row" : { + "comment" : "Title for Add item" + }, "Add Meal" : { "comment" : "The label of the carb entry button", "localizations" : { @@ -5443,6 +5449,9 @@ } } }, + "Add predictive line" : { + "comment" : "Title for predictive line toggle" + }, "Add Pump" : { "comment" : "Action sheet title selecting Pump\nThe title of the pump chooser in settings\nTitle text for button to add pump device\nTitle text for button to set up a Pump", "localizations" : { @@ -9828,8 +9837,14 @@ } } }, + "Bottom row" : { + "comment" : "Live activity Bottom row configuration title" + }, + "Bottom row configuration" : { + "comment" : "Title for Bottom row configuration" + }, "Cancel" : { - "comment" : "Button label for cancel\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", + "comment" : "Button label for cancel\nButton text to cancel\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", "localizations" : { "ar" : { "stringUnit" : { @@ -14182,6 +14197,9 @@ } } }, + "Custom preset" : { + "comment" : "The title of the cell indicating a generic custom preset is enabled" + }, "Custom Preset" : { "comment" : "The title of the cell indicating a generic custom preset is enabled", "localizations" : { @@ -16630,6 +16648,9 @@ } } }, + "Enabled" : { + "comment" : "Title for enable live activity toggle" + }, "Enables" : { "comment" : "The action hint of the workout mode toggle button when disabled", "localizations" : { @@ -23404,6 +23425,9 @@ } } }, + "Live activity" : { + "comment" : "Alert Permissions live activity\nLive activity screen title" + }, "Loading..." : { "comment" : "The loading message for the diagnostic report screen", "localizations" : { @@ -25797,6 +25821,9 @@ } } }, + "Mode" : { + "comment" : "Title for mode live activity toggle" + }, "Momentum effects" : { "comment" : "Details for missing data error when momentum effects are missing", "localizations" : { @@ -38385,6 +38412,9 @@ } } }, + "Use BG coloring" : { + "comment" : "Title for BG coloring" + }, "Use Pre-Meal Preset" : { "comment" : "The title of the alert controller used to select a duration for pre-meal targets", "localizations" : { From 48fefe22d1960e7120863202b3f9b25f397ab05c Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sat, 27 Dec 2025 15:27:51 -0800 Subject: [PATCH 27/41] Updated translations from lokalise on Sat Dec 27 14:50:21 PST 2025 --- Loop Status Extension/Localizable.xcstrings | 4 ++-- Loop/Localizable.xcstrings | 22 +++++++++++++++++++-- LoopUI/Localizable.xcstrings | 12 ++++++++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Loop Status Extension/Localizable.xcstrings b/Loop Status Extension/Localizable.xcstrings index 3c2f0c2c24..7f0ecaa2e7 100644 --- a/Loop Status Extension/Localizable.xcstrings +++ b/Loop Status Extension/Localizable.xcstrings @@ -560,7 +560,7 @@ "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Glucides actifs" + "value" : "Glucides" } }, "he" : { @@ -685,7 +685,7 @@ "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Insuline active" + "value" : "Insuline" } }, "he" : { diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 17efd83086..77f54808c1 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -14933,6 +14933,12 @@ "state" : "translated", "value" : "Xóa hết" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除所有" + } } } }, @@ -16395,7 +16401,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "给药策略" + "value" : "剂量策略" } } } @@ -18355,6 +18361,12 @@ "state" : "translated", "value" : "İnsülin İletimine Devam Edilemedi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "恢复胰岛素输注失败" + } } } }, @@ -23116,7 +23128,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "已记录大份餐食" + "value" : "已输入大份餐" } } } @@ -35998,6 +36010,12 @@ "state" : "translated", "value" : "İzin verilen maksimum tutar %1$@." } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "允许的最大量为:%1$@" + } } } }, diff --git a/LoopUI/Localizable.xcstrings b/LoopUI/Localizable.xcstrings index 409c038f3b..19df68c2c1 100644 --- a/LoopUI/Localizable.xcstrings +++ b/LoopUI/Localizable.xcstrings @@ -150,7 +150,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ 点按你的 CGM 和胰岛泵状态图标以查看更多信息。%2$@ 将继续尝试完成循环,但请检查你的泵和 CGM 是否存在潜在的通信问题。" + "value" : "%1$@ \n\n点按你的 CGM 和泵状态图标以查看更多信息。%2$@ 将继续尝试完成循环,但请注意,泵和 CGM 之间可能存在通信问题。" } } } @@ -227,7 +227,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ 点按你的 CGM 和胰岛泵状态图标以查看更多信息。%2$@ 将继续尝试完成循环,但请注意你的泵和 CGM 之间可能存在的通信问题。" + "value" : "%1$@ \n\n点按你的 CGM 和泵状态图标以查看更多信息。%2$@ 将继续尝试完成循环,但请注意,泵和 CGM 之间可能存在通信问题。" } } } @@ -2154,7 +2154,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "上次闭环是在 %1$@" + "value" : "上次闭环 %1$@" } } } @@ -3715,6 +3715,12 @@ "state" : "translated", "value" : "%1$@ de idi" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "是在%1$@" + } } } } From ec3248d5d706c0a5b153af05efcf4ecc03ad2e49 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Sun, 1 Feb 2026 10:12:17 -0800 Subject: [PATCH 28/41] Updated translations from lokalise on Sun Feb 1 09:46:29 PST 2026 --- Common/zh-Hans.lproj/Intents.strings | 4 +- .../Bootstrap/Localizable.xcstrings | 100 ++++++++- Loop/Localizable.xcstrings | 212 ++++++++++++++++-- Loop/mul.lproj/Main.xcstrings | 2 +- LoopCore/Localizable.xcstrings | 212 ++++++++++++++++-- WatchApp Extension/Localizable.xcstrings | 4 +- 6 files changed, 490 insertions(+), 44 deletions(-) diff --git a/Common/zh-Hans.lproj/Intents.strings b/Common/zh-Hans.lproj/Intents.strings index 3c86a8a391..cfc6947059 100644 --- a/Common/zh-Hans.lproj/Intents.strings +++ b/Common/zh-Hans.lproj/Intents.strings @@ -2,7 +2,7 @@ "9KhaIS" = "I've set the preset"; /* (No Comment) */ -"80eo5o" = "添加碳水化合物"; +"80eo5o" = "添加碳水摄入"; /* (No Comment) */ "b085BW" = "I wasn't able to set the preset."; @@ -17,7 +17,7 @@ "nDKAmn" = "What's the name of the override you'd like to set?"; /* (No Comment) */ -"OcNxIj" = "添加碳水化合物"; +"OcNxIj" = "添加碳水摄入"; /* (No Comment) */ "oLQSsJ" = "Enable '${overrideName}' Override Preset"; diff --git a/Loop Widget Extension/Bootstrap/Localizable.xcstrings b/Loop Widget Extension/Bootstrap/Localizable.xcstrings index 17bac774ed..e929f5c7f8 100644 --- a/Loop Widget Extension/Bootstrap/Localizable.xcstrings +++ b/Loop Widget Extension/Bootstrap/Localizable.xcstrings @@ -431,6 +431,12 @@ }, "%@%@" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%1$@%2$@" + } + }, "en" : { "stringUnit" : { "state" : "new", @@ -440,7 +446,14 @@ } }, "%@U" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "%@IE" + } + } + } }, "%1$@ v%2$@" : { "comment" : "The format string for the app name and version number. (1: bundle name)(2: bundle version)", @@ -568,10 +581,24 @@ } }, "Color" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Farbe" + } + } + } }, "Date" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Datum" + } + } + } }, "dB" : { "comment" : "The short unit display string for decibles", @@ -693,7 +720,14 @@ } }, "End" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ende" + } + } + } }, "Eventual" : { "localizations" : { @@ -897,10 +931,36 @@ } }, "Glucose level" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Blutzuckerspiegel" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "血糖水平" + } + } + } }, "Glucose range" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zielbereich" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "血糖范围" + } + } + } }, "Loop Status Widget" : { "localizations" : { @@ -1223,10 +1283,25 @@ } }, "Open the app to update the widget" : { - "comment" : "No comment" + "comment" : "No comment", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Öffne die App, um das Widget zu aktualisieren" + } + } + } }, "Preset override" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Voreinstellung" + } + } + } }, "QUANTITY_VALUE_AND_UNIT" : { "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", @@ -1431,7 +1506,14 @@ } }, "Start" : { - + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Start" + } + } + } }, "U" : { "comment" : "The short unit display string for international units of insulin", diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 77f54808c1..109b541fd4 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -4493,7 +4493,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "活性碳水化合物" + "value" : "活性碳水" } } } @@ -5191,7 +5191,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "添加碳水化合物" + "value" : "添加碳水摄入" } } } @@ -5322,7 +5322,15 @@ } }, "Add item to bottom row" : { - "comment" : "Title for Add item" + "comment" : "Title for Add item", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wert zur unteren Zeile hinzufügen" + } + } + } }, "Add Meal" : { "comment" : "The label of the carb entry button", @@ -5450,7 +5458,15 @@ } }, "Add predictive line" : { - "comment" : "Title for predictive line toggle" + "comment" : "Title for predictive line toggle", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Prognostizierten BZ-Verlauf hinzufügen" + } + } + } }, "Add Pump" : { "comment" : "Action sheet title selecting Pump\nThe title of the pump chooser in settings\nTitle text for button to add pump device\nTitle text for button to set up a Pump", @@ -9838,10 +9854,38 @@ } }, "Bottom row" : { - "comment" : "Live activity Bottom row configuration title" + "comment" : "Live activity Bottom row configuration title", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Untere Zeile" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "底部行" + } + } + } }, "Bottom row configuration" : { - "comment" : "Title for Bottom row configuration" + "comment" : "Title for Bottom row configuration", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Konfiguration der unteren Zeile" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "底部行配置" + } + } + } }, "Cancel" : { "comment" : "Button label for cancel\nButton text to cancel\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", @@ -10702,7 +10746,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "添加碳水化合物" + "value" : "添加碳水摄入" } } } @@ -13943,6 +13987,12 @@ "state" : "translated", "value" : "Mevcut KŞ" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前血糖" + } } } }, @@ -14198,7 +14248,21 @@ } }, "Custom preset" : { - "comment" : "The title of the cell indicating a generic custom preset is enabled" + "comment" : "The title of the cell indicating a generic custom preset is enabled", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Benutzerdefinierte Voreinstellung" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "自定义预设" + } + } + } }, "Custom Preset" : { "comment" : "The title of the cell indicating a generic custom preset is enabled", @@ -15228,7 +15292,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "Delete Service" + "value" : "删除服务" } } } @@ -15318,6 +15382,12 @@ "state" : "translated", "value" : "Test CGM Verilerini Sil" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除测试 CGM 数据" + } } } }, @@ -15406,6 +15476,12 @@ "state" : "translated", "value" : "Test Verilerini Sil" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除测试数据" + } } } }, @@ -15494,6 +15570,12 @@ "state" : "translated", "value" : "Test Pompası Verilerini Sil" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "删除测试用胰岛素泵数据" + } } } }, @@ -16655,7 +16737,21 @@ } }, "Enabled" : { - "comment" : "Title for enable live activity toggle" + "comment" : "Title for enable live activity toggle", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiviert" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用" + } + } + } }, "Enables" : { "comment" : "The action hint of the workout mode toggle button when disabled", @@ -18189,6 +18285,12 @@ "state" : "translated", "value" : "Kritik Olay Günlüklerini Dışa Aktarma" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "导出关键事件日志" + } } } }, @@ -19593,7 +19695,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "葡萄糖" + "value" : "血糖" } } } @@ -19998,6 +20100,12 @@ "state" : "translated", "value" : "Efectul asupra glicemiei al suspendării administrării de insulină" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "暂停胰岛素输注对血糖的影响" + } } } }, @@ -22974,7 +23082,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "反馈问题" + "value" : "问题报告" } } } @@ -23438,7 +23546,21 @@ } }, "Live activity" : { - "comment" : "Alert Permissions live activity\nLive activity screen title" + "comment" : "Alert Permissions live activity\nLive activity screen title", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Live-Aktivität" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "实时活动" + } + } + } }, "Loading..." : { "comment" : "The loading message for the diagnostic report screen", @@ -25834,7 +25956,21 @@ } }, "Mode" : { - "comment" : "Title for mode live activity toggle" + "comment" : "Title for mode live activity toggle", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Modus" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "模式" + } + } + } }, "Momentum effects" : { "comment" : "Details for missing data error when momentum effects are missing", @@ -28415,7 +28551,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "好的" + "value" : "OK" } } } @@ -29775,6 +29911,12 @@ "state" : "translated", "value" : "Profil Sona Erme" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "配置过期" + } } } }, @@ -32138,6 +32280,12 @@ "state" : "translated", "value" : "Uzak Bolus Girişi: %@ U" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "远程大剂量:%@ U" + } } } }, @@ -32653,6 +32801,12 @@ "value" : "Gem" } }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Speichern" + } + }, "fr" : { "stringUnit" : { "state" : "translated", @@ -32676,6 +32830,12 @@ "state" : "translated", "value" : "Zapisz" } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Salvează" + } } } }, @@ -34563,6 +34723,12 @@ "state" : "translated", "value" : "Suspendarea administrării insulinei" } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "胰岛素输注暂停" + } } } }, @@ -38431,7 +38597,21 @@ } }, "Use BG coloring" : { - "comment" : "Title for BG coloring" + "comment" : "Title for BG coloring", + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zeige BZ-Kurve farbig an" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "使用血糖数据颜色" + } + } + } }, "Use Pre-Meal Preset" : { "comment" : "The title of the alert controller used to select a duration for pre-meal targets", diff --git a/Loop/mul.lproj/Main.xcstrings b/Loop/mul.lproj/Main.xcstrings index 473a6d13bc..9dddf366e0 100644 --- a/Loop/mul.lproj/Main.xcstrings +++ b/Loop/mul.lproj/Main.xcstrings @@ -2887,7 +2887,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "葡萄糖" + "value" : "血糖" } } } diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index 28eac3f1a7..cc1c5c9b6d 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -128,15 +128,57 @@ }, "Active Carbohydrates" : { "comment" : "Description of a bottom row configuration option for active carbohydrates.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive Kohlenhydrate" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水" + } + } + } }, "Active Carbs" : { "comment" : "Name of the \"Active Carbs\" option in the Live Activity settings.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktive KH" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性碳水" + } + } + } }, "Active Insulin" : { "comment" : "Name of the active insulin value in the bottom row.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktives Insulin" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "活性胰岛素" + } + } + } }, "Automatic Bolus" : { "comment" : "Title string for automatic bolus dosing strategy", @@ -229,39 +271,159 @@ }, "Basal" : { "comment" : "Name of the basal insulin rate.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Basal" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "基础率" + } + } + } }, "Current BG" : { "comment" : "Name of a bottom row item that shows the current blood glucose level.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktueller BZ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前血糖" + } + } + } }, "Current Glucose" : { "comment" : "Description of a bottom row item that shows the current glucose level.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktueller Blutzucker" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "当前血糖" + } + } + } }, "Delta" : { "comment" : "The name of the delta BG value.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Delta" + } + } + } }, "Eventual BG" : { "comment" : "Description of a bottom row configuration option for displaying the eventual glucose value.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Progn. BZ" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终血糖" + } + } + } }, "Eventually" : { "comment" : "Description of a glucose value that is expected to change in the future.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zukünftig" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "最终" + } + } + } }, "In which mode do you want to render the Live Activity" : { "comment" : "Description of a setting that allows the user to choose between a large or small display of the Live Activity.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In welchem Modus soll die Live-Aktivität angezeigt werden" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "你希望使用哪种模式来渲染实时活动" + } + } + } }, "Large" : { "comment" : "Name of the \"Large\" Live Activity mode.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Groß" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "展开模式" + } + } + } }, "Small" : { "comment" : "Name of the \"Small\" Live Activity mode.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klein" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "紧凑模式" + } + } + } }, "Temp Basal Only" : { "comment" : "Title string for temp basal only dosing strategy", @@ -354,11 +516,33 @@ }, "Updated" : { "comment" : "Name of the \"Updated\" option in the Live Activity settings.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisiert" + } + } + } }, "Updated at" : { "comment" : "Label for the date and time when the last update was made.", - "isCommentAutoGenerated" : true + "isCommentAutoGenerated" : true, + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktualisiert um" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "更新于" + } + } + } } }, "version" : "1.1" diff --git a/WatchApp Extension/Localizable.xcstrings b/WatchApp Extension/Localizable.xcstrings index 6eea2af596..915596f446 100644 --- a/WatchApp Extension/Localizable.xcstrings +++ b/WatchApp Extension/Localizable.xcstrings @@ -798,7 +798,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "添加碳水化合物" + "value" : "添加碳水摄入" } } } @@ -2427,7 +2427,7 @@ "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "好的" + "value" : "OK" } } } From 6fc8e26cd9544e934616fbcf9ee05b551031cd27 Mon Sep 17 00:00:00 2001 From: Marion Barker <19607791+marionbarker@users.noreply.github.com> Date: Mon, 2 Feb 2026 16:35:33 -0800 Subject: [PATCH 29/41] Modify live activity (#2397) * improve large font display; * add section headings; * use short labels for display, long labels for description * Enable autoscaling in Live Activity widget to limit truncation * bug fix for plot using glucose color; author: bastiaanv --- .../Live Activity/BasalViewActivity.swift | 4 ++ .../Live Activity/ChartView.swift | 28 +++++++- Loop/Localizable.xcstrings | 38 +++++++++- .../LiveActivityBottomRowManagerView.swift | 31 ++++---- Loop/Views/LiveActivityManagementView.swift | 72 ++++++++++--------- LoopCore/LiveActivitySettings.swift | 32 ++++----- LoopCore/Localizable.xcstrings | 57 ++++++++++++--- 7 files changed, 185 insertions(+), 77 deletions(-) diff --git a/Loop Widget Extension/Live Activity/BasalViewActivity.swift b/Loop Widget Extension/Live Activity/BasalViewActivity.swift index 915335c5fb..4342100faa 100644 --- a/Loop Widget Extension/Live Activity/BasalViewActivity.swift +++ b/Loop Widget Extension/Live Activity/BasalViewActivity.swift @@ -25,10 +25,14 @@ struct BasalViewActivity: View { if let rateString = decimalFormatter.string(from: NSNumber(value: rate)) { Text("\(rateString)U") .font(.subheadline) + .minimumScaleFactor(0.5) + .lineLimit(2) } else { Text("-U") .font(.subheadline) + .minimumScaleFactor(0.5) + .lineLimit(2) } } } diff --git a/Loop Widget Extension/Live Activity/ChartView.swift b/Loop Widget Extension/Live Activity/ChartView.swift index b69bf3397c..d5a0aca0a6 100644 --- a/Loop Widget Extension/Live Activity/ChartView.swift +++ b/Loop Widget Extension/Live Activity/ChartView.swift @@ -17,6 +17,7 @@ struct ChartView: View { private let glucoseRanges: [GlucoseRangeValue] private let preset: Preset? private let yAxisMarks: [Double] + private let colorGradient: LinearGradient init(glucoseSamples: [GlucoseSampleAttributes], predicatedGlucose: [Double], predicatedStartDate: Date?, predicatedInterval: TimeInterval?, useLimits: Bool, lowerLimit: Double, upperLimit: Double, glucoseRanges: [GlucoseRangeValue], preset: Preset?, yAxisMarks: [Double]) { self.glucoseSampleData = ChartValues.convert(data: glucoseSamples, useLimits: useLimits, lowerLimit: lowerLimit, upperLimit: upperLimit) @@ -28,6 +29,7 @@ struct ChartView: View { lowerLimit: lowerLimit, upperLimit: upperLimit ) + self.colorGradient = ChartView.getGradient(useLimits: useLimits, lowerLimit: lowerLimit, upperLimit: upperLimit, highestValue: yAxisMarks.max() ?? 1) self.preset = preset self.glucoseRanges = glucoseRanges self.yAxisMarks = yAxisMarks @@ -39,6 +41,28 @@ struct ChartView: View { self.preset = preset self.glucoseRanges = glucoseRanges self.yAxisMarks = yAxisMarks + self.colorGradient = ChartView.getGradient(useLimits: useLimits, lowerLimit: lowerLimit, upperLimit: upperLimit, highestValue: yAxisMarks.max() ?? 1) + } + + private static func getGradient(useLimits: Bool, lowerLimit: Double, upperLimit: Double, highestValue: Double) -> LinearGradient { + var stops: [Gradient.Stop] = [Gradient.Stop(color: Color("glucose"), location: 0)] + if useLimits { + let lowerStop = lowerLimit / highestValue + let upperStop = upperLimit / highestValue + stops = [ + Gradient.Stop(color: .red, location: 0), + Gradient.Stop(color: .red, location: lowerStop - 0.01), + Gradient.Stop(color: .green, location: lowerStop), + Gradient.Stop(color: .green, location: upperStop), + Gradient.Stop(color: .orange, location: upperStop + 0.01), + Gradient.Stop(color: .orange, location: 600), // Just use the mg/dl limit for the most upper value + ] + } + return LinearGradient( + gradient: Gradient(stops: stops), + startPoint: .bottom, + endPoint: .top + ) } var body: some View { @@ -79,7 +103,7 @@ struct ChartView: View { y: .value("Glucose level", item.y) ) .lineStyle(StrokeStyle(lineWidth: 2, dash: [6, 5])) - .foregroundStyle(by: .value("Color", item.color)) + .foregroundStyle(colorGradient) } } .chartForegroundStyleScale([ @@ -144,7 +168,7 @@ struct ChartValues: Identifiable { return ChartValues( x: startDate.addingTimeInterval(interval * Double(index)), y: item, - color: !useLimits ? "Default" : item < lowerLimit ? "Low" : item > upperLimit ? "High" : "Good" + color: "Default" // Color is handled by the gradient ) } } diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 109b541fd4..fb33d3a80f 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -5323,6 +5323,7 @@ }, "Add item to bottom row" : { "comment" : "Title for Add item", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -5332,6 +5333,9 @@ } } }, + "Add item to Lock Screen / CarPlay display" : { + "comment" : "Title for Add item" + }, "Add Meal" : { "comment" : "The label of the carb entry button", "localizations" : { @@ -5459,6 +5463,7 @@ }, "Add predictive line" : { "comment" : "Title for predictive line toggle", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -9855,6 +9860,7 @@ }, "Bottom row" : { "comment" : "Live activity Bottom row configuration title", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -9872,6 +9878,7 @@ }, "Bottom row configuration" : { "comment" : "Title for Bottom row configuration", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -13152,6 +13159,13 @@ } } }, + "Configure Display" : { + "comment" : "Title for the view to configure the lock screen display" + }, + "Configure Lock Screen / Carplay Row" : { + "comment" : "A link that takes the user to a view where they can configure the display of the live activity screen on their lock screen and in CarPlay.", + "isCommentAutoGenerated" : true + }, "Continue" : { "comment" : "Button label for continue\nDefault alert dismissal", "localizations" : { @@ -16210,6 +16224,19 @@ } } }, + "Display colors for glucose" : { + "comment" : "Title for glucose coloring" + }, + "Display Control Options" : { + "comment" : "A section header in the live activity settings view, describing the control options for displaying glucose levels on the live activity screen.", + "isCommentAutoGenerated" : true + }, + "Display prediction in plot" : { + "comment" : "Title for prediction line toggle" + }, + "Display up to 4 items. Display label is in parentheses." : { + "comment" : "Indicates the maximum number of items that can be displayed and how the label for each item is shortened." + }, "Done" : { "localizations" : { "cs" : { @@ -23681,6 +23708,10 @@ } } }, + "Lock Screen / Dynamic Island / CarPlay" : { + "comment" : "The title of a section in the live activity settings view, related to lock screen, dynamic island, or carplay.", + "isCommentAutoGenerated" : true + }, "Log Dose" : { "comment" : "Button text to log a dose\nTitle for dose logging screen", "localizations" : { @@ -33105,6 +33136,10 @@ } } }, + "Select Lock Screen Display Options" : { + "comment" : "A section header for the lock screen display options.", + "isCommentAutoGenerated" : true + }, "Selecting a favorite food in the carb entry screen automatically fills in the carb quantity, food type, and absorption time fields! Tap the add button below to create your first favorite food!" : { "localizations" : { "da" : { @@ -38598,6 +38633,7 @@ }, "Use BG coloring" : { "comment" : "Title for BG coloring", + "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -41093,5 +41129,5 @@ } } }, - "version" : "1.0" + "version" : "1.1" } \ No newline at end of file diff --git a/Loop/Views/LiveActivityBottomRowManagerView.swift b/Loop/Views/LiveActivityBottomRowManagerView.swift index 85a45b017f..88731431ca 100644 --- a/Loop/Views/LiveActivityBottomRowManagerView.swift +++ b/Loop/Views/LiveActivityBottomRowManagerView.swift @@ -36,26 +36,27 @@ struct LiveActivityBottomRowManagerView: View { } buttons.append(.cancel(Text(NSLocalizedString("Cancel", comment: "Button text to cancel")))) - return ActionSheet(title: Text(NSLocalizedString("Add item to bottom row", comment: "Title for Add item")), buttons: buttons) + return ActionSheet(title: Text(NSLocalizedString("Add item to Lock Screen / CarPlay display", comment: "Title for Add item")), buttons: buttons) } var body: some View { List { - ForEach($configuration, id: \.self) { item in - HStack { - deleteButton - .onTapGesture { - onDelete(item.wrappedValue) - isDirty = configuration != previousConfiguration - } - Text(item.wrappedValue.description()) - - Spacer() - editBars + Section(header: Text("Display up to 4 items. Display label is in parentheses.", comment: "Indicates the maximum number of items that can be displayed and how the label for each item is shortened.")) { + ForEach($configuration, id: \.self) { item in + HStack { + deleteButton + .onTapGesture { + onDelete(item.wrappedValue) + isDirty = configuration != previousConfiguration + } + Text(item.wrappedValue.description()) + Spacer() + editBars + } } + .onMove(perform: onReorder) + .deleteDisabled(true) } - .onMove(perform: onReorder) - .deleteDisabled(true) Section { Button(action: onSave) { @@ -81,7 +82,7 @@ struct LiveActivityBottomRowManagerView: View { } .actionSheet(isPresented: $showAdd, content: { addItem }) .insetGroupedListStyle() - .navigationBarTitle(Text(NSLocalizedString("Bottom row", comment: "Live activity Bottom row configuration title"))) + .navigationBarTitle(Text(NSLocalizedString("Configure Display", comment: "Title for the view to configure the lock screen display"))) } @ViewBuilder diff --git a/Loop/Views/LiveActivityManagementView.swift b/Loop/Views/LiveActivityManagementView.swift index bdf87dc553..fac5576c55 100644 --- a/Loop/Views/LiveActivityManagementView.swift +++ b/Loop/Views/LiveActivityManagementView.swift @@ -21,12 +21,14 @@ struct LiveActivityManagementView: View { var body: some View { VStack { List { - Section { + Section(header: Text("Lock Screen / Dynamic Island / CarPlay")) { Toggle(NSLocalizedString("Enabled", comment: "Title for enable live activity toggle"), isOn: $viewModel.enabled) .onChange(of: viewModel.enabled) { _ in self.isDirty = previousViewModel.enabled != viewModel.enabled } - + } + + Section(header: Text("Select Lock Screen Display Options")){ ExpandableSetting( isEditing: $viewModel.isEditingMode, leadingValueContent: { @@ -48,50 +50,50 @@ struct LiveActivityManagementView: View { } } - Section { - if viewModel.mode == .large { - Toggle(NSLocalizedString("Add predictive line", comment: "Title for predictive line toggle"), isOn: $viewModel.addPredictiveLine) - .transition(.move(edge: viewModel.mode == .large ? .top : .bottom)) - .onChange(of: viewModel.addPredictiveLine) { _ in - self.isDirty = previousViewModel.addPredictiveLine != viewModel.addPredictiveLine - } - } + Section(header: Text("Display Control Options")) { + Toggle(NSLocalizedString("Display prediction in plot", comment: "Title for prediction line toggle"), isOn: $viewModel.addPredictiveLine) + .transition(.move(edge: viewModel.mode == .large ? .top : .bottom)) + .onChange(of: viewModel.addPredictiveLine) { _ in + self.isDirty = previousViewModel.addPredictiveLine != viewModel.addPredictiveLine + } - Toggle(NSLocalizedString("Use BG coloring", comment: "Title for BG coloring"), isOn: $viewModel.useLimits) + Toggle(NSLocalizedString("Display colors for glucose", comment: "Title for glucose coloring"), isOn: $viewModel.useLimits) .transition(.move(edge: viewModel.mode == .large ? .top : .bottom)) .onChange(of: viewModel.useLimits) { _ in self.isDirty = previousViewModel.useLimits != viewModel.useLimits } - if self.displayGlucosePreference.unit == .millimolesPerLiter { - TextInput(label: "Upper limit", value: $viewModel.upperLimitChartMmol) - .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) - .onChange(of: viewModel.upperLimitChartMmol) { _ in - self.isDirty = previousViewModel.upperLimitChartMmol != viewModel.upperLimitChartMmol - } - TextInput(label: "Lower limit", value: $viewModel.lowerLimitChartMmol) - .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) - .onChange(of: viewModel.lowerLimitChartMmol) { _ in - self.isDirty = previousViewModel.lowerLimitChartMmol != viewModel.lowerLimitChartMmol - } - } else { - TextInput(label: "Upper limit", value: $viewModel.upperLimitChartMg) - .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) - .onChange(of: viewModel.upperLimitChartMg) { _ in - self.isDirty = previousViewModel.upperLimitChartMg != viewModel.upperLimitChartMg - } - TextInput(label: "Lower limit", value: $viewModel.lowerLimitChartMg) - .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) - .onChange(of: viewModel.lowerLimitChartMg) { _ in - self.isDirty = previousViewModel.lowerLimitChartMg != viewModel.lowerLimitChartMg - } + if self.viewModel.useLimits { + if self.displayGlucosePreference.unit == .millimolesPerLiter { + TextInput(label: "Upper limit", value: $viewModel.upperLimitChartMmol) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.upperLimitChartMmol) { _ in + self.isDirty = previousViewModel.upperLimitChartMmol != viewModel.upperLimitChartMmol + } + TextInput(label: "Lower limit", value: $viewModel.lowerLimitChartMmol) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.lowerLimitChartMmol) { _ in + self.isDirty = previousViewModel.lowerLimitChartMmol != viewModel.lowerLimitChartMmol + } + } else { + TextInput(label: "Upper limit", value: $viewModel.upperLimitChartMg) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.upperLimitChartMg) { _ in + self.isDirty = previousViewModel.upperLimitChartMg != viewModel.upperLimitChartMg + } + TextInput(label: "Lower limit", value: $viewModel.lowerLimitChartMg) + .transition(.move(edge: viewModel.useLimits ? .top : .bottom)) + .onChange(of: viewModel.lowerLimitChartMg) { _ in + self.isDirty = previousViewModel.lowerLimitChartMg != viewModel.lowerLimitChartMg + } + } } } - Section { + Section(header: Text("Configure Lock Screen / Carplay Row")) { NavigationLink( destination: LiveActivityBottomRowManagerView(), - label: { Text(NSLocalizedString("Bottom row configuration", comment: "Title for Bottom row configuration")) } + label: { Text(NSLocalizedString("Configure Display", comment: "")) } ) } } diff --git a/LoopCore/LiveActivitySettings.swift b/LoopCore/LiveActivitySettings.swift index ef37a88f28..157fc05bc6 100644 --- a/LoopCore/LiveActivitySettings.swift +++ b/LoopCore/LiveActivitySettings.swift @@ -23,38 +23,38 @@ public enum BottomRowConfiguration: Codable { public func name() -> String { switch self { case .iob: - return NSLocalizedString("Active Insulin", comment: "") + return NSLocalizedString("IOB", comment: "Label used for the Insulin On Board value in the Live Activity view") case .cob: - return NSLocalizedString("Active Carbs", comment: "") + return NSLocalizedString("COB", comment: "Label used for the Carbohydrates On Board value in the Live Activity view") case .basal: - return NSLocalizedString("Basal", comment: "") + return NSLocalizedString("Basal", comment: "Label used for the Basal Rate plot in the Live Activity view") case .currentBg: - return NSLocalizedString("Current BG", comment: "") + return NSLocalizedString("Current BG", comment: "Label not shown in the Live Activity view") case .eventualBg: - return NSLocalizedString("Eventual BG", comment: "") + return NSLocalizedString("Eventual BG", comment: "Label used for the Forecasted Glucose in the Live Activity view") case .deltaBg: - return NSLocalizedString("Delta", comment: "") + return NSLocalizedString("Delta", comment: "Label used for the Delta Glucose in the Live Activity view") case .updatedAt: - return NSLocalizedString("Updated", comment: "") + return NSLocalizedString("at", comment: "Label used for the Updated time value in the Live Activity view") } } public func description() -> String { switch self { case .iob: - return NSLocalizedString("Active Insulin", comment: "") + return NSLocalizedString("Active Insulin (IOB)", comment: "Description for the Insulin On Board selection for the Live Activity configuration") case .cob: - return NSLocalizedString("Active Carbohydrates", comment: "") + return NSLocalizedString("Active Carbohydrates (COB)", comment: "Description for the Carbohydrates On Board selection for the Live Activity configuration") case .basal: - return NSLocalizedString("Basal", comment: "") + return NSLocalizedString("Relative Basal Rate (Basal)", comment: "Description for the Basal Rate plot selection for the Live Activity configuration") case .currentBg: - return NSLocalizedString("Current Glucose", comment: "") + return NSLocalizedString("Current Glucose (Value and Arrow)", comment: "Description for the Current Glucose selection for the Live Activity configuration") case .eventualBg: - return NSLocalizedString("Eventually", comment: "") + return NSLocalizedString("Forecasted Glucose (Eventual BG)", comment: "Description for the Forecasted Glucose selection for the Live Activity configuration") case .deltaBg: - return NSLocalizedString("Delta", comment: "") + return NSLocalizedString("Delta Glucose (Delta)", comment: "Description for the Delta Glucose selection for the Live Activity configuration") case .updatedAt: - return NSLocalizedString("Updated at", comment: "") + return NSLocalizedString("Updated (at)", comment: "Description for the Updated time selection for the Live Activity configuration") } } } @@ -71,9 +71,9 @@ public enum LiveActivityMode: Codable, CustomStringConvertible { public func name() -> String { switch self { case .large: - return NSLocalizedString("Large", comment: "") + return NSLocalizedString("Plot and Row", comment: "Short name to choose the Lock Screen display including the the plot") case .small: - return NSLocalizedString("Small", comment: "") + return NSLocalizedString("Row Only", comment: "Short name to choose the Lock Screen display without the plot") } } } diff --git a/LoopCore/Localizable.xcstrings b/LoopCore/Localizable.xcstrings index cc1c5c9b6d..32b19767a7 100644 --- a/LoopCore/Localizable.xcstrings +++ b/LoopCore/Localizable.xcstrings @@ -128,6 +128,7 @@ }, "Active Carbohydrates" : { "comment" : "Description of a bottom row configuration option for active carbohydrates.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -144,8 +145,12 @@ } } }, + "Active Carbohydrates (COB)" : { + "comment" : "Description for the Carbohydrates On Board selection for the Live Activity configuration" + }, "Active Carbs" : { "comment" : "Name of the \"Active Carbs\" option in the Live Activity settings.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -164,6 +169,7 @@ }, "Active Insulin" : { "comment" : "Name of the active insulin value in the bottom row.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -180,6 +186,12 @@ } } }, + "Active Insulin (IOB)" : { + "comment" : "Description for the Insulin On Board selection for the Live Activity configuration" + }, + "at" : { + "comment" : "Label used for the Updated time value in the Live Activity view" + }, "Automatic Bolus" : { "comment" : "Title string for automatic bolus dosing strategy", "localizations" : { @@ -270,8 +282,7 @@ } }, "Basal" : { - "comment" : "Name of the basal insulin rate.", - "isCommentAutoGenerated" : true, + "comment" : "Label used for the Basal Rate plot in the Live Activity view", "localizations" : { "de" : { "stringUnit" : { @@ -287,9 +298,11 @@ } } }, + "COB" : { + "comment" : "Label used for the Carbohydrates On Board value in the Live Activity view" + }, "Current BG" : { - "comment" : "Name of a bottom row item that shows the current blood glucose level.", - "isCommentAutoGenerated" : true, + "comment" : "Label not shown in the Live Activity view", "localizations" : { "de" : { "stringUnit" : { @@ -307,6 +320,7 @@ }, "Current Glucose" : { "comment" : "Description of a bottom row item that shows the current glucose level.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -323,9 +337,11 @@ } } }, + "Current Glucose (Value and Arrow)" : { + "comment" : "Description for the Current Glucose selection for the Live Activity configuration" + }, "Delta" : { - "comment" : "The name of the delta BG value.", - "isCommentAutoGenerated" : true, + "comment" : "Label used for the Delta Glucose in the Live Activity view", "localizations" : { "de" : { "stringUnit" : { @@ -335,9 +351,11 @@ } } }, + "Delta Glucose (Delta)" : { + "comment" : "Description for the Delta Glucose selection for the Live Activity configuration" + }, "Eventual BG" : { - "comment" : "Description of a bottom row configuration option for displaying the eventual glucose value.", - "isCommentAutoGenerated" : true, + "comment" : "Label used for the Forecasted Glucose in the Live Activity view", "localizations" : { "de" : { "stringUnit" : { @@ -355,6 +373,7 @@ }, "Eventually" : { "comment" : "Description of a glucose value that is expected to change in the future.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -371,6 +390,9 @@ } } }, + "Forecasted Glucose (Eventual BG)" : { + "comment" : "Description for the Forecasted Glucose selection for the Live Activity configuration" + }, "In which mode do you want to render the Live Activity" : { "comment" : "Description of a setting that allows the user to choose between a large or small display of the Live Activity.", "isCommentAutoGenerated" : true, @@ -389,8 +411,12 @@ } } }, + "IOB" : { + "comment" : "Label used for the Insulin On Board value in the Live Activity view" + }, "Large" : { "comment" : "Name of the \"Large\" Live Activity mode.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -407,8 +433,18 @@ } } }, + "Plot and Row" : { + "comment" : "Short name to choose the Lock Screen display including the the plot" + }, + "Relative Basal Rate (Basal)" : { + "comment" : "Description for the Basal Rate plot selection for the Live Activity configuration" + }, + "Row Only" : { + "comment" : "Short name to choose the Lock Screen display without the plot" + }, "Small" : { "comment" : "Name of the \"Small\" Live Activity mode.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -516,6 +552,7 @@ }, "Updated" : { "comment" : "Name of the \"Updated\" option in the Live Activity settings.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { @@ -526,8 +563,12 @@ } } }, + "Updated (at)" : { + "comment" : "Description for the Updated time selection for the Live Activity configuration" + }, "Updated at" : { "comment" : "Label for the date and time when the last update was made.", + "extractionState" : "stale", "isCommentAutoGenerated" : true, "localizations" : { "de" : { From b6e88416ba4862d6eed34ac2a4bb68255064def3 Mon Sep 17 00:00:00 2001 From: Marion Barker <19607791+marionbarker@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:49:06 -0800 Subject: [PATCH 30/41] Include submodule SHA in LoopWorkspace build details (#2399) --- Common/Models/BuildDetails.swift | 15 +++++++++ Loop/Managers/DeviceDataManager.swift | 15 ++++++--- Scripts/capture-build-details.sh | 46 +++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 4 deletions(-) diff --git a/Common/Models/BuildDetails.swift b/Common/Models/BuildDetails.swift index 4a1a1894fc..b71e265885 100644 --- a/Common/Models/BuildDetails.swift +++ b/Common/Models/BuildDetails.swift @@ -65,5 +65,20 @@ class BuildDetails { var workspaceGitBranch: String? { return dict["com-loopkit-LoopWorkspace-git-branch"] as? String } + + /// Returns a dictionary of submodule details. + /// The keys are the submodule names, and the values are tuples (branch, commitSHA). + var submodules: [String: (branch: String, commitSHA: String)] { + guard let subs = dict["com-loopkit-Loop-submodules"] as? [String: [String: Any]] else { + return [:] + } + var result = [String: (branch: String, commitSHA: String)]() + for (name, info) in subs { + let branch = info["branch"] as? String ?? String(localized: "Unknown") + let commitSHA = info["commit_sha"] as? String ?? String(localized: "Unknown") + result[name] = (branch: branch, commitSHA: commitSHA) + } + return result + } } diff --git a/Loop/Managers/DeviceDataManager.swift b/Loop/Managers/DeviceDataManager.swift index 2751f18f50..e928c5e2d0 100644 --- a/Loop/Managers/DeviceDataManager.swift +++ b/Loop/Managers/DeviceDataManager.swift @@ -1700,17 +1700,24 @@ extension DeviceDataManager: DeviceSupportDelegate { deviceLogReport = entries.map { "* \($0.timestamp) \($0.managerIdentifier) \($0.deviceIdentifier ?? "") \($0.type) \($0.message)" }.joined(separator: "\n") } + let submodulesInfo = BuildDetails.default.submodules + .sorted(by: { $0.key < $1.key }) + .map { key, value in + "* \(key): \(value.branch), \(value.commitSHA)" + } + .joined(separator: "\n") + let report = [ "## Build Details", "* appNameAndVersion: \(Bundle.main.localizedNameAndVersion)", "* profileExpiration: \(BuildDetails.default.profileExpirationString)", - "* gitRevision: \(BuildDetails.default.gitRevision ?? "N/A")", - "* gitBranch: \(BuildDetails.default.gitBranch ?? "N/A")", - "* workspaceGitRevision: \(BuildDetails.default.workspaceGitRevision ?? "N/A")", - "* workspaceGitBranch: \(BuildDetails.default.workspaceGitBranch ?? "N/A")", "* sourceRoot: \(BuildDetails.default.sourceRoot ?? "N/A")", "* buildDateString: \(BuildDetails.default.buildDateString ?? "N/A")", "* xcodeVersion: \(BuildDetails.default.xcodeVersion ?? "N/A")", + "* Workspace branch: \(BuildDetails.default.workspaceGitBranch ?? "N/A")", + "* Workspace SHA: \(BuildDetails.default.workspaceGitRevision ?? "N/A")", + "* Submodule name: branch, SHA", + "\(submodulesInfo)", "", "## FeatureFlags", "\(FeatureFlags)", diff --git a/Scripts/capture-build-details.sh b/Scripts/capture-build-details.sh index 07aab04a17..2393e5afa4 100755 --- a/Scripts/capture-build-details.sh +++ b/Scripts/capture-build-details.sh @@ -100,3 +100,49 @@ then fi popd . > /dev/null fi + +# --- Root repo details --- +# Retrieve current branch (or tag) and commit SHA. +git_branch=$(git symbolic-ref --short -q HEAD || echo "") +git_tag=$(git describe --tags --exact-match 2>/dev/null || echo "") +git_commit_sha=$(git log -1 --format="%h" --abbrev=7) +git_branch_or_tag="${git_branch:-${git_tag}}" +if [ -z "${git_branch_or_tag}" ]; then + git_branch_or_tag="detached" +fi + +plutil -replace com-loopkit-Loop-branch -string "${git_branch_or_tag}" "${info_plist_path}" +plutil -replace com-loopkit-Loop-commit-sha -string "${git_commit_sha}" "${info_plist_path}" + +# --- Submodule details --- +# Remove an existing submodules key if it exists, then create an empty dictionary. +# (Using PlistBuddy, which is available on macOS) +submodules_key="com-loopkit-Loop-submodules" +if /usr/libexec/PlistBuddy -c "Print :${submodules_key}" "${info_plist_path}" 2>/dev/null; then + /usr/libexec/PlistBuddy -c "Delete :${submodules_key}" "${info_plist_path}" +fi +/usr/libexec/PlistBuddy -c "Add :${submodules_key} dict" "${info_plist_path}" + +# Gather submodule details. +# We use git submodule foreach to output lines in the form: +# submodule_name|branch_or_tag|commit_sha +submodules_info=$(git submodule foreach --quiet ' + sub_git_branch=$(git symbolic-ref --short -q HEAD || echo "") + sub_git_tag=$(git describe --tags --exact-match 2>/dev/null || echo "") + sub_git_commit_sha=$(git log -1 --format="%h" --abbrev=7) + sub_git_branch_or_tag="${sub_git_branch:-${sub_git_tag}}" + if [ -z "${sub_git_branch_or_tag}" ]; then + sub_git_branch_or_tag="detached" + fi + echo "$name|$sub_git_branch_or_tag|$sub_git_commit_sha" +') + +# For each line, add a dictionary entry for that submodule. +echo "${submodules_info}" | while IFS="|" read -r submodule_name sub_branch sub_sha; do + # Create a dictionary for this submodule + /usr/libexec/PlistBuddy -c "Add :${submodules_key}:${submodule_name} dict" "${info_plist_path}" + /usr/libexec/PlistBuddy -c "Add :${submodules_key}:${submodule_name}:branch string ${sub_branch}" "${info_plist_path}" + /usr/libexec/PlistBuddy -c "Add :${submodules_key}:${submodule_name}:commit_sha string ${sub_sha}" "${info_plist_path}" +done + +echo "BuildDetails.plist has been updated at: ${info_plist_path}" \ No newline at end of file From 217a0b4c0d37810fbcd0b17cd21859effc23e132 Mon Sep 17 00:00:00 2001 From: Taylor Date: Sun, 8 Feb 2026 15:27:51 -0800 Subject: [PATCH 31/41] Add FoodFinder feature: AI-powered food identification for carb entry FoodFinder adds barcode scanning, AI camera analysis, voice search, and text-based food lookup to Loop's carb entry workflow. All feature code lives in dedicated FoodFinder/ subdirectories with FoodFinder_ prefixed filenames for clean isolation and portability to other Loop forks. Integration touchpoints: ~29 lines across 3 existing files (CarbEntryView, SettingsView, FavoriteFoodDetailView). Feature is controlled by a single toggle in FoodFinder_FeatureFlags.swift. New files: 34 (11 views, 3 models, 13 services, 2 view models, 1 feature flags, 1 documentation, 3 tests) --- Loop.xcodeproj/project.pbxproj | 211 + .../FoodFinder/FoodFinder_README.md | 99 + .../Models/FoodFinder/FoodFinder_Models.swift | 456 ++ .../FoodFinder/FoodFinder_ScanResult.swift | 99 + .../FoodFinder/FoodFinder_VoiceResult.swift | 134 + .../FoodFinder/FoodFinder_FeatureFlags.swift | 377 ++ .../FoodFinder/FoodFinder_AIAnalysis.swift | 4854 +++++++++++++++++ .../FoodFinder_AIProviderConfig.swift | 211 + .../FoodFinder_AIServiceAdapter.swift | 87 + .../FoodFinder_AIServiceManager.swift | 466 ++ .../FoodFinder_AISettingsManager.swift | 72 + .../FoodFinder/FoodFinder_BYOTestConfig.swift | 34 + .../FoodFinder/FoodFinder_EmojiProvider.swift | 81 + .../FoodFinder_ImageDownloader.swift | 38 + .../FoodFinder/FoodFinder_ImageStore.swift | 69 + .../FoodFinder_OpenFoodFactsService.swift | 332 ++ .../FoodFinder_ScannerService.swift | 1422 +++++ .../FoodFinder/FoodFinder_SearchRouter.swift | 219 + .../FoodFinder/FoodFinder_VoiceService.swift | 361 ++ .../FoodFinder_FavoritesViewModel.swift | 118 + .../FoodFinder_SearchViewModel.swift | 1587 ++++++ Loop/Views/CarbEntryView.swift | 13 +- Loop/Views/FavoriteFoodDetailView.swift | 5 + .../FoodFinder/FoodFinder_AICameraView.swift | 610 +++ .../FoodFinder/FoodFinder_EntryPoint.swift | 1987 +++++++ .../FoodFinder_FavoriteDetailView.swift | 56 + .../FoodFinder_FavoriteEditView.swift | 23 + .../FoodFinder/FoodFinder_FavoritesView.swift | 25 + .../FoodFinder_ProviderEditView.swift | 249 + .../FoodFinder/FoodFinder_ScannerView.swift | 721 +++ .../FoodFinder/FoodFinder_SearchBar.swift | 226 + .../FoodFinder_SearchResultsView.swift | 466 ++ .../FoodFinder/FoodFinder_SettingsView.swift | 727 +++ .../FoodFinder_VoiceSearchView.swift | 328 ++ Loop/Views/SettingsView.swift | 20 +- .../FoodFinder_BarcodeScannerTests.swift | 240 + .../FoodFinder_OpenFoodFactsTests.swift | 403 ++ .../FoodFinder_VoiceSearchTests.swift | 327 ++ 38 files changed, 17751 insertions(+), 2 deletions(-) create mode 100644 Loop/Documentation/FoodFinder/FoodFinder_README.md create mode 100644 Loop/Models/FoodFinder/FoodFinder_Models.swift create mode 100644 Loop/Models/FoodFinder/FoodFinder_ScanResult.swift create mode 100644 Loop/Models/FoodFinder/FoodFinder_VoiceResult.swift create mode 100644 Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_AIAnalysis.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_AIProviderConfig.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_AIServiceAdapter.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_AIServiceManager.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_AISettingsManager.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_BYOTestConfig.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_EmojiProvider.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_ImageDownloader.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_ImageStore.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_OpenFoodFactsService.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_ScannerService.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_VoiceService.swift create mode 100644 Loop/View Models/FoodFinder/FoodFinder_FavoritesViewModel.swift create mode 100644 Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_AICameraView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_FavoriteDetailView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_FavoriteEditView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_FavoritesView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_ProviderEditView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_ScannerView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_SearchBar.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_SearchResultsView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_SettingsView.swift create mode 100644 Loop/Views/FoodFinder/FoodFinder_VoiceSearchView.swift create mode 100644 LoopTests/FoodFinder/FoodFinder_BarcodeScannerTests.swift create mode 100644 LoopTests/FoodFinder/FoodFinder_OpenFoodFactsTests.swift create mode 100644 LoopTests/FoodFinder/FoodFinder_VoiceSearchTests.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 4767ba3142..00e523273c 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -588,6 +588,39 @@ E9C58A7E24DB529A00487A17 /* dynamic_glucose_effect_partially_observed.json in Resources */ = {isa = PBXBuildFile; fileRef = E9C58A7924DB529A00487A17 /* dynamic_glucose_effect_partially_observed.json */; }; E9C58A7F24DB529A00487A17 /* counteraction_effect_falling_glucose.json in Resources */ = {isa = PBXBuildFile; fileRef = E9C58A7A24DB529A00487A17 /* counteraction_effect_falling_glucose.json */; }; E9C58A8024DB529A00487A17 /* insulin_effect.json in Resources */ = {isa = PBXBuildFile; fileRef = E9C58A7B24DB529A00487A17 /* insulin_effect.json */; }; + 4ADE6D4C8369070CDA50400F /* FoodFinder_AIAnalysis.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB0B8A051FB97720D029D74 /* FoodFinder_AIAnalysis.swift */; }; + EF134BD7F1B6F20BFF523625 /* FoodFinder_AICameraView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04BA0B00F58C59F64EEE46FF /* FoodFinder_AICameraView.swift */; }; + 6F86CED6E856EC572B1EC890 /* FoodFinder_AIProviderConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0991C859E0D9DE159DCB2B70 /* FoodFinder_AIProviderConfig.swift */; }; + 69A01BCB43357C948E70ED96 /* FoodFinder_AIServiceAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F58A7DE6D538296D6AB40C4F /* FoodFinder_AIServiceAdapter.swift */; }; + FE95CECF46CEFDBB64EE2F21 /* FoodFinder_AIServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989A22CEF0D185799695F34B /* FoodFinder_AIServiceManager.swift */; }; + AB2C35130504788BD546643A /* FoodFinder_AISettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84212082ACB37FB8CEF0E2E /* FoodFinder_AISettingsManager.swift */; }; + D7C66BA594FCA0E48D43E1C0 /* FoodFinder_BYOTestConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C2279FEC72E126C7BEB1469 /* FoodFinder_BYOTestConfig.swift */; }; + 9B8960934E11016BD5A3C893 /* FoodFinder_BarcodeScannerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1A7D02D25418CA0A4DEAC0C /* FoodFinder_BarcodeScannerTests.swift */; }; + 309660119104ABF9C7692F02 /* FoodFinder_EmojiProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831C0B7CE3534010D621E7D0 /* FoodFinder_EmojiProvider.swift */; }; + 10B625A9FF1939614C2E99F7 /* FoodFinder_EntryPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94FAA6B5BFCA71FA1330CF5D /* FoodFinder_EntryPoint.swift */; }; + B1C1213CB12147B9D4D05EC4 /* FoodFinder_FavoriteDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6707F8B83849294382C4611C /* FoodFinder_FavoriteDetailView.swift */; }; + A27AE08C7CB6B008AEC1DF28 /* FoodFinder_FavoriteEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81480C6E3BECC2592D76F682 /* FoodFinder_FavoriteEditView.swift */; }; + 3DFA8C7A90C8DB836DD03CF1 /* FoodFinder_FavoritesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8743F436888BCCBD8396EA4D /* FoodFinder_FavoritesView.swift */; }; + A9AD1814AE2FE57ED7B36FD7 /* FoodFinder_FavoritesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 833B4620CCB49FA482B9F193 /* FoodFinder_FavoritesViewModel.swift */; }; + D9135D81AB12551A8AA150B0 /* FoodFinder_FeatureFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E000C525103B3F398BFC7CF /* FoodFinder_FeatureFlags.swift */; }; + D10F2609416CC339056236D8 /* FoodFinder_ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB00FF448F43B860CCD3B02 /* FoodFinder_ImageDownloader.swift */; }; + A8BD0FB89E1131F1BB986DA7 /* FoodFinder_ImageStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDF09B9DFA98A7C6DFE74B0 /* FoodFinder_ImageStore.swift */; }; + 3A7FBD5751DA0C1FB71B9026 /* FoodFinder_Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F161EF31970B55337F735E3 /* FoodFinder_Models.swift */; }; + 88F5D0DB050CCE93047EEB3D /* FoodFinder_OpenFoodFactsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF37556B4222F9A8C4DE71F /* FoodFinder_OpenFoodFactsService.swift */; }; + 823DED9A0D02CE040129F44E /* FoodFinder_OpenFoodFactsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF9A0E97314FFA90A57CE52 /* FoodFinder_OpenFoodFactsTests.swift */; }; + F4690B9F1011E2C935EE8EAA /* FoodFinder_ProviderEditView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739AA26CE25E31CDAEE5E84E /* FoodFinder_ProviderEditView.swift */; }; + DB2924254B04A61DD85837B1 /* FoodFinder_ScanResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF626F104EF8C2DAB56649FE /* FoodFinder_ScanResult.swift */; }; + 7CBD007CCDD32E082E9EA102 /* FoodFinder_ScannerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6240EC27B0D884EAED8B69B /* FoodFinder_ScannerService.swift */; }; + 704708A8CA57CB4B57789F7E /* FoodFinder_ScannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F62E1AC96EEC1636891E430C /* FoodFinder_ScannerView.swift */; }; + D181D365BA54F7E3926115DC /* FoodFinder_SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FD9381A53A1E185D80B30CA /* FoodFinder_SearchBar.swift */; }; + B16B5044F3F8C6E4A64412E2 /* FoodFinder_SearchResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B08D4291FDCDFC7C7BAFD3 /* FoodFinder_SearchResultsView.swift */; }; + 0554D705FF430883137BC1FC /* FoodFinder_SearchRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C5428F178A79D0F8CCCB924 /* FoodFinder_SearchRouter.swift */; }; + 58025D9118141CFD4795AC77 /* FoodFinder_SearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BCE03EF68400B04EB0F4B8E /* FoodFinder_SearchViewModel.swift */; }; + AE044B49C4304BF854008ACD /* FoodFinder_SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1826A5E84E92965E0E72BF /* FoodFinder_SettingsView.swift */; }; + 9898D5C1255F7039ED26B6E8 /* FoodFinder_VoiceResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D45A9E463487CDFE2B58C3E /* FoodFinder_VoiceResult.swift */; }; + 47448AE2656870E8609E484C /* FoodFinder_VoiceSearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B58807669E37BAD702BA94 /* FoodFinder_VoiceSearchTests.swift */; }; + 29730F11C80A5D2A065FE671 /* FoodFinder_VoiceSearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC2B41F72DAC473656BCFA6 /* FoodFinder_VoiceSearchView.swift */; }; + 18A56885FD960F7E45AE2C39 /* FoodFinder_VoiceService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16CAFD38F7A4EC9387C0AE70 /* FoodFinder_VoiceService.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1409,6 +1442,40 @@ F5E0BDD827E1D71E0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; F5E0BDDA27E1D71F0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDE327E1D7230033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; + DFB0B8A051FB97720D029D74 /* FoodFinder_AIAnalysis.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_AIAnalysis.swift; sourceTree = ""; }; + 04BA0B00F58C59F64EEE46FF /* FoodFinder_AICameraView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_AICameraView.swift; sourceTree = ""; }; + 0991C859E0D9DE159DCB2B70 /* FoodFinder_AIProviderConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_AIProviderConfig.swift; sourceTree = ""; }; + F58A7DE6D538296D6AB40C4F /* FoodFinder_AIServiceAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_AIServiceAdapter.swift; sourceTree = ""; }; + 989A22CEF0D185799695F34B /* FoodFinder_AIServiceManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_AIServiceManager.swift; sourceTree = ""; }; + B84212082ACB37FB8CEF0E2E /* FoodFinder_AISettingsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_AISettingsManager.swift; sourceTree = ""; }; + 7C2279FEC72E126C7BEB1469 /* FoodFinder_BYOTestConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_BYOTestConfig.swift; sourceTree = ""; }; + C1A7D02D25418CA0A4DEAC0C /* FoodFinder_BarcodeScannerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_BarcodeScannerTests.swift; sourceTree = ""; }; + 831C0B7CE3534010D621E7D0 /* FoodFinder_EmojiProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_EmojiProvider.swift; sourceTree = ""; }; + 94FAA6B5BFCA71FA1330CF5D /* FoodFinder_EntryPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_EntryPoint.swift; sourceTree = ""; }; + 6707F8B83849294382C4611C /* FoodFinder_FavoriteDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_FavoriteDetailView.swift; sourceTree = ""; }; + 81480C6E3BECC2592D76F682 /* FoodFinder_FavoriteEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_FavoriteEditView.swift; sourceTree = ""; }; + 8743F436888BCCBD8396EA4D /* FoodFinder_FavoritesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_FavoritesView.swift; sourceTree = ""; }; + 833B4620CCB49FA482B9F193 /* FoodFinder_FavoritesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_FavoritesViewModel.swift; sourceTree = ""; }; + 6E000C525103B3F398BFC7CF /* FoodFinder_FeatureFlags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_FeatureFlags.swift; sourceTree = ""; }; + 0AB00FF448F43B860CCD3B02 /* FoodFinder_ImageDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_ImageDownloader.swift; sourceTree = ""; }; + 6CDF09B9DFA98A7C6DFE74B0 /* FoodFinder_ImageStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_ImageStore.swift; sourceTree = ""; }; + 7F161EF31970B55337F735E3 /* FoodFinder_Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_Models.swift; sourceTree = ""; }; + EDF37556B4222F9A8C4DE71F /* FoodFinder_OpenFoodFactsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_OpenFoodFactsService.swift; sourceTree = ""; }; + 1AF9A0E97314FFA90A57CE52 /* FoodFinder_OpenFoodFactsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_OpenFoodFactsTests.swift; sourceTree = ""; }; + 739AA26CE25E31CDAEE5E84E /* FoodFinder_ProviderEditView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_ProviderEditView.swift; sourceTree = ""; }; + 02B849EB59DCD6406AC545BE /* FoodFinder_README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = FoodFinder_README.md; sourceTree = ""; }; + BF626F104EF8C2DAB56649FE /* FoodFinder_ScanResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_ScanResult.swift; sourceTree = ""; }; + B6240EC27B0D884EAED8B69B /* FoodFinder_ScannerService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_ScannerService.swift; sourceTree = ""; }; + F62E1AC96EEC1636891E430C /* FoodFinder_ScannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_ScannerView.swift; sourceTree = ""; }; + 8FD9381A53A1E185D80B30CA /* FoodFinder_SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_SearchBar.swift; sourceTree = ""; }; + 02B08D4291FDCDFC7C7BAFD3 /* FoodFinder_SearchResultsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_SearchResultsView.swift; sourceTree = ""; }; + 6C5428F178A79D0F8CCCB924 /* FoodFinder_SearchRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_SearchRouter.swift; sourceTree = ""; }; + 2BCE03EF68400B04EB0F4B8E /* FoodFinder_SearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_SearchViewModel.swift; sourceTree = ""; }; + 2F1826A5E84E92965E0E72BF /* FoodFinder_SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_SettingsView.swift; sourceTree = ""; }; + 8D45A9E463487CDFE2B58C3E /* FoodFinder_VoiceResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_VoiceResult.swift; sourceTree = ""; }; + F7B58807669E37BAD702BA94 /* FoodFinder_VoiceSearchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_VoiceSearchTests.swift; sourceTree = ""; }; + 6AC2B41F72DAC473656BCFA6 /* FoodFinder_VoiceSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_VoiceSearchView.swift; sourceTree = ""; }; + 16CAFD38F7A4EC9387C0AE70 /* FoodFinder_VoiceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FoodFinder_VoiceService.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1675,6 +1742,7 @@ C1E3862428247B7100F561A4 /* StoredLoopNotRunningNotification.swift */, 4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */, A987CD4824A58A0100439ADC /* ZipArchive.swift */, + 2C4061FC203783D99294F985 /* FoodFinder */, ); path = Models; sourceTree = ""; @@ -1699,6 +1767,7 @@ 43776F8D1B8022E90074EA36 /* Products */, 437D9BA11D7B5203007245E8 /* Loop.xcconfig */, A951C5FF23E8AB51003E26DC /* Version.xcconfig */, + 93F4741D9B20D83B5B586D72 /* FoodFinder */, ); sourceTree = ""; }; @@ -1741,6 +1810,7 @@ 43F5C2CE1B92A2A0003EB13D /* View Controllers */, 43F5C2CF1B92A2ED003EB13D /* Views */, 897A5A9724C22DCE00C4E71D /* View Models */, + 88C428BA6D11553B8D7CF090 /* FoodFinder */, ); path = Loop; sourceTree = ""; @@ -1994,6 +2064,7 @@ C1AF062229426300002C1B19 /* ManualGlucoseEntryRow.swift */, DDC389FD2A2C4C830066E2E8 /* GlucoseBasedApplicationFactorSelectionView.swift */, DD3DBD282A33AFE9000F8B5B /* IntegralRetrospectiveCorrectionSelectionView.swift */, + 8220132054FB912DFADFA1FD /* FoodFinder */, ); path = Views; sourceTree = ""; @@ -2660,6 +2731,113 @@ path = Fixtures; sourceTree = ""; }; + 8220132054FB912DFADFA1FD /* FoodFinder */ = { + isa = PBXGroup; + children = ( + 04BA0B00F58C59F64EEE46FF /* FoodFinder_AICameraView.swift */, + 94FAA6B5BFCA71FA1330CF5D /* FoodFinder_EntryPoint.swift */, + 6707F8B83849294382C4611C /* FoodFinder_FavoriteDetailView.swift */, + 81480C6E3BECC2592D76F682 /* FoodFinder_FavoriteEditView.swift */, + 8743F436888BCCBD8396EA4D /* FoodFinder_FavoritesView.swift */, + 739AA26CE25E31CDAEE5E84E /* FoodFinder_ProviderEditView.swift */, + F62E1AC96EEC1636891E430C /* FoodFinder_ScannerView.swift */, + 8FD9381A53A1E185D80B30CA /* FoodFinder_SearchBar.swift */, + 02B08D4291FDCDFC7C7BAFD3 /* FoodFinder_SearchResultsView.swift */, + 2F1826A5E84E92965E0E72BF /* FoodFinder_SettingsView.swift */, + 6AC2B41F72DAC473656BCFA6 /* FoodFinder_VoiceSearchView.swift */, + ); + path = FoodFinder; + sourceTree = ""; + }; + 2C4061FC203783D99294F985 /* FoodFinder */ = { + isa = PBXGroup; + children = ( + 7F161EF31970B55337F735E3 /* FoodFinder_Models.swift */, + BF626F104EF8C2DAB56649FE /* FoodFinder_ScanResult.swift */, + 8D45A9E463487CDFE2B58C3E /* FoodFinder_VoiceResult.swift */, + ); + path = FoodFinder; + sourceTree = ""; + }; + 3007854D1E2C462A43BB49EA /* FoodFinder */ = { + isa = PBXGroup; + children = ( + DFB0B8A051FB97720D029D74 /* FoodFinder_AIAnalysis.swift */, + 0991C859E0D9DE159DCB2B70 /* FoodFinder_AIProviderConfig.swift */, + F58A7DE6D538296D6AB40C4F /* FoodFinder_AIServiceAdapter.swift */, + 989A22CEF0D185799695F34B /* FoodFinder_AIServiceManager.swift */, + B84212082ACB37FB8CEF0E2E /* FoodFinder_AISettingsManager.swift */, + 7C2279FEC72E126C7BEB1469 /* FoodFinder_BYOTestConfig.swift */, + 831C0B7CE3534010D621E7D0 /* FoodFinder_EmojiProvider.swift */, + 0AB00FF448F43B860CCD3B02 /* FoodFinder_ImageDownloader.swift */, + 6CDF09B9DFA98A7C6DFE74B0 /* FoodFinder_ImageStore.swift */, + EDF37556B4222F9A8C4DE71F /* FoodFinder_OpenFoodFactsService.swift */, + B6240EC27B0D884EAED8B69B /* FoodFinder_ScannerService.swift */, + 6C5428F178A79D0F8CCCB924 /* FoodFinder_SearchRouter.swift */, + 16CAFD38F7A4EC9387C0AE70 /* FoodFinder_VoiceService.swift */, + ); + path = FoodFinder; + sourceTree = ""; + }; + 9C035E7454E6255EF4EA445C /* Services */ = { + isa = PBXGroup; + children = ( + 3007854D1E2C462A43BB49EA /* FoodFinder */, + ); + path = Services; + sourceTree = ""; + }; + 88C428BA6D11553B8D7CF090 /* FoodFinder */ = { + isa = PBXGroup; + children = ( + 833B4620CCB49FA482B9F193 /* FoodFinder_FavoritesViewModel.swift */, + 2BCE03EF68400B04EB0F4B8E /* FoodFinder_SearchViewModel.swift */, + ); + path = FoodFinder; + sourceTree = ""; + }; + 8C92ACBE693772D89D0718B8 /* FoodFinder */ = { + isa = PBXGroup; + children = ( + 6E000C525103B3F398BFC7CF /* FoodFinder_FeatureFlags.swift */, + ); + path = FoodFinder; + sourceTree = ""; + }; + AE59D88C5460D2413CB142C1 /* Resources */ = { + isa = PBXGroup; + children = ( + 8C92ACBE693772D89D0718B8 /* FoodFinder */, + ); + path = Resources; + sourceTree = ""; + }; + 93F4741D9B20D83B5B586D72 /* FoodFinder */ = { + isa = PBXGroup; + children = ( + C1A7D02D25418CA0A4DEAC0C /* FoodFinder_BarcodeScannerTests.swift */, + 1AF9A0E97314FFA90A57CE52 /* FoodFinder_OpenFoodFactsTests.swift */, + F7B58807669E37BAD702BA94 /* FoodFinder_VoiceSearchTests.swift */, + ); + path = FoodFinder; + sourceTree = ""; + }; + 050C078CB7ED1CC29B82B708 /* FoodFinder */ = { + isa = PBXGroup; + children = ( + 02B849EB59DCD6406AC545BE /* FoodFinder_README.md */, + ); + path = FoodFinder; + sourceTree = ""; + }; + 4E509264CB37CD931DE5B407 /* Documentation */ = { + isa = PBXGroup; + children = ( + 050C078CB7ED1CC29B82B708 /* FoodFinder */, + ); + path = Documentation; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -3576,6 +3754,36 @@ 7E69CFFC2A16A77E00203CBD /* ResetLoopManager.swift in Sources */, B40D07C7251A89D500C1C6D7 /* GlucoseDisplay.swift in Sources */, 43C2FAE11EB656A500364AFF /* GlucoseEffectVelocity.swift in Sources */, + 4ADE6D4C8369070CDA50400F /* FoodFinder_AIAnalysis.swift in Sources */, + EF134BD7F1B6F20BFF523625 /* FoodFinder_AICameraView.swift in Sources */, + 6F86CED6E856EC572B1EC890 /* FoodFinder_AIProviderConfig.swift in Sources */, + 69A01BCB43357C948E70ED96 /* FoodFinder_AIServiceAdapter.swift in Sources */, + FE95CECF46CEFDBB64EE2F21 /* FoodFinder_AIServiceManager.swift in Sources */, + AB2C35130504788BD546643A /* FoodFinder_AISettingsManager.swift in Sources */, + D7C66BA594FCA0E48D43E1C0 /* FoodFinder_BYOTestConfig.swift in Sources */, + 309660119104ABF9C7692F02 /* FoodFinder_EmojiProvider.swift in Sources */, + 10B625A9FF1939614C2E99F7 /* FoodFinder_EntryPoint.swift in Sources */, + B1C1213CB12147B9D4D05EC4 /* FoodFinder_FavoriteDetailView.swift in Sources */, + A27AE08C7CB6B008AEC1DF28 /* FoodFinder_FavoriteEditView.swift in Sources */, + 3DFA8C7A90C8DB836DD03CF1 /* FoodFinder_FavoritesView.swift in Sources */, + A9AD1814AE2FE57ED7B36FD7 /* FoodFinder_FavoritesViewModel.swift in Sources */, + D9135D81AB12551A8AA150B0 /* FoodFinder_FeatureFlags.swift in Sources */, + D10F2609416CC339056236D8 /* FoodFinder_ImageDownloader.swift in Sources */, + A8BD0FB89E1131F1BB986DA7 /* FoodFinder_ImageStore.swift in Sources */, + 3A7FBD5751DA0C1FB71B9026 /* FoodFinder_Models.swift in Sources */, + 88F5D0DB050CCE93047EEB3D /* FoodFinder_OpenFoodFactsService.swift in Sources */, + F4690B9F1011E2C935EE8EAA /* FoodFinder_ProviderEditView.swift in Sources */, + DB2924254B04A61DD85837B1 /* FoodFinder_ScanResult.swift in Sources */, + 7CBD007CCDD32E082E9EA102 /* FoodFinder_ScannerService.swift in Sources */, + 704708A8CA57CB4B57789F7E /* FoodFinder_ScannerView.swift in Sources */, + D181D365BA54F7E3926115DC /* FoodFinder_SearchBar.swift in Sources */, + B16B5044F3F8C6E4A64412E2 /* FoodFinder_SearchResultsView.swift in Sources */, + 0554D705FF430883137BC1FC /* FoodFinder_SearchRouter.swift in Sources */, + 58025D9118141CFD4795AC77 /* FoodFinder_SearchViewModel.swift in Sources */, + AE044B49C4304BF854008ACD /* FoodFinder_SettingsView.swift in Sources */, + 9898D5C1255F7039ED26B6E8 /* FoodFinder_VoiceResult.swift in Sources */, + 29730F11C80A5D2A065FE671 /* FoodFinder_VoiceSearchView.swift in Sources */, + 18A56885FD960F7E45AE2C39 /* FoodFinder_VoiceService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3758,6 +3966,9 @@ C1900900252271BB00721625 /* SimpleBolusCalculatorTests.swift in Sources */, A9C1719725366F780053BCBD /* WatchHistoricalGlucoseTest.swift in Sources */, E93E86B224DDE21D00FF40C8 /* MockCarbStore.swift in Sources */, + 9B8960934E11016BD5A3C893 /* FoodFinder_BarcodeScannerTests.swift in Sources */, + 823DED9A0D02CE040129F44E /* FoodFinder_OpenFoodFactsTests.swift in Sources */, + 47448AE2656870E8609E484C /* FoodFinder_VoiceSearchTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Loop/Documentation/FoodFinder/FoodFinder_README.md b/Loop/Documentation/FoodFinder/FoodFinder_README.md new file mode 100644 index 0000000000..03b9c923ff --- /dev/null +++ b/Loop/Documentation/FoodFinder/FoodFinder_README.md @@ -0,0 +1,99 @@ +# FoodFinder for Loop + +FoodFinder adds AI-powered food identification and nutrition lookup to Loop's carb entry workflow. It supports barcode scanning (via OpenFoodFacts), AI camera analysis, voice search, and text-based food search — all integrated with a minimal footprint into Loop's existing codebase. + +## Features + +- **Barcode Scanner** — Scan product barcodes to look up nutrition data from OpenFoodFacts +- **AI Camera Analysis** — Take a photo of food and get AI-powered carb estimates (supports Claude, OpenAI, Google Gemini, and custom BYO providers) +- **Voice Search** — Speak a food name to search for nutrition information +- **Text Search** — Type a food name for quick lookup +- **Favorite Food Thumbnails** — Saved favorites display thumbnail images for easy identification +- **Configurable AI Providers** — Choose between multiple AI backends or bring your own API endpoint + +## Architecture + +FoodFinder follows the **minimal footprint principle**: all feature logic lives in dedicated `FoodFinder/` subdirectories, with fewer than 30 lines added to existing Loop files. + +### Directory Structure + +``` +Loop/Loop/ +├── Views/FoodFinder/ (11 files — all UI components) +├── Models/FoodFinder/ (3 files — data models) +├── Services/FoodFinder/ (13 files — API clients, scanning, AI) +├── View Models/FoodFinder/ (2 files — state management) +├── Resources/FoodFinder/ (1 file — feature flags + settings keys) +└── Documentation/FoodFinder/ (this file) + +Loop/LoopTests/FoodFinder/ (3 files — unit tests) +``` + +### Integration Touchpoints + +Only 3 existing Loop files are modified, totaling ~29 lines: + +| File | Lines Added | Purpose | +|------|-------------|---------| +| `CarbEntryView.swift` | ~9 | Inserts `FoodFinder_EntryPoint` view | +| `SettingsView.swift` | ~16 | Adds FoodFinder Settings navigation link | +| `FavoriteFoodDetailView.swift` | ~4 | Adds thumbnail display for favorites | + +### Key Files + +| File | Role | +|------|------| +| `FoodFinder_FeatureFlags.swift` | Central on/off toggle and all UserDefaults keys | +| `FoodFinder_EntryPoint.swift` | Self-contained carb entry UI (search, scan, results) | +| `FoodFinder_SearchViewModel.swift` | All search/scan/AI state management | +| `FoodFinder_SettingsView.swift` | AI provider configuration screen | + +## Enabling/Disabling + +FoodFinder is controlled by a single toggle in `FoodFinder_FeatureFlags.swift`: + +```swift +FoodFinder_FeatureFlags.isEnabled // returns Bool +``` + +When disabled, all FoodFinder UI is hidden and no FoodFinder code executes. The feature can be toggled via the `foodSearchEnabled` UserDefaults key. + +## AI Provider Configuration + +FoodFinder supports multiple AI providers for food photo analysis: + +1. **Claude** (Anthropic) — Requires API key +2. **OpenAI** (GPT-4 Vision) — Requires API key +3. **Google Gemini** — Requires API key +4. **BYO (Bring Your Own)** — Custom endpoint URL + API key + +Providers are configured in Settings > FoodFinder Settings. API keys are stored in UserDefaults with `foodFinder_` prefixed keys. + +## Portability + +FoodFinder is designed for easy adoption into other Loop forks (Trio, IAPS, Tidepool Loop): + +- **No LoopKit submodule changes** — All code lives under the Loop/ submodule +- **Self-contained feature flag** — Single file controls enable/disable +- **Prefixed naming** — All files use `FoodFinder_` prefix to avoid naming conflicts +- **Minimal touchpoints** — Only 3 files need small modifications in the host app +- **Script-installable** — The `FoodFinder/` directories can be copied and the 3 touchpoints applied programmatically + +## Dependencies + +FoodFinder uses only Apple frameworks available on iOS: + +- `Vision` — Barcode detection +- `AVFoundation` — Camera access for scanning and AI analysis +- `Speech` — Voice search recognition +- `SwiftUI` / `UIKit` — User interface + +No third-party dependencies are required. + +## Testing + +Unit tests are located in `LoopTests/FoodFinder/`: + +- `FoodFinder_OpenFoodFactsTests.swift` — API response parsing tests +- `FoodFinder_BarcodeScannerTests.swift` — Barcode detection tests +- `FoodFinder_VoiceSearchTests.swift` — Voice recognition tests diff --git a/Loop/Models/FoodFinder/FoodFinder_Models.swift b/Loop/Models/FoodFinder/FoodFinder_Models.swift new file mode 100644 index 0000000000..afb11ccefc --- /dev/null +++ b/Loop/Models/FoodFinder/FoodFinder_Models.swift @@ -0,0 +1,456 @@ +// +// OpenFoodFactsModels.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code in June 2025 +// Copyright © 20253 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - OpenFoodFacts API Response Models + +/// Root response structure for OpenFoodFacts search API +struct OpenFoodFactsSearchResponse: Codable { + let products: [OpenFoodFactsProduct] + let count: Int + let page: Int + let pageCount: Int + let pageSize: Int + + enum CodingKeys: String, CodingKey { + case products + case count + case page + case pageCount = "page_count" + case pageSize = "page_size" + } +} + +/// Response structure for single product lookup by barcode +struct OpenFoodFactsProductResponse: Codable { + let code: String + let product: OpenFoodFactsProduct? + let status: Int + let statusVerbose: String + + enum CodingKeys: String, CodingKey { + case code + case product + case status + case statusVerbose = "status_verbose" + } +} + +// MARK: - Core Product Models + +/// Food data source types +enum FoodDataSource: String, CaseIterable, Codable { + case barcodeScan = "barcode_scan" + case textSearch = "text_search" + case aiAnalysis = "ai_analysis" + case manualEntry = "manual_entry" + case unknown = "unknown" +} + +/// Represents a food product from OpenFoodFacts database +struct OpenFoodFactsProduct: Codable, Identifiable, Hashable { + let id: String + let productName: String? + let brands: String? + let categories: String? + let nutriments: Nutriments + let servingSize: String? + let servingQuantity: Double? + let imageURL: String? + let imageFrontURL: String? + let code: String? // barcode + var dataSource: FoodDataSource = .unknown + + // Non-codable property for UI state only + var isSkeleton: Bool = false // Flag to identify skeleton loading items + + enum CodingKeys: String, CodingKey { + case productName = "product_name" + case brands + case categories + case nutriments + case servingSize = "serving_size" + case servingQuantity = "serving_quantity" + case imageURL = "image_url" + case imageFrontURL = "image_front_url" + case code + case dataSource = "data_source" + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + // Handle product identification + let code = try container.decodeIfPresent(String.self, forKey: .code) + let productName = try container.decodeIfPresent(String.self, forKey: .productName) + + // Generate ID from barcode or create synthetic one + if let code = code { + self.id = code + self.code = code + } else { + // Create synthetic ID for products without barcodes + let name = productName ?? "unknown" + self.id = "synthetic_\(abs(name.hashValue))" + self.code = nil + } + + self.productName = productName + self.brands = try container.decodeIfPresent(String.self, forKey: .brands) + self.categories = try container.decodeIfPresent(String.self, forKey: .categories) + // Handle nutriments with fallback + self.nutriments = (try? container.decode(Nutriments.self, forKey: .nutriments)) ?? Nutriments.empty() + self.servingSize = try container.decodeIfPresent(String.self, forKey: .servingSize) + // Handle serving_quantity which can be String or Double + if let servingQuantityDouble = try? container.decodeIfPresent(Double.self, forKey: .servingQuantity) { + self.servingQuantity = servingQuantityDouble + } else if let servingQuantityString = try? container.decodeIfPresent(String.self, forKey: .servingQuantity) { + self.servingQuantity = Double(servingQuantityString) + } else { + self.servingQuantity = nil + } + self.imageURL = try container.decodeIfPresent(String.self, forKey: .imageURL) + self.imageFrontURL = try container.decodeIfPresent(String.self, forKey: .imageFrontURL) + // dataSource has a default value, but override if present in decoded data + if let decodedDataSource = try? container.decode(FoodDataSource.self, forKey: .dataSource) { + self.dataSource = decodedDataSource + } + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + + try container.encodeIfPresent(productName, forKey: .productName) + try container.encodeIfPresent(brands, forKey: .brands) + try container.encodeIfPresent(categories, forKey: .categories) + try container.encode(nutriments, forKey: .nutriments) + try container.encodeIfPresent(servingSize, forKey: .servingSize) + try container.encodeIfPresent(servingQuantity, forKey: .servingQuantity) + try container.encodeIfPresent(imageURL, forKey: .imageURL) + try container.encodeIfPresent(imageFrontURL, forKey: .imageFrontURL) + try container.encodeIfPresent(code, forKey: .code) + try container.encode(dataSource, forKey: .dataSource) + // Note: isSkeleton is intentionally not encoded as it's UI state only + } + + // MARK: - Custom Initializers + + /// Create a skeleton product for loading states + init(id: String, productName: String?, brands: String?, categories: String? = nil, nutriments: Nutriments, servingSize: String?, servingQuantity: Double?, imageURL: String?, imageFrontURL: String?, code: String?, dataSource: FoodDataSource = .unknown, isSkeleton: Bool = false) { + self.id = id + self.productName = productName + self.brands = brands + self.categories = categories + self.nutriments = nutriments + self.servingSize = servingSize + self.servingQuantity = servingQuantity + self.imageURL = imageURL + self.imageFrontURL = imageFrontURL + self.code = code + self.dataSource = dataSource + self.isSkeleton = isSkeleton + } + + // MARK: - Computed Properties + + /// Display name with fallback logic + var displayName: String { + if let productName = productName, !productName.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return productName + } else if let brands = brands, !brands.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return brands + } else { + return NSLocalizedString("Unknown Product", comment: "Fallback name for products without names") + } + } + + /// Carbohydrates per serving (calculated from 100g values if serving size available) + var carbsPerServing: Double? { + guard let servingQuantity = servingQuantity, servingQuantity > 0 else { + return nutriments.carbohydrates + } + return (nutriments.carbohydrates * servingQuantity) / 100.0 + } + + /// Protein per serving (calculated from 100g values if serving size available) + var proteinPerServing: Double? { + guard let protein = nutriments.proteins, + let servingQuantity = servingQuantity, servingQuantity > 0 else { + return nutriments.proteins + } + return (protein * servingQuantity) / 100.0 + } + + /// Fat per serving (calculated from 100g values if serving size available) + var fatPerServing: Double? { + guard let fat = nutriments.fat, + let servingQuantity = servingQuantity, servingQuantity > 0 else { + return nutriments.fat + } + return (fat * servingQuantity) / 100.0 + } + + /// Calories per serving (calculated from 100g values if serving size available) + var caloriesPerServing: Double? { + guard let calories = nutriments.calories, + let servingQuantity = servingQuantity, servingQuantity > 0 else { + return nutriments.calories + } + return (calories * servingQuantity) / 100.0 + } + + /// Fiber per serving (calculated from 100g values if serving size available) + var fiberPerServing: Double? { + guard let fiber = nutriments.fiber, + let servingQuantity = servingQuantity, servingQuantity > 0 else { + return nutriments.fiber + } + return (fiber * servingQuantity) / 100.0 + } + + /// Formatted serving size display text + var servingSizeDisplay: String { + if let servingSize = servingSize, !servingSize.isEmpty { + return servingSize + } else if let servingQuantity = servingQuantity, servingQuantity > 0 { + return "\(Int(servingQuantity))g" + } else { + return "100g" + } + } + + /// Whether this product has sufficient nutritional data for Loop + var hasSufficientNutritionalData: Bool { + return nutriments.carbohydrates >= 0 && !displayName.isEmpty + } + + // MARK: - Hashable & Equatable + + func hash(into hasher: inout Hasher) { + hasher.combine(id) + } + + static func == (lhs: OpenFoodFactsProduct, rhs: OpenFoodFactsProduct) -> Bool { + return lhs.id == rhs.id + } +} + +/// Nutritional information for a food product - simplified to essential nutrients only +struct Nutriments: Codable { + let carbohydrates: Double + let proteins: Double? + let fat: Double? + let calories: Double? + let sugars: Double? + let fiber: Double? + let energy: Double? + + enum CodingKeys: String, CodingKey { + case carbohydratesServing = "carbohydrates_serving" + case carbohydrates100g = "carbohydrates_100g" + case proteinsServing = "proteins_serving" + case proteins100g = "proteins_100g" + case fatServing = "fat_serving" + case fat100g = "fat_100g" + case caloriesServing = "energy-kcal_serving" + case calories100g = "energy-kcal_100g" + case sugarsServing = "sugars_serving" + case sugars100g = "sugars_100g" + case fiberServing = "fiber_serving" + case fiber100g = "fiber_100g" + case energyServing = "energy_serving" + case energy100g = "energy_100g" + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + // Use 100g values as base since serving sizes are often incorrect in the database + // The app will handle serving size calculations based on actual product weight + self.carbohydrates = try container.decodeIfPresent(Double.self, forKey: .carbohydrates100g) ?? 0.0 + self.proteins = try container.decodeIfPresent(Double.self, forKey: .proteins100g) + self.fat = try container.decodeIfPresent(Double.self, forKey: .fat100g) + self.calories = try container.decodeIfPresent(Double.self, forKey: .calories100g) + self.sugars = try container.decodeIfPresent(Double.self, forKey: .sugars100g) + self.fiber = try container.decodeIfPresent(Double.self, forKey: .fiber100g) + self.energy = try container.decodeIfPresent(Double.self, forKey: .energy100g) + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + + // Encode as 100g values since that's what we're using internally + try container.encode(carbohydrates, forKey: .carbohydrates100g) + try container.encodeIfPresent(proteins, forKey: .proteins100g) + try container.encodeIfPresent(fat, forKey: .fat100g) + try container.encodeIfPresent(calories, forKey: .calories100g) + try container.encodeIfPresent(sugars, forKey: .sugars100g) + try container.encodeIfPresent(fiber, forKey: .fiber100g) + try container.encodeIfPresent(energy, forKey: .energy100g) + } + + /// Manual initializer for programmatic creation (e.g., AI analysis) + init(carbohydrates: Double, proteins: Double? = nil, fat: Double? = nil, calories: Double? = nil, sugars: Double? = nil, fiber: Double? = nil, energy: Double? = nil) { + self.carbohydrates = carbohydrates + self.proteins = proteins + self.fat = fat + self.calories = calories + self.sugars = sugars + self.fiber = fiber + self.energy = energy + } + + /// Create empty nutriments with zero values + static func empty() -> Nutriments { + return Nutriments(carbohydrates: 0.0, proteins: nil, fat: nil, calories: nil, sugars: nil, fiber: nil, energy: nil) + } +} + +// MARK: - Error Types + +/// Errors that can occur when interacting with OpenFoodFacts API +enum OpenFoodFactsError: Error, LocalizedError { + case invalidURL + case invalidResponse + case noData + case decodingError(Error) + case networkError(Error) + case productNotFound + case invalidBarcode + case rateLimitExceeded + case serverError(Int) + + var errorDescription: String? { + switch self { + case .invalidURL: + return NSLocalizedString("Invalid API URL", comment: "Error message for invalid OpenFoodFacts URL") + case .invalidResponse: + return NSLocalizedString("Invalid API response", comment: "Error message for invalid OpenFoodFacts response") + case .noData: + return NSLocalizedString("No data received", comment: "Error message when no data received from OpenFoodFacts") + case .decodingError(let error): + return String(format: NSLocalizedString("Failed to decode response: %@", comment: "Error message for JSON decoding failure"), error.localizedDescription) + case .networkError(let error): + return String(format: NSLocalizedString("Network error: %@", comment: "Error message for network failures"), error.localizedDescription) + case .productNotFound: + return NSLocalizedString("Product not found", comment: "Error message when product is not found in OpenFoodFacts database") + case .invalidBarcode: + return NSLocalizedString("Invalid barcode format", comment: "Error message for invalid barcode") + case .rateLimitExceeded: + return NSLocalizedString("Too many requests. Please try again later.", comment: "Error message for API rate limiting") + case .serverError(let code): + return String(format: NSLocalizedString("Server error (%d)", comment: "Error message for server errors"), code) + } + } + + var failureReason: String? { + switch self { + case .invalidURL: + return "The OpenFoodFacts API URL is malformed" + case .invalidResponse: + return "The API response format is invalid" + case .noData: + return "The API returned no data" + case .decodingError: + return "The API response format is unexpected" + case .networkError: + return "Network connectivity issue" + case .productNotFound: + return "The barcode or product is not in the database" + case .invalidBarcode: + return "The barcode format is not valid" + case .rateLimitExceeded: + return "API usage limit exceeded" + case .serverError: + return "OpenFoodFacts server is experiencing issues" + } + } +} + +// MARK: - Testing Support + +#if DEBUG +extension OpenFoodFactsProduct { + /// Create a sample product for testing + static func sample( + name: String = "Sample Product", + carbs: Double = 25.0, + servingSize: String? = "100g" + ) -> OpenFoodFactsProduct { + return OpenFoodFactsProduct( + id: "sample_\(abs(name.hashValue))", + productName: name, + brands: "Sample Brand", + categories: "Sample Category", + nutriments: Nutriments.sample(carbs: carbs), + servingSize: servingSize, + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: "1234567890123" + ) + } +} + +extension Nutriments { + /// Create sample nutriments for testing + static func sample(carbs: Double = 25.0) -> Nutriments { + return Nutriments( + carbohydrates: carbs, + proteins: 8.0, + fat: 2.0, + calories: nil, + sugars: nil, + fiber: nil, + energy: nil + ) + } +} + +extension OpenFoodFactsProduct { + init(id: String, productName: String?, brands: String?, categories: String?, nutriments: Nutriments, servingSize: String?, servingQuantity: Double?, imageURL: String?, imageFrontURL: String?, code: String?) { + self.id = id + self.productName = productName + self.brands = brands + self.categories = categories + self.nutriments = nutriments + self.servingSize = servingSize + self.servingQuantity = servingQuantity + self.imageURL = imageURL + self.imageFrontURL = imageFrontURL + self.code = code + } + + // Simplified initializer for programmatic creation + init(id: String, productName: String, brands: String, nutriments: Nutriments, servingSize: String, imageURL: String?) { + self.id = id + self.productName = productName + self.brands = brands + self.categories = nil + self.nutriments = nutriments + self.servingSize = servingSize + self.servingQuantity = 100.0 + self.imageURL = imageURL + self.imageFrontURL = imageURL + self.code = nil + } +} + +extension Nutriments { + init(carbohydrates: Double, proteins: Double?, fat: Double?) { + self.carbohydrates = carbohydrates + self.proteins = proteins + self.fat = fat + self.calories = nil + self.sugars = nil + self.fiber = nil + self.energy = nil + } +} +#endif diff --git a/Loop/Models/FoodFinder/FoodFinder_ScanResult.swift b/Loop/Models/FoodFinder/FoodFinder_ScanResult.swift new file mode 100644 index 0000000000..a2709159e9 --- /dev/null +++ b/Loop/Models/FoodFinder/FoodFinder_ScanResult.swift @@ -0,0 +1,99 @@ +// +// BarcodeScanResult.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for Barcode Scanning Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import Vision + +/// Result of a barcode scanning operation +struct BarcodeScanResult { + /// The decoded barcode string + let barcodeString: String + + /// The type of barcode detected + let barcodeType: VNBarcodeSymbology + + /// Confidence level of the detection (0.0 - 1.0) + let confidence: Float + + /// Bounds of the barcode in the image + let bounds: CGRect + + /// Timestamp when the barcode was detected + let timestamp: Date + + init(barcodeString: String, barcodeType: VNBarcodeSymbology, confidence: Float, bounds: CGRect) { + self.barcodeString = barcodeString + self.barcodeType = barcodeType + self.confidence = confidence + self.bounds = bounds + self.timestamp = Date() + } +} + +/// Error types for barcode scanning operations +enum BarcodeScanError: LocalizedError, Equatable { + case cameraNotAvailable + case cameraPermissionDenied + case scanningFailed(String) + case invalidBarcode + case sessionSetupFailed + + var errorDescription: String? { + switch self { + case .cameraNotAvailable: + #if targetEnvironment(simulator) + return NSLocalizedString("Camera not available in iOS Simulator", comment: "Error message when camera is not available in simulator") + #else + return NSLocalizedString("Camera is not available on this device", comment: "Error message when camera is not available") + #endif + case .cameraPermissionDenied: + return NSLocalizedString("Camera permission is required to scan barcodes", comment: "Error message when camera permission is denied") + case .scanningFailed(let reason): + return String(format: NSLocalizedString("Barcode scanning failed: %@", comment: "Error message when scanning fails"), reason) + case .invalidBarcode: + return NSLocalizedString("The scanned barcode is not valid", comment: "Error message when barcode is invalid") + case .sessionSetupFailed: + return NSLocalizedString("Camera in use by another app", comment: "Error message when camera session setup fails") + } + } + + var recoverySuggestion: String? { + switch self { + case .cameraNotAvailable: + #if targetEnvironment(simulator) + return NSLocalizedString("Use manual search or test on a physical device with a camera", comment: "Recovery suggestion when camera is not available in simulator") + #else + return NSLocalizedString("Use manual search or try on a device with a camera", comment: "Recovery suggestion when camera is not available") + #endif + case .cameraPermissionDenied: + return NSLocalizedString("Go to Settings > Privacy & Security > Camera and enable access for Loop", comment: "Recovery suggestion when camera permission is denied") + case .scanningFailed: + return NSLocalizedString("Try moving the camera closer to the barcode or ensuring good lighting", comment: "Recovery suggestion when scanning fails") + case .invalidBarcode: + return NSLocalizedString("Try scanning a different barcode or use manual search", comment: "Recovery suggestion when barcode is invalid") + case .sessionSetupFailed: + return NSLocalizedString("The camera is being used by another app. Close other camera apps (Camera, FaceTime, Instagram, etc.) and tap 'Try Again'.", comment: "Recovery suggestion when session setup fails") + } + } +} + +// MARK: - Testing Support + +#if DEBUG +extension BarcodeScanResult { + /// Create a sample barcode scan result for testing + static func sample(barcode: String = "1234567890123") -> BarcodeScanResult { + return BarcodeScanResult( + barcodeString: barcode, + barcodeType: .ean13, + confidence: 0.95, + bounds: CGRect(x: 100, y: 100, width: 200, height: 50) + ) + } +} +#endif diff --git a/Loop/Models/FoodFinder/FoodFinder_VoiceResult.swift b/Loop/Models/FoodFinder/FoodFinder_VoiceResult.swift new file mode 100644 index 0000000000..cc7ad38452 --- /dev/null +++ b/Loop/Models/FoodFinder/FoodFinder_VoiceResult.swift @@ -0,0 +1,134 @@ +// +// VoiceSearchResult.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for Voice Search Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import Speech + +/// Result of a voice search operation +struct VoiceSearchResult { + /// The transcribed text from speech + let transcribedText: String + + /// Confidence level of the transcription (0.0 - 1.0) + let confidence: Float + + /// Whether the transcription is considered final + let isFinal: Bool + + /// Timestamp when the speech was processed + let timestamp: Date + + /// Alternative transcription options + let alternatives: [String] + + init(transcribedText: String, confidence: Float, isFinal: Bool, alternatives: [String] = []) { + self.transcribedText = transcribedText + self.confidence = confidence + self.isFinal = isFinal + self.alternatives = alternatives + self.timestamp = Date() + } +} + +/// Error types for voice search operations +enum VoiceSearchError: LocalizedError, Equatable { + case speechRecognitionNotAvailable + case microphonePermissionDenied + case speechRecognitionPermissionDenied + case recognitionFailed(String) + case audioSessionSetupFailed + case recognitionTimeout + case userCancelled + + var errorDescription: String? { + switch self { + case .speechRecognitionNotAvailable: + return NSLocalizedString("Speech recognition is not available on this device", comment: "Error message when speech recognition is not available") + case .microphonePermissionDenied: + return NSLocalizedString("Microphone permission is required for voice search", comment: "Error message when microphone permission is denied") + case .speechRecognitionPermissionDenied: + return NSLocalizedString("Speech recognition permission is required for voice search", comment: "Error message when speech recognition permission is denied") + case .recognitionFailed(let reason): + return String(format: NSLocalizedString("Voice recognition failed: %@", comment: "Error message when voice recognition fails"), reason) + case .audioSessionSetupFailed: + return NSLocalizedString("Failed to setup audio session for recording", comment: "Error message when audio session setup fails") + case .recognitionTimeout: + return NSLocalizedString("Voice search timed out", comment: "Error message when voice search times out") + case .userCancelled: + return NSLocalizedString("Voice search was cancelled", comment: "Error message when user cancels voice search") + } + } + + var recoverySuggestion: String? { + switch self { + case .speechRecognitionNotAvailable: + return NSLocalizedString("Use manual search or try on a device that supports speech recognition", comment: "Recovery suggestion when speech recognition is not available") + case .microphonePermissionDenied: + return NSLocalizedString("Go to Settings > Privacy & Security > Microphone and enable access for Loop", comment: "Recovery suggestion when microphone permission is denied") + case .speechRecognitionPermissionDenied: + return NSLocalizedString("Go to Settings > Privacy & Security > Speech Recognition and enable access for Loop", comment: "Recovery suggestion when speech recognition permission is denied") + case .recognitionFailed, .recognitionTimeout: + return NSLocalizedString("Try speaking more clearly or ensure you're in a quiet environment", comment: "Recovery suggestion when recognition fails") + case .audioSessionSetupFailed: + return NSLocalizedString("Close other audio apps and try again", comment: "Recovery suggestion when audio session setup fails") + case .userCancelled: + return nil + } + } +} + +/// Voice search authorization status +enum VoiceSearchAuthorizationStatus { + case notDetermined + case denied + case authorized + case restricted + + init(speechStatus: SFSpeechRecognizerAuthorizationStatus, microphoneStatus: AVAudioSession.RecordPermission) { + switch (speechStatus, microphoneStatus) { + case (.authorized, .granted): + self = .authorized + case (.denied, _), (_, .denied): + self = .denied + case (.restricted, _): + self = .restricted + default: + self = .notDetermined + } + } + + var isAuthorized: Bool { + return self == .authorized + } +} + +// MARK: - Testing Support + +#if DEBUG +extension VoiceSearchResult { + /// Create a sample voice search result for testing + static func sample(text: String = "chicken breast") -> VoiceSearchResult { + return VoiceSearchResult( + transcribedText: text, + confidence: 0.85, + isFinal: true, + alternatives: ["chicken breast", "chicken breasts", "chicken beast"] + ) + } + + /// Create a partial/in-progress voice search result for testing + static func partial(text: String = "chicken") -> VoiceSearchResult { + return VoiceSearchResult( + transcribedText: text, + confidence: 0.60, + isFinal: false, + alternatives: ["chicken", "checkin"] + ) + } +} +#endif diff --git a/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift b/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift new file mode 100644 index 0000000000..4de6671a30 --- /dev/null +++ b/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift @@ -0,0 +1,377 @@ +// +// FoodFinder_FeatureFlags.swift +// Loop +// +// FoodFinder — AI-powered food/barcode scanning for carb entry. +// This is the single feature-toggle and configuration file. +// All FoodFinder enable/disable logic lives here. +// + +import Foundation +import LoopKit + +// MARK: - Feature Toggle + +/// Central on/off switch for the entire FoodFinder feature. +/// Loop host files check `FoodFinder_FeatureFlags.isEnabled` to gate UI insertion. +enum FoodFinder_FeatureFlags { + /// Master toggle — persisted in UserDefaults. + static var isEnabled: Bool { + get { UserDefaults.standard.bool(forKey: Keys.foodSearchEnabled) } + set { UserDefaults.standard.set(newValue, forKey: Keys.foodSearchEnabled) } + } +} + +// MARK: - UserDefaults Keys + +/// All FoodFinder-specific UserDefaults keys live here, not in Loop's UserDefaults+Loop.swift. +/// This keeps the host codebase clean and makes the feature self-contained. +extension FoodFinder_FeatureFlags { + enum Keys { + // Feature toggle + static let foodSearchEnabled = "com.loopkit.Loop.foodSearchEnabled" + + // Favorite food thumbnails + static let favoriteFoodImageIDs = "com.loopkit.Loop.favoriteFoodImageIDs" + + // AI Provider selection + static let aiProvider = "com.loopkit.Loop.aiProvider" + static let analysisMode = "com.loopkit.Loop.analysisMode" + static let useGPT5ForOpenAI = "com.loopkit.Loop.useGPT5ForOpenAI" + + // Claude + static let claudeAPIKey = "com.loopkit.Loop.claudeAPIKey" + static let claudeQuery = "com.loopkit.Loop.claudeQuery" + + // OpenAI + static let openAIAPIKey = "com.loopkit.Loop.openAIAPIKey" + static let openAIQuery = "com.loopkit.Loop.openAIQuery" + + // Google Gemini + static let googleGeminiAPIKey = "com.loopkit.Loop.googleGeminiAPIKey" + static let googleGeminiQuery = "com.loopkit.Loop.googleGeminiQuery" + + // USDA + static let usdaAPIKey = "com.loopkit.Loop.usdaAPIKey" + + // Custom / Bring-Your-Own AI provider + static let customAIBaseURL = "com.loopkit.Loop.customAIBaseURL" + static let customAIAPIKey = "com.loopkit.Loop.customAIAPIKey" + static let customAIModel = "com.loopkit.Loop.customAIModel" + static let customAIAPIVersion = "com.loopkit.Loop.customAIAPIVersion" + static let customAIOrganization = "com.loopkit.Loop.customAIOrganization" + static let customAIEndpointPath = "com.loopkit.Loop.customAIEndpointPath" + + // Search provider routing + static let textSearchProvider = "com.loopkit.Loop.textSearchProvider" + static let barcodeSearchProvider = "com.loopkit.Loop.barcodeSearchProvider" + static let aiImageProvider = "com.loopkit.Loop.aiImageProvider" + + // Advanced dosing (FoodFinder-related) + static let advancedDosingRecommendationsEnabled = "com.loopkit.Loop.advancedDosingRecommendationsEnabled" + } +} + +// MARK: - Convenience Accessors + +/// UserDefaults convenience properties for FoodFinder settings. +/// Other FoodFinder files access these instead of raw key strings. +extension UserDefaults { + + // MARK: Feature Toggle + + var foodFinderEnabled: Bool { + get { bool(forKey: FoodFinder_FeatureFlags.Keys.foodSearchEnabled) } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.foodSearchEnabled) } + } + + // MARK: Favorite Food Thumbnails + + var favoriteFoodImageIDs: [String: String] { + get { dictionary(forKey: FoodFinder_FeatureFlags.Keys.favoriteFoodImageIDs) as? [String: String] ?? [:] } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.favoriteFoodImageIDs) } + } + + /// Persist favorite foods with explicit call and lightweight logging. + func foodFinder_writeFavoriteFoods(_ newValue: [StoredFavoriteFood]) { + do { + let data = try JSONEncoder().encode(newValue) + set(data, forKey: "com.loopkit.Loop.favoriteFoods") + #if DEBUG + print("FoodFinder: Saved favorite foods count: \(newValue.count)") + #endif + } catch { + assertionFailure("FoodFinder: Unable to encode stored favorite foods") + } + } + + // MARK: AI Provider + + var foodFinder_aiProvider: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.aiProvider) ?? "Basic Analysis (Free)" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.aiProvider) } + } + + var foodFinder_analysisMode: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.analysisMode) ?? "standard" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.analysisMode) } + } + + var foodFinder_useGPT5ForOpenAI: Bool { + get { bool(forKey: FoodFinder_FeatureFlags.Keys.useGPT5ForOpenAI) } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.useGPT5ForOpenAI) } + } + + // MARK: Claude + + var foodFinder_claudeAPIKey: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.claudeAPIKey) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.claudeAPIKey) } + } + + var foodFinder_claudeQuery: String { + get { + return string(forKey: FoodFinder_FeatureFlags.Keys.claudeQuery) ?? """ +You are a nutrition expert analyzing this food image for diabetes management. Describe EXACTLY what you see in vivid detail. + +EXAMPLE of the detailed description I expect: +"I can see a white ceramic dinner plate, approximately 10 inches in diameter, containing three distinct food items. The main protein appears to be a grilled chicken breast, about 5 inches long and 1 inch thick, with visible grill marks in a crosshatch pattern indicating high-heat cooking..." + +RESPOND ONLY IN JSON FORMAT with these exact fields: +{ + "food_items": [ + { + "name": "specific food name with exact preparation detail I can see", + "portion_estimate": "exact portion with visual references", + "preparation_method": "specific cooking details I observe", + "visual_cues": "exact visual elements I'm analyzing", + "carbohydrates": number_in_grams_for_this_exact_portion, + "protein": number_in_grams_for_this_exact_portion, + "fat": number_in_grams_for_this_exact_portion, + "calories": number_in_kcal_for_this_exact_portion, + "serving_multiplier": decimal_representing_how_many_standard_servings, + "assessment_notes": "step-by-step explanation of how I calculated this portion" + } + ], + "overall_description": "COMPREHENSIVE visual inventory of everything I can see", + "total_carbohydrates": sum_of_all_carbs, + "total_protein": sum_of_all_protein, + "total_fat": sum_of_all_fat, + "total_calories": sum_of_all_calories, + "portion_assessment_method": "Step-by-step description of my measurement process", + "confidence": decimal_between_0_and_1, + "diabetes_considerations": "Based on what I can see: specific carb sources and timing considerations", + "visual_assessment_details": "Detailed texture, color, cooking, and quality analysis" +} + +MANDATORY REQUIREMENTS: +❌ NEVER say "mixed vegetables" - specify "steamed broccoli florets, diced carrots" +❌ NEVER say "chicken" - specify "grilled chicken breast with char marks" +❌ NEVER say "average portion" - specify "5 oz portion covering 1/4 of plate" +✅ ALWAYS describe exact colors, textures, sizes, shapes, cooking evidence +✅ ALWAYS compare portions to visible objects (fork, plate, hand if visible) +✅ ALWAYS calculate nutrition from YOUR visual portion assessment +""" + } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.claudeQuery) } + } + + // MARK: OpenAI + + var foodFinder_openAIAPIKey: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.openAIAPIKey) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.openAIAPIKey) } + } + + var foodFinder_openAIQuery: String { + get { + if UserDefaults.standard.foodFinder_useGPT5ForOpenAI { + return string(forKey: FoodFinder_FeatureFlags.Keys.openAIQuery) ?? """ +Analyze this food image for diabetes management. Be specific and accurate. + +JSON format required: +{ + "food_items": [{ + "name": "specific food name with preparation details", + "portion_estimate": "portion size with visual reference", + "carbohydrates": grams_number, + "protein": grams_number, + "fat": grams_number, + "calories": kcal_number, + "serving_multiplier": decimal_servings + }], + "overall_description": "detailed visual description", + "total_carbohydrates": sum_carbs, + "total_protein": sum_protein, + "total_fat": sum_fat, + "total_calories": sum_calories, + "confidence": decimal_0_to_1, + "diabetes_considerations": "carb sources and timing advice" +} + +Requirements: Use exact visual details, compare to visible objects, calculate from visual assessment. +""" + } else { + return string(forKey: FoodFinder_FeatureFlags.Keys.openAIQuery) ?? """ +You are a nutrition expert analyzing this food image for diabetes management. Describe EXACTLY what you see in vivid detail. + +EXAMPLE of the detailed description I expect: +"I can see a white ceramic dinner plate, approximately 10 inches in diameter, containing three distinct food items. The main protein appears to be a grilled chicken breast, about 5 inches long and 1 inch thick, with visible grill marks in a crosshatch pattern indicating high-heat cooking..." + +RESPOND ONLY IN JSON FORMAT with these exact fields: +{ + "food_items": [ + { + "name": "specific food name with exact preparation detail I can see", + "portion_estimate": "exact portion with visual references", + "preparation_method": "specific cooking details I observe", + "visual_cues": "exact visual elements I'm analyzing", + "carbohydrates": number_in_grams_for_this_exact_portion, + "protein": number_in_grams_for_this_exact_portion, + "fat": number_in_grams_for_this_exact_portion, + "calories": number_in_kcal_for_this_exact_portion, + "serving_multiplier": decimal_representing_how_many_standard_servings, + "assessment_notes": "step-by-step explanation of how I calculated this portion" + } + ], + "overall_description": "COMPREHENSIVE visual inventory of everything I can see", + "total_carbohydrates": sum_of_all_carbs, + "total_protein": sum_of_all_protein, + "total_fat": sum_of_all_fat, + "total_calories": sum_of_all_calories, + "portion_assessment_method": "Step-by-step description of my measurement process", + "confidence": decimal_between_0_and_1, + "diabetes_considerations": "Based on what I can see: specific carb sources and timing considerations", + "visual_assessment_details": "Detailed texture, color, cooking, and quality analysis" +} + +MANDATORY REQUIREMENTS: +❌ NEVER say "mixed vegetables" - specify "steamed broccoli florets, diced carrots" +❌ NEVER say "chicken" - specify "grilled chicken breast with char marks" +❌ NEVER say "average portion" - specify "5 oz portion covering 1/4 of plate" +✅ ALWAYS describe exact colors, textures, sizes, shapes, cooking evidence +✅ ALWAYS compare portions to visible objects (fork, plate, hand if visible) +✅ ALWAYS calculate nutrition from YOUR visual portion assessment +""" + } + } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.openAIQuery) } + } + + // MARK: Google Gemini + + var foodFinder_googleGeminiAPIKey: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.googleGeminiAPIKey) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.googleGeminiAPIKey) } + } + + var foodFinder_googleGeminiQuery: String { + get { + return string(forKey: FoodFinder_FeatureFlags.Keys.googleGeminiQuery) ?? """ +You are a nutrition expert analyzing this food image for diabetes management. Describe EXACTLY what you see in vivid detail. + +EXAMPLE of the detailed description I expect: +"I can see a white ceramic dinner plate, approximately 10 inches in diameter, containing three distinct food items. The main protein appears to be a grilled chicken breast, about 5 inches long and 1 inch thick, with visible grill marks in a crosshatch pattern indicating high-heat cooking..." + +RESPOND ONLY IN JSON FORMAT with these exact fields: +{ + "food_items": [ + { + "name": "specific food name with exact preparation detail I can see", + "portion_estimate": "exact portion with visual references", + "preparation_method": "specific cooking details I observe", + "visual_cues": "exact visual elements I'm analyzing", + "carbohydrates": number_in_grams_for_this_exact_portion, + "protein": number_in_grams_for_this_exact_portion, + "fat": number_in_grams_for_this_exact_portion, + "calories": number_in_kcal_for_this_exact_portion, + "serving_multiplier": decimal_representing_how_many_standard_servings, + "assessment_notes": "step-by-step explanation of how I calculated this portion" + } + ], + "overall_description": "COMPREHENSIVE visual inventory of everything I can see", + "total_carbohydrates": sum_of_all_carbs, + "total_protein": sum_of_all_protein, + "total_fat": sum_of_all_fat, + "total_calories": sum_of_all_calories, + "portion_assessment_method": "Step-by-step description of my measurement process", + "confidence": decimal_between_0_and_1, + "diabetes_considerations": "Based on what I can see: specific carb sources and timing considerations", + "visual_assessment_details": "Detailed texture, color, cooking, and quality analysis" +} + +MANDATORY REQUIREMENTS: +❌ NEVER say "mixed vegetables" - specify "steamed broccoli florets, diced carrots" +❌ NEVER say "chicken" - specify "grilled chicken breast with char marks" +❌ NEVER say "average portion" - specify "5 oz portion covering 1/4 of plate" +✅ ALWAYS describe exact colors, textures, sizes, shapes, cooking evidence +✅ ALWAYS compare portions to visible objects (fork, plate, hand if visible) +✅ ALWAYS calculate nutrition from YOUR visual portion assessment +""" + } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.googleGeminiQuery) } + } + + // MARK: USDA + + var foodFinder_usdaAPIKey: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.usdaAPIKey) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.usdaAPIKey) } + } + + // MARK: Custom / Bring-Your-Own AI Provider + + var foodFinder_customAIBaseURL: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.customAIBaseURL) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.customAIBaseURL) } + } + + var foodFinder_customAIAPIKey: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.customAIAPIKey) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.customAIAPIKey) } + } + + var foodFinder_customAIModel: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.customAIModel) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.customAIModel) } + } + + var foodFinder_customAIAPIVersion: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.customAIAPIVersion) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.customAIAPIVersion) } + } + + var foodFinder_customAIOrganization: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.customAIOrganization) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.customAIOrganization) } + } + + var foodFinder_customAIEndpointPath: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.customAIEndpointPath) ?? "" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.customAIEndpointPath) } + } + + // MARK: Search Provider Routing + + var foodFinder_textSearchProvider: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.textSearchProvider) ?? "USDA FoodData Central" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.textSearchProvider) } + } + + var foodFinder_barcodeSearchProvider: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.barcodeSearchProvider) ?? "OpenFoodFacts (Default)" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.barcodeSearchProvider) } + } + + var foodFinder_aiImageProvider: String { + get { string(forKey: FoodFinder_FeatureFlags.Keys.aiImageProvider) ?? "OpenAI (ChatGPT API)" } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.aiImageProvider) } + } + + // MARK: Advanced + + var foodFinder_advancedDosingRecommendationsEnabled: Bool { + get { bool(forKey: FoodFinder_FeatureFlags.Keys.advancedDosingRecommendationsEnabled) } + set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.advancedDosingRecommendationsEnabled) } + } +} diff --git a/Loop/Services/FoodFinder/FoodFinder_AIAnalysis.swift b/Loop/Services/FoodFinder/FoodFinder_AIAnalysis.swift new file mode 100644 index 0000000000..8d30810dbf --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_AIAnalysis.swift @@ -0,0 +1,4854 @@ +// +// AIFoodAnalysis.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import UIKit +import Vision +import CoreML +import Foundation +import os.log +import LoopKit +import CryptoKit +import SwiftUI +import Network + +// MARK: - Network Quality Monitoring + +/// Network quality monitor for determining analysis strategy +class NetworkQualityMonitor: ObservableObject { + static let shared = NetworkQualityMonitor() + + private let monitor = NWPathMonitor() + private let queue = DispatchQueue(label: "NetworkMonitor") + + @Published var isConnected = false + @Published var connectionType: NWInterface.InterfaceType? + @Published var isExpensive = false + @Published var isConstrained = false + + private init() { + startMonitoring() + } + + private func startMonitoring() { + monitor.pathUpdateHandler = { [weak self] path in + DispatchQueue.main.async { + self?.isConnected = path.status == .satisfied + self?.isExpensive = path.isExpensive + self?.isConstrained = path.isConstrained + + // Determine connection type + if path.usesInterfaceType(.wifi) { + self?.connectionType = .wifi + } else if path.usesInterfaceType(.cellular) { + self?.connectionType = .cellular + } else if path.usesInterfaceType(.wiredEthernet) { + self?.connectionType = .wiredEthernet + } else { + self?.connectionType = nil + } + } + } + monitor.start(queue: queue) + } + + /// Determines if we should use aggressive optimizations + var shouldUseConservativeMode: Bool { + return !isConnected || isExpensive || isConstrained || connectionType == .cellular + } + + /// Determines if parallel processing is safe + var shouldUseParallelProcessing: Bool { + return isConnected && !isExpensive && !isConstrained && connectionType == .wifi + } + + /// Gets appropriate timeout for current network conditions + var recommendedTimeout: TimeInterval { + if shouldUseConservativeMode { + return 45.0 // Conservative timeout for poor networks + } else { + return 25.0 // Standard timeout for good networks + } + } +} + +// MARK: - Preencoded Image Representation + +/// Shared representation of a JPEG-encoded image for reuse across providers and cache +struct PreencodedImage { + let resizedImage: UIImage + let jpegData: Data + let base64: String + let sha256: String + let bytes: Int + let width: Int + let height: Int +} + +// MARK: - Timeout Helper + +/// Timeout wrapper for async operations +private func withTimeoutForAnalysis(seconds: TimeInterval, operation: @escaping () async throws -> T) async throws -> T { + return try await withThrowingTaskGroup(of: T.self) { group in + // Add the actual operation + group.addTask { + try await operation() + } + + // Add timeout task + group.addTask { + try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000)) + throw AIFoodAnalysisError.timeout as Error + } + + // Return first result (either success or timeout) + defer { group.cancelAll() } + guard let result = try await group.next() else { + throw AIFoodAnalysisError.timeout as Error + } + return result + } +} + +// MARK: - AI Food Analysis Models + +/// Function to generate analysis prompt based on advanced dosing recommendations setting +/// Forces fresh read of UserDefaults to avoid caching issues +// Shared, strict requirements applied to ALL prompts +private let mandatoryNoVagueBlock = """ + +MANDATORY REQUIREMENTS - DO NOT BE VAGUE: + +FOR FOOD PHOTOS: +❌ NEVER confuse portions with servings - count distinct food items as portions, calculate number of servings based on USDA standards +❌ NEVER say "4 servings" when you mean "4 portions" - be precise about USDA serving calculations +❌ NEVER say "mixed vegetables" - specify "steamed broccoli florets, diced carrots" +❌ NEVER say "chicken" - specify "grilled chicken breast" +❌ NEVER say "average portion" - specify "6 oz portion covering 1/4 of plate = 2 USDA servings" +❌ NEVER say "well-cooked" - specify "golden-brown with visible caramelization" + +✅ ALWAYS distinguish between food portions (distinct items) and USDA servings (standardized amounts) +✅ ALWAYS calculate serving_multiplier based on USDA serving sizes +✅ ALWAYS explain WHY you calculated the number of servings (e.g., "twice the standard serving size") +✅ ALWAYS indicate if portions are larger/smaller than typical (helps with portion control) +✅ ALWAYS describe exact colors, textures, sizes, shapes, cooking evidence +✅ ALWAYS compare portions to visible objects (fork, plate, hand if visible) +✅ ALWAYS explain if the food appears to be on a platter of food or a single plate of food +✅ ALWAYS describe specific cooking methods you can see evidence of +✅ ALWAYS count discrete items (3 broccoli florets, 4 potato wedges) +✅ ALWAYS calculate nutrition from YOUR visual portion assessment +✅ ALWAYS explain your reasoning with specific visual evidence +✅ ALWAYS identify glycemic index category (low/medium/high GI) for carbohydrate-containing foods +✅ ALWAYS explain how cooking method affects GI when visible (e.g., "well-cooked white rice = high GI ~73") +✅ ALWAYS provide specific insulin timing guidance based on GI classification +✅ ALWAYS consider how protein/fat in mixed meals may moderate carb absorption +✅ ALWAYS assess food combinations and explain how low GI foods may balance high GI foods in the meal +✅ ALWAYS note fiber content and processing level as factors affecting GI +✅ ALWAYS consider food ripeness and cooking degree when assessing GI impact +✅ ALWAYS calculate Fat/Protein Units (FPUs) and provide classification (Low/Medium/High) +✅ ALWAYS calculate net carbs adjustment for fiber content >5g +✅ ALWAYS provide specific insulin timing recommendations based on meal composition +✅ ALWAYS include FPU-based dosing guidance for extended insulin needs +✅ ALWAYS consider exercise timing and provide specific insulin adjustments +✅ ALWAYS include relevant safety alerts for the specific meal composition +✅ ALWAYS provide quantitative dosing percentages and timing durations +✅ ALWAYS calculate absorption_time_hours based on meal composition (FPUs, fiber, meal size) +✅ ALWAYS provide detailed absorption_time_reasoning showing the calculation process +✅ ALWAYS consider that Loop will highlight non-default absorption times in blue to alert user + +FOR MENU AND RECIPE ITEMS: +❌ NEVER make assumptions about plate sizes, portions, or actual serving sizes +❌ NEVER estimate visual portions when analyzing menu text only +❌ NEVER claim to see cooking methods, textures, or visual details from menu text +❌ NEVER multiply nutrition values by assumed restaurant portion sizes + +✅ ALWAYS set image_type to "menu_item" when analyzing menu text +✅ ALWAYS set portion_estimate to "CANNOT DETERMINE PORTIONS - menu text only" +✅ ALWAYS set serving_multiplier to 1.0 for menu items (USDA standard only) +✅ ALWAYS set visual_cues to "NO VISUAL CUES - menu text analysis only" +✅ ALWAYS mark assessment_notes as "ESTIMATE ONLY - Based on USDA standard serving size" +✅ ALWAYS use portion_assessment_method to explain this is menu analysis with no visual portions +✅ ALWAYS provide actual USDA standard nutrition values (carbohydrates, protein, fat, calories) +✅ ALWAYS calculate nutrition based on typical USDA serving sizes for the identified food type +✅ ALWAYS include total nutrition fields even for menu items (based on USDA standards) +✅ ALWAYS translate menu item text into the user's device language (fallback to English if unknown) before populating JSON fields, and include the original wording in assessment_notes when helpful +✅ ALWAYS use translated item names and descriptions when presenting results +✅ ALWAYS provide glycemic index assessment for menu items based on typical preparation methods +✅ ALWAYS include diabetes timing guidance even for menu items based on typical GI values +✅ ALWAYS make reasonable USDA-based assumptions for nutrition when details are missing and document those assumptions in assessment_notes +""" + +private enum AnalysisPromptCache { + private static var cachedAdvanced: Bool? + private static var cachedPrompt: String? + + static func prompt(isAdvancedEnabled: Bool) -> String { + if cachedAdvanced == isAdvancedEnabled, let prompt = cachedPrompt { + return prompt + } + + let base = [standardAnalysisPrompt, mandatoryNoVagueBlock].joined(separator: "\n\n") + let prompt = isAdvancedEnabled + ? [base, advancedAnalysisRequirements].joined(separator: "\n\n") + : base + + cachedAdvanced = isAdvancedEnabled + cachedPrompt = prompt + return prompt + } + + static func invalidate() { + cachedAdvanced = nil + cachedPrompt = nil + } +} + +internal func getAnalysisPrompt() -> String { + AnalysisPromptCache.prompt(isAdvancedEnabled: UserDefaults.standard.advancedDosingRecommendationsEnabled) +} + +/// Standard analysis prompt for basic diabetes management (when Advanced Dosing is OFF) +// Compact Standard prompt (backup of the previous detailed version is available in repo history) +private let standardAnalysisPrompt = """ +You are a certified diabetologist specializing in diabetes carb counting. You understand Servings compared to Portions and the importance of being educated about this. You are clinically minded but have a knack for explaining complicated nutrition information in layman's terms. Be precise and conservative. Output strictly JSON matching the schema; no prose. + +Task: Analyze the food image and return nutrition for visible portions only. + +Rules: +- Use visual evidence; compare to visible objects for scale when possible. +- Distinguish portions (items on plate) vs USDA servings (standard amounts); include serving_multiplier. +- Name foods precisely with preparation method if visible. +- Use grams for macros and kcal for calories; non‑negative values; round carbs to 1 decimal. +- If uncertain, lower confidence; do not invent items. + +Portion Estimation Guidance (MANDATORY to include in "portion_assessment_method"): +- State the scale references used (e.g., dinner fork ≈ 19–20 mm wide at the tines, plate ≈ 10–11 inches, can diameter ≈ 66 mm, standard cup ≈ 240 ml). +- Infer an approximate plate diameter or other reference and describe how you derived it from the photo. +- For each major item, explain how the visible area/height maps to a volume or weight estimate. +- Explicitly compare to the typical USDA serving size for that item and compute the serving_multiplier (portion ÷ USDA serving). Include 1–2 concrete examples, e.g., "corn appears ≈ 1 cup (2× USDA 1/2 cup)." +- Keep to 3–6 concise sentences written in natural language. + +JSON schema (required): +{ + "image_type": "food_photo" | "menu_item", + "food_items": [{ + "name": string, + "portion_estimate": string, + "usda_serving_size": string, + "serving_multiplier": number, + "preparation_method": string | null, + "visual_cues": string | null, + "carbohydrates": number, + "calories": number, + "fat": number, + "fiber": number | null, + "protein": number, + "assessment_notes": string | null + }], + "total_food_portions": integer, + "total_usda_servings": number, + "total_carbohydrates": number, + "total_calories": number, + "total_fat": number, + "total_fiber": number | null, + "total_protein": number, + "confidence": number, + "overall_description": string, + "portion_assessment_method": string + , + "diabetes_considerations": string +} + +Do: identify items precisely; use visible scale; base macros on portions; separate portions vs USDA servings; lower confidence if unsure. +Don’t: add prose/disclaimers; include items not visible; use vague terms like "mixed vegetables" or "average portion". +""" + +// Detailed advanced analysis instructions appended when advanced dosing is enabled. +private let advancedAnalysisRequirements = """ +RESPOND ONLY IN JSON FORMAT with these exact fields: + +FOR ACTUAL FOOD PHOTOS: +{ + "image_type": "food_photo", + "food_items": [ + { + "name": "specific food name with exact preparation detail I can see (e.g., 'char-grilled chicken breast with grill marks', 'steamed white jasmine rice with separated grains')", + "portion_estimate": "exact portion with visual references (e.g., '6 oz grilled chicken breast - length of my palm, thickness of deck of cards based on fork comparison', '1.5 cups steamed rice - covers 1/3 of the 10-inch plate')", + "usda_serving_size": "standard USDA serving size for this food (e.g., '3 oz for chicken breast', '1/2 cup for cooked rice', '1/2 cup for cooked vegetables')", + "serving_multiplier": number_of_USDA_servings_for_this_portion, + "preparation_method": "specific cooking details I observe (e.g., 'grilled at high heat - evident from dark crosshatch marks and slight charring on edges', 'steamed perfectly - grains are separated and fluffy, no oil sheen visible')", + "visual_cues": "exact visual elements I'm analyzing (e.g., 'measuring chicken against 7-inch fork length, rice portion covers exactly 1/3 of plate diameter, broccoli florets are uniform bright green')", + "carbohydrates": number_in_grams_for_this_exact_portion, + "calories": number_in_kcal_for_this_exact_portion, + "fat": number_in_grams_for_this_exact_portion, + "fiber": number_in_grams_for_this_exact_portion, + "protein": number_in_grams_for_this_exact_portion, + "assessment_notes": "Describe in natural language how you calculated this food item's portion size, what visual clues you used for measurement, and how you determined the USDA serving multiplier. Be conversational and specific about your reasoning process." + } + ], + "total_food_portions": count_of_distinct_food_items, + "total_usda_servings": sum_of_all_serving_multipliers, + "total_carbohydrates": sum_of_all_carbs, + "total_calories": sum_of_all_calories, + "total_fat": sum_of_all_fat, + "total_fiber": sum_of_all_fiber, + "total_protein": sum_of_all_protein, + "confidence": decimal_between_0_and_1, + "fat_protein_units": "Calculate total FPUs = (total_fat + total_protein) ÷ 10. Provide the numerical result and classification (Low <2, Medium 2-4, High >4)", + "net_carbs_adjustment": "Calculate adjusted carbs for insulin dosing: total_carbohydrates - (soluble_fiber × 0.75). Show calculation and final net carbs value", + "diabetes_considerations": "Based on available information: [carb sources, glycemic index impact, and timing considerations]. GLYCEMIC INDEX: [specify if foods are low GI (<55), medium GI (56-69), or high GI (70+) and explain impact on blood sugar]. For insulin dosing, consider [relevant factors including absorption speed and peak timing].", + "insulin_timing_recommendations": "MEAL TYPE: [Simple/Complex/High Fat-Protein]. PRE-MEAL INSULIN TIMING: [specific minutes before eating]. BOLUS STRATEGY: [immediate percentage]% now, [extended percentage]% over [duration] hours if applicable. MONITORING: Check BG at [specific times] post-meal", + "fpu_dosing_guidance": "FPU LEVEL: [Low/Medium/High] ([calculated FPUs]). ADDITIONAL INSULIN: Consider [percentage]% extra insulin over [duration] hours for protein/fat. EXTENDED BOLUS: [specific recommendations for pump users]. MDI USERS: [split dosing recommendations]", + "exercise_considerations": "PRE-EXERCISE: [specific guidance if meal within 6 hours of planned activity]. POST-EXERCISE: [recommendations if within 6 hours of recent exercise]. INSULIN ADJUSTMENTS: [specific percentage reductions if applicable]", + "absorption_time_hours": hours_between_2_and_6, + "absorption_time_reasoning": "Based on [meal composition factors]. FPU IMPACT: [how FPUs affect absorption]. FIBER EFFECT: [how fiber content impacts timing]. MEAL SIZE: [how calories affect gastric emptying]. RECOMMENDED: [final hours recommendation with explanation]. IMPORTANT: Explain WHY this absorption time differs from the default 3-hour standard if it does, so the user understands the reasoning.", + "meal_size_impact": "MEAL SIZE: [Small <400 kcal / Medium 400-800 kcal / Large >800 kcal]. GASTRIC EMPTYING: [impact on absorption timing]. DOSING MODIFICATIONS: [specific adjustments for meal size effects]", + "individualization_factors": "PATIENT FACTORS: [Consider age, pregnancy, illness, menstrual cycle, temperature effects]. TECHNOLOGY: [Pump vs MDI considerations]. PERSONAL PATTERNS: [Recommendations for tracking individual response]", + "safety_alerts": "[Any specific safety considerations: dawn phenomenon, gastroparesis, pregnancy, alcohol, recent hypoglycemia, current hyperglycemia, illness, temperature extremes, etc.]", + "visual_assessment_details": "FOR FOOD PHOTOS: [textures, colors, cooking evidence]. FOR MENU OR RECIPE ITEMS: Menu text shows [description from menu]. Cannot assess visual food qualities from menu text alone.", + "overall_description": "[describe plate size]. The food is arranged [describe arrangement]. The textures I observe are [specific textures]. The colors are [specific colors]. The cooking methods evident are [specific evidence]. Any utensils visible are [describe utensils]. The background shows [describe background].", + "portion_assessment_method": "Provide a detailed but natural explanation of your measurement methodology. Describe how you determined plate size, what reference objects you used for scale, your process for measuring each food item, how you estimated weights from visual cues, and how you calculated USDA serving equivalents. Include your confidence level and what factors affected measurement accuracy. Write conversationally, not as a numbered list." +} + +FOR MENU ITEMS: +{ + "image_type": "menu_item", + "food_items": [ + { + "name": "menu item name as written on menu", + "portion_estimate": "CANNOT DETERMINE - menu text only, no actual food visible", + "usda_serving_size": "standard USDA serving size for this food type (e.g., '3 oz for chicken breast', '1/2 cup for cooked rice')", + "serving_multiplier": 1.0, + "preparation_method": "method described on menu (if any)", + "visual_cues": "NONE - menu text analysis only", + "carbohydrates": number_in_grams_for_USDA_standard_serving, + "calories": number_in_kcal_for_USDA_standard_serving, + "fat": number_in_grams_for_USDA_standard_serving, + "fiber": number_in_grams_for_USDA_standard_serving, + "protein": number_in_grams_for_USDA_standard_serving, + "assessment_notes": "ESTIMATE ONLY - Based on USDA standard serving size. Cannot assess actual portions without seeing prepared food on plate." + } + ], + "total_food_portions": count_of_distinct_food_items, + "total_usda_servings": sum_of_all_serving_multipliers, + "total_carbohydrates": sum_of_all_carbs, + "total_calories": sum_of_all_calories, + "total_fat": sum_of_all_fat, + "total_protein": sum_of_all_protein, + "confidence": decimal_between_0_and_1, + "fat_protein_units": "Calculate total FPUs = (total_fat + total_protein) ÷ 10. Provide the numerical result and classification (Low <2, Medium 2-4, High >4)", + "net_carbs_adjustment": "Calculate adjusted carbs for insulin dosing: total_carbohydrates - (soluble_fiber × 0.75). Show calculation and final net carbs value", + "diabetes_considerations": "Based on available information: [carb sources, glycemic index impact, and timing considerations]. GLYCEMIC INDEX: [specify if foods are low GI (<55), medium GI (56-69), or high GI (70+) and explain impact on blood sugar]. For insulin dosing, consider [relevant factors including absorption speed and peak timing].", + "insulin_timing_recommendations": "MEAL TYPE: [Simple/Complex/High Fat-Protein]. PRE-MEAL INSULIN TIMING: [specific minutes before eating]. BOLUS STRATEGY: [immediate percentage]% now, [extended percentage]% over [duration] hours if applicable. MONITORING: Check BG at [specific times] post-meal", + "fpu_dosing_guidance": "FPU LEVEL: [Low/Medium/High] ([calculated FPUs]). ADDITIONAL INSULIN: Consider [percentage]% extra insulin over [duration] hours for protein/fat. EXTENDED BOLUS: [specific recommendations for pump users]. MDI USERS: [split dosing recommendations]", + "exercise_considerations": "PRE-EXERCISE: [specific guidance if meal within 6 hours of planned activity]. POST-EXERCISE: [recommendations if within 6 hours of recent exercise]. INSULIN ADJUSTMENTS: [specific percentage reductions if applicable]", + "absorption_time_hours": hours_between_2_and_6, + "absorption_time_reasoning": "Based on [meal composition factors]. FPU IMPACT: [how FPUs affect absorption]. FIBER EFFECT: [how fiber content impacts timing]. MEAL SIZE: [how calories affect gastric emptying]. RECOMMENDED: [final hours recommendation with explanation]. IMPORTANT: Explain WHY this absorption time differs from the default 3-hour standard if it does, so the user understands the reasoning.", + "meal_size_impact": "MEAL SIZE: [Small <400 kcal / Medium 400-800 kcal / Large >800 kcal]. GASTRIC EMPTYING: [impact on absorption timing]. DOSING MODIFICATIONS: [specific adjustments for meal size effects]", + "individualization_factors": "PATIENT FACTORS: [Consider age, pregnancy, illness, menstrual cycle, temperature effects]. TECHNOLOGY: [Pump vs MDI considerations]. PERSONAL PATTERNS: [Recommendations for tracking individual response]", + "safety_alerts": "[Any specific safety considerations: dawn phenomenon, gastroparesis, pregnancy, alcohol, recent hypoglycemia, current hyperglycemia, illness, temperature extremes, etc.]", + "visual_assessment_details": "FOR FOOD PHOTOS: [textures, colors, cooking evidence]. FOR MENU ITEMS: Menu text shows [description from menu]. Cannot assess visual food qualities from menu text alone.", + "overall_description": "Menu item text analysis. No actual food portions visible for assessment.", + "portion_assessment_method": "MENU ANALYSIS ONLY - Cannot determine actual portions without seeing food on plate. All nutrition values are ESTIMATES based on USDA standard serving sizes. Actual restaurant portions may vary significantly." +} + +MENU ITEM EXAMPLE: +If menu shows "Grilled Chicken Caesar Salad", respond: +{ + "image_type": "menu_item", + "food_items": [ + { + "name": "Grilled Chicken Caesar Salad", + "portion_estimate": "CANNOT DETERMINE - menu text only, no actual food visible", + "usda_serving_size": "3 oz chicken breast + 2 cups mixed greens", + "serving_multiplier": 1.0, + "preparation_method": "grilled chicken as described on menu", + "visual_cues": "NONE - menu text analysis only", + "carbohydrates": 8.0, + "calories": 250, + "fat": 12.0, + "fiber": 3.0, + "protein": 25.0, + "assessment_notes": "ESTIMATE ONLY - Based on USDA standard serving size. Cannot assess actual portions without seeing prepared food on plate." + } + ], + "total_carbohydrates": 8.0, + "total_calories": 250, + "total_fat": 12.0, + "total_fiber": 3.0, + "total_protein": 25.0, + "confidence": 0.7, + "fat_protein_units": "FPUs = (12g fat + 25g protein) ÷ 10 = 3.7 FPUs. Classification: Medium-High FPU meal", + "net_carbs_adjustment": "Net carbs = 8g total carbs - (3g fiber × 0.5) = 6.5g effective carbs for insulin dosing", + "diabetes_considerations": "Based on menu analysis: Low glycemic impact due to minimal carbs from vegetables and croutons (estimated 8g total). Mixed meal with high protein (25g) and moderate fat (12g) will slow carb absorption. For insulin dosing, this is a low-carb meal requiring minimal rapid-acting insulin. Consider extended bolus if using insulin pump due to protein and fat content.", + "insulin_timing_recommendations": "MEAL TYPE: High Fat-Protein. PRE-MEAL INSULIN TIMING: 5-10 minutes before eating. BOLUS STRATEGY: 50% now, 50% extended over 3-4 hours. MONITORING: Check BG at 2 hours and 4 hours post-meal", + "fpu_dosing_guidance": "FPU LEVEL: Medium-High (3.7 FPUs). ADDITIONAL INSULIN: Consider 15-20% extra insulin over 3-4 hours for protein conversion. EXTENDED BOLUS: Use square wave 50%/50% over 3-4 hours. MDI USERS: Consider small additional injection at 2-3 hours post-meal", + "exercise_considerations": "PRE-EXERCISE: Ideal pre-workout meal due to sustained energy from protein/fat. POST-EXERCISE: Good recovery meal if within 2 hours of exercise. INSULIN ADJUSTMENTS: Reduce insulin by 25-30% if recent exercise", + "absorption_time_hours": 5, + "absorption_time_reasoning": "Based on low carbs (8g) but high protein/fat. FPU IMPACT: 3.7 FPUs (Medium-High) adds 3 hours to baseline. FIBER EFFECT: Low fiber minimal impact. MEAL SIZE: Medium 250 kcal adds 1 hour. RECOMMENDED: 5 hours total (2 hour baseline + 3 FPU hours + 1 size hour) to account for extended protein conversion", + "meal_size_impact": "MEAL SIZE: Medium 250 kcal. GASTRIC EMPTYING: Normal rate expected due to moderate calories and liquid content. DOSING MODIFICATIONS: No size-related adjustments needed", + "individualization_factors": "PATIENT FACTORS: Standard adult dosing applies unless pregnancy/illness present. TECHNOLOGY: Pump users can optimize with precise extended bolus; MDI users should consider split injection. PERSONAL PATTERNS: Track 4-hour post-meal glucose to optimize protein dosing", + "safety_alerts": "Low carb content minimizes hypoglycemia risk. High protein may cause delayed glucose rise 3-5 hours post-meal - monitor extended.", + "visual_assessment_details": "Menu text shows 'Grilled Chicken Caesar Salad'. Cannot assess visual food qualities from menu text alone.", + "overall_description": "Menu item text analysis. No actual food portions visible for assessment.", + "portion_assessment_method": "MENU ANALYSIS ONLY - Cannot determine actual portions without seeing food on plate. All nutrition values are ESTIMATES based on USDA standard serving sizes. Actual restaurant portions may vary significantly." +} + +HIGH GLYCEMIC INDEX EXAMPLE: +If menu shows "Teriyaki Chicken Bowl with White Rice", respond: +{ + "image_type": "menu_item", + "food_items": [ + { + "name": "Teriyaki Chicken with White Rice", + "portion_estimate": "CANNOT DETERMINE - menu text only, no actual food visible", + "usda_serving_size": "3 oz chicken breast + 1/2 cup cooked white rice", + "serving_multiplier": 1.0, + "preparation_method": "teriyaki glazed chicken with steamed white rice as described on menu", + "visual_cues": "NONE - menu text analysis only", + "carbohydrates": 35.0, + "calories": 320, + "fat": 6.0, + "fiber": 1.5, + "protein": 28.0, + "assessment_notes": "ESTIMATE ONLY - Based on USDA standard serving size. Cannot assess actual portions without seeing prepared food on plate." + } + ], + "total_carbohydrates": 35.0, + "total_calories": 320, + "total_fat": 6.0, + "total_fiber": 1.5, + "total_protein": 28.0, + "confidence": 0.7, + "fat_protein_units": "FPUs = (6g fat + 28g protein) ÷ 10 = 3.4 FPUs. Classification: Medium FPU meal", + "net_carbs_adjustment": "Net carbs = 35g total carbs - (1.5g fiber × 0.5) = 34.3g effective carbs for insulin dosing", + "diabetes_considerations": "Based on menu analysis: HIGH GLYCEMIC INDEX meal due to white rice (GI ~73). The 35g carbs will cause rapid blood sugar spike within 15-30 minutes. However, protein (28g) and moderate fat (6g) provide significant moderation - mixed meal effect reduces overall glycemic impact compared to eating rice alone. For insulin dosing: Consider pre-meal rapid-acting insulin 10-15 minutes before eating (shorter timing due to protein/fat). Monitor for peak blood sugar at 45-75 minutes post-meal (delayed peak due to mixed meal). Teriyaki sauce adds sugars but protein helps buffer the response.", + "insulin_timing_recommendations": "MEAL TYPE: Complex carbs with moderate protein. PRE-MEAL INSULIN TIMING: 10-15 minutes before eating. BOLUS STRATEGY: 70% now, 30% extended over 2-3 hours. MONITORING: Check BG at 1 hour and 3 hours post-meal", + "fpu_dosing_guidance": "FPU LEVEL: Medium (3.4 FPUs). ADDITIONAL INSULIN: Consider 10-15% extra insulin over 2-3 hours for protein. EXTENDED BOLUS: Use dual wave 70%/30% over 2-3 hours. MDI USERS: Main bolus now, small follow-up at 2 hours if needed", + "exercise_considerations": "PRE-EXERCISE: Good energy for cardio if consumed 1-2 hours before. POST-EXERCISE: Excellent recovery meal within 30 minutes. INSULIN ADJUSTMENTS: Reduce total insulin by 20-25% if recent exercise", + "absorption_time_hours": 4, + "absorption_time_reasoning": "Based on high carbs (35g) with medium protein/fat. FPU IMPACT: 3.4 FPUs (Medium) adds 2 hours to baseline. FIBER EFFECT: Low fiber (1.5g) minimal impact. MEAL SIZE: Medium 320 kcal adds 1 hour. RECOMMENDED: 4 hours total (3 hour baseline for complex carbs + 2 FPU hours + 1 size hour - 1 hour reduction for white rice being processed/quick-absorbing)", + "safety_alerts": "High GI rice may cause rapid BG spike - monitor closely at 1 hour. Protein may extend glucose response beyond 3 hours.", + "visual_assessment_details": "Menu text shows 'Teriyaki Chicken Bowl with White Rice'. Cannot assess visual food qualities from menu text alone.", + "overall_description": "Menu item text analysis. No actual food portions visible for assessment.", + "portion_assessment_method": "MENU ANALYSIS ONLY - Cannot determine actual portions without seeing food on plate. All nutrition values are ESTIMATES based on USDA standard serving sizes. Actual restaurant portions may vary significantly." +} + +MIXED GI FOOD COMBINATION EXAMPLE: +If menu shows "Quinoa Bowl with Sweet Potato and Black Beans", respond: +{ + "image_type": "menu_item", + "food_items": [ + { + "name": "Quinoa Bowl with Sweet Potato and Black Beans", + "portion_estimate": "CANNOT DETERMINE - menu text only, no actual food visible", + "usda_serving_size": "1/2 cup cooked quinoa + 1/2 cup sweet potato + 1/2 cup black beans", + "serving_multiplier": 1.0, + "preparation_method": "cooked quinoa, roasted sweet potato, and seasoned black beans as described on menu", + "visual_cues": "NONE - menu text analysis only", + "carbohydrates": 42.0, + "calories": 285, + "fat": 4.0, + "fiber": 8.5, + "protein": 12.0, + "assessment_notes": "ESTIMATE ONLY - Based on USDA standard serving size. Cannot assess actual portions without seeing prepared food on plate." + } + ], + "total_carbohydrates": 42.0, + "total_calories": 285, + "total_fat": 4.0, + "total_fiber": 8.5, + "total_protein": 12.0, + "confidence": 0.8, + "fat_protein_units": "FPUs = (4g fat + 12g protein) ÷ 10 = 1.6 FPUs. Classification: Low FPU meal", + "net_carbs_adjustment": "Net carbs = 42g total carbs - (8.5g fiber × 0.75) = 35.6g effective carbs for insulin dosing (significant fiber reduction)", + "diabetes_considerations": "Based on menu analysis: MIXED GLYCEMIC INDEX meal with balanced components. Quinoa (low-medium GI ~53), sweet potato (medium GI ~54), and black beans (low GI ~30) create favorable combination. High fiber content (estimated 8.5g+) and plant protein (12g) significantly slow carb absorption. For insulin dosing: This meal allows 20-30 minute pre-meal insulin timing due to low-medium GI foods and high fiber. Expect gradual, sustained blood sugar rise over 60-120 minutes rather than sharp spike. Ideal for extended insulin action.", + "insulin_timing_recommendations": "MEAL TYPE: Complex carbs with high fiber. PRE-MEAL INSULIN TIMING: 20-25 minutes before eating. BOLUS STRATEGY: 80% now, 20% extended over 2 hours. MONITORING: Check BG at 2 hours post-meal", + "fpu_dosing_guidance": "FPU LEVEL: Low (1.6 FPUs). ADDITIONAL INSULIN: Minimal extra needed for protein/fat. EXTENDED BOLUS: Use slight tail 80%/20% over 2 hours. MDI USERS: Single injection should suffice", + "exercise_considerations": "PRE-EXERCISE: Excellent sustained energy meal for endurance activities. POST-EXERCISE: Good recovery with complex carbs and plant protein. INSULIN ADJUSTMENTS: Reduce insulin by 15-20% if recent exercise", + "absorption_time_hours": 6, + "absorption_time_reasoning": "Based on complex carbs with high fiber and low FPUs. FPU IMPACT: 1.6 FPUs (Low) adds 1 hour to baseline. FIBER EFFECT: High fiber (8.5g) adds 2 hours due to significant gastric emptying delay. MEAL SIZE: Medium 285 kcal adds 1 hour. RECOMMENDED: 6 hours total (3 hour baseline for complex carbs + 1 FPU hour + 2 fiber hours + 1 size hour) to account for sustained release from high fiber content", + "safety_alerts": "High fiber significantly blunts glucose response - avoid over-dosing insulin. Gradual rise may delay hypoglycemia symptoms.", + "visual_assessment_details": "Menu text shows 'Quinoa Bowl with Sweet Potato and Black Beans'. Cannot assess visual food qualities from menu text alone.", + "overall_description": "Menu item text analysis. No actual food portions visible for assessment.", + "portion_assessment_method": "MENU ANALYSIS ONLY - Cannot determine actual portions without seeing food on plate. All nutrition values are ESTIMATES based on USDA standard serving sizes. Actual restaurant portions may vary significantly." +} +""" + +/// Individual food item analysis with detailed portion assessment +struct FoodItemAnalysis { + let name: String + let portionEstimate: String + let usdaServingSize: String? + let servingMultiplier: Double + let preparationMethod: String? + let visualCues: String? + let carbohydrates: Double + let calories: Double? + let fat: Double? + let fiber: Double? + let protein: Double? + let assessmentNotes: String? + // Optional per-item absorption time (hours) if provided by the AI + let absorptionTimeHours: Double? +} + +/// Type of image being analyzed +enum ImageAnalysisType: String { + case foodPhoto = "food_photo" + case menuItem = "menu_item" +} + +/// Result from AI food analysis with detailed breakdown +struct AIFoodAnalysisResult { + let imageType: ImageAnalysisType? + var foodItemsDetailed: [FoodItemAnalysis] + let overallDescription: String? + let confidence: AIConfidenceLevel + let numericConfidence: Double? + let totalFoodPortions: Int? + let totalUsdaServings: Double? + var totalCarbohydrates: Double + var totalProtein: Double? + var totalFat: Double? + var totalFiber: Double? + var totalCalories: Double? + let portionAssessmentMethod: String? + let diabetesConsiderations: String? + let visualAssessmentDetails: String? + let notes: String? + + // Store original baseline servings for proper scaling calculations + let originalServings: Double + + // Advanced dosing fields (optional for backward compatibility) + let fatProteinUnits: String? + let netCarbsAdjustment: String? + let insulinTimingRecommendations: String? + let fpuDosingGuidance: String? + let exerciseConsiderations: String? + var absorptionTimeHours: Double? + var absorptionTimeReasoning: String? + let mealSizeImpact: String? + let individualizationFactors: String? + let safetyAlerts: String? + + // Legacy compatibility properties + var foodItems: [String] { + return foodItemsDetailed.map { $0.name } + } + + var detailedDescription: String? { + return overallDescription + } + + var portionSize: String { + if foodItemsDetailed.count == 1 { + return foodItemsDetailed.first?.portionEstimate ?? "1 serving" + } else { + // Create concise food summary for multiple items (clean food names) + let foodNames = foodItemsDetailed.map { item in + // Clean up food names by removing technical terms + cleanFoodName(item.name) + } + return foodNames.joined(separator: ", ") + } + } + + // Helper function to clean food names for display + private func cleanFoodName(_ name: String) -> String { + var cleaned = name + + // Remove common technical terms while preserving essential info + let removals = [ + " Breast", " Fillet", " Thigh", " Florets", " Spears", + " Cubes", " Medley", " Portion" + ] + + for removal in removals { + cleaned = cleaned.replacingOccurrences(of: removal, with: "") + } + + // Capitalize first letter and trim + cleaned = cleaned.trimmingCharacters(in: .whitespacesAndNewlines) + if !cleaned.isEmpty { + cleaned = cleaned.prefix(1).uppercased() + cleaned.dropFirst() + } + + return cleaned.isEmpty ? name : cleaned + } + + var servingSizeDescription: String { + if foodItemsDetailed.count == 1 { + return foodItemsDetailed.first?.portionEstimate ?? "1 serving" + } else { + // Return the same clean food names for "Based on" text + let foodNames = foodItemsDetailed.map { item in + cleanFoodName(item.name) + } + return foodNames.joined(separator: ", ") + } + } + + var carbohydrates: Double { + return totalCarbohydrates + } + + var protein: Double? { + return totalProtein + } + + var fat: Double? { + return totalFat + } + + var calories: Double? { + return totalCalories + } + + var fiber: Double? { + return totalFiber + } + + var servings: Double { + return foodItemsDetailed.reduce(0) { $0 + $1.servingMultiplier } + } + + var analysisNotes: String? { + return portionAssessmentMethod + } +} + +/// Confidence level for AI analysis +enum AIConfidenceLevel: String, CaseIterable { + case high = "high" + case medium = "medium" + case low = "low" +} + +/// Errors that can occur during AI food analysis +enum AIFoodAnalysisError: Error, LocalizedError { + case imageProcessingFailed + case requestCreationFailed + case networkError(Error) + case invalidResponse + case invalidResponseFormat + case apiError(Int) + case apiErrorWithMessage(statusCode: Int, message: String) + case responseParsingFailed + case noApiKey + case customError(String) + case configurationError(String) + case creditsExhausted(provider: String) + case rateLimitExceeded(provider: String) + case rateLimitExceededGeneric + case quotaExceeded(provider: String) + case insufficientQuota + case timeout + case invalidModel + case invalidURL(String) + case serverError(String) + + var errorDescription: String? { + switch self { + case .imageProcessingFailed: + return NSLocalizedString("Failed to process image for analysis", comment: "Error when image processing fails") + case .requestCreationFailed: + return NSLocalizedString("Failed to create analysis request", comment: "Error when request creation fails") + case .networkError(let error): + return String(format: NSLocalizedString("Network error: %@", comment: "Error for network failures"), error.localizedDescription) + case .invalidResponse: + return NSLocalizedString("Invalid response from AI service", comment: "Error for invalid API response") + case .invalidResponseFormat: + return NSLocalizedString("Invalid response format from AI service", comment: "Error for invalid response format") + case .apiError(let code): + if code == 400 { + return NSLocalizedString("Invalid API request (400). Please check your API key configuration in FoodFinder Settings.", comment: "Error for 400 API failures") + } else if code == 403 { + return NSLocalizedString("API access forbidden (403). Your API key may be invalid or you've exceeded your quota.", comment: "Error for 403 API failures") + } else if code == 404 { + return NSLocalizedString("AI service not found (404). Please check your API configuration.", comment: "Error for 404 API failures") + } else { + return String(format: NSLocalizedString("AI service error (code: %d)", comment: "Error for API failures"), code) + } + case .apiErrorWithMessage(statusCode: let code, message: let message): + return String(format: NSLocalizedString("AI service error (code: %d): %@", comment: "Error for API failures with message"), code, message) + case .responseParsingFailed: + return NSLocalizedString("Failed to parse AI analysis results", comment: "Error when response parsing fails") + case .noApiKey: + return NSLocalizedString("No API key configured. Please go to FoodFinder Settings to set up your API key.", comment: "Error when API key is missing") + case .customError(let message): + return message + case .configurationError(let message): + return String(format: NSLocalizedString("Configuration error: %@", comment: "Error for configuration issues"), message) + case .creditsExhausted(let provider): + return String(format: NSLocalizedString("%@ credits exhausted. Please check your account billing or add credits to continue using AI food analysis.", comment: "Error when AI provider credits are exhausted"), provider) + case .rateLimitExceeded(let provider): + return String(format: NSLocalizedString("%@ rate limit exceeded. Please wait a moment before trying again.", comment: "Error when AI provider rate limit is exceeded"), provider) + case .rateLimitExceededGeneric: + return NSLocalizedString("Rate limit exceeded. Please wait a moment before trying again.", comment: "Error when rate limit is exceeded") + case .quotaExceeded(let provider): + return String(format: NSLocalizedString("%@ quota exceeded. Please check your usage limits or upgrade your plan.", comment: "Error when AI provider quota is exceeded"), provider) + case .insufficientQuota: + return NSLocalizedString("Insufficient quota. Please check your usage limits or upgrade your plan.", comment: "Error when quota is insufficient") + case .timeout: + return NSLocalizedString("Analysis timed out. Please check your network connection and try again.", comment: "Error when AI analysis times out") + case .invalidModel: + return NSLocalizedString("Invalid or unsupported model specified. Please check your AI configuration.", comment: "Error when model is invalid") + case .invalidURL(let url): + return String(format: NSLocalizedString("Invalid URL: %@", comment: "Error for invalid URL"), url) + case .serverError(let message): + return String(format: NSLocalizedString("Server error: %@", comment: "Error for server failures"), message) + } + } +} + +// MARK: - Search Types + +/// Different types of food searches that can use different providers +enum SearchType: String, CaseIterable { + case textSearch = "Text/Voice Search" + case barcodeSearch = "Barcode Scanning" + case aiImageSearch = "AI Image Analysis" + + var description: String { + switch self { + case .textSearch: + return "Search by typing food names or using voice input" + case .barcodeSearch: + return "Scan product barcodes with camera" + case .aiImageSearch: + return "Take photos of food for AI analysis" + } + } +} + +/// Available providers for different search types +enum SearchProvider: String, CaseIterable { + case claude = "Anthropic (Claude API)" + case googleGemini = "Google (Gemini API)" + case openAI = "OpenAI (ChatGPT API)" + case openFoodFacts = "OpenFoodFacts (Default)" + case usdaFoodData = "USDA FoodData Central" + case bringYourOwn = "BYO (Custom)" + + + var supportsSearchType: [SearchType] { + switch self { + case .claude: + return [.textSearch, .aiImageSearch] + case .googleGemini: + return [.textSearch, .aiImageSearch] + case .openAI: + return [.textSearch, .aiImageSearch] + case .openFoodFacts: + return [.textSearch, .barcodeSearch] + case .usdaFoodData: + return [.textSearch] + case .bringYourOwn: + // Only available for AI Image Analysis + return [.aiImageSearch] + } + } + + var requiresAPIKey: Bool { + switch self { + case .openFoodFacts, .usdaFoodData: + return false + case .claude, .googleGemini, .openAI, .bringYourOwn: + return true + } + } +} + +// MARK: - Confidence Extraction (file-scope helper) + +/// Attempts to extract a numeric confidence score (0.0–1.0) from provider JSON. +/// Accepts numeric values or common string variants such as "high", "medium", etc. +private func extractNumericConfidence(from json: [String: Any]) -> Double? { + let keys = ["confidence", "confidence_score", "accuracy", "confidence_level"] + for key in keys { + if let d = json[key] as? Double { return min(1.0, max(0.0, d)) } + if let s = json[key] as? String { + let ls = s.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + if let v = Double(ls) { return min(1.0, max(0.0, v)) } + switch ls { + case "very high": return 0.9 + case "high": return 0.85 + case "medium", "moderate": return 0.65 + case "low", "very low": return 0.4 + default: break + } + } + } + return nil +} + +// MARK: - Intelligent Caching System + +/// Cache for AI analysis results based on image hashing +class ImageAnalysisCache { + private let cache = NSCache() + private let cacheExpirationTime: TimeInterval = 300 // 5 minutes + + init() { + // Configure cache limits + cache.countLimit = 50 // Maximum 50 cached results + cache.totalCostLimit = 10 * 1024 * 1024 // 10MB limit + } + + /// Cache an analysis result for the given image + func cacheResult(_ result: AIFoodAnalysisResult, for image: UIImage) { + let imageHash = calculateImageHash(image) + let cachedResult = CachedAnalysisResult( + result: result, + timestamp: Date(), + imageHash: imageHash + ) + // Estimate object cost in bytes for effective totalCostLimit behavior + let cost = estimateCostBytes(for: result) + cache.setObject(cachedResult, forKey: imageHash as NSString, cost: cost) + } + + /// Get cached result for the given image if available and not expired + func getCachedResult(for image: UIImage) -> AIFoodAnalysisResult? { + let imageHash = calculateImageHash(image) + + guard let cachedResult = cache.object(forKey: imageHash as NSString) else { + return nil + } + + // Check if cache entry has expired + if Date().timeIntervalSince(cachedResult.timestamp) > cacheExpirationTime { + cache.removeObject(forKey: imageHash as NSString) + return nil + } + + return cachedResult.result + } + + /// Calculate a hash for the image to use as cache key + private func calculateImageHash(_ image: UIImage) -> String { + // Convert image to data and calculate SHA256 hash + guard let imageData = image.jpegData(compressionQuality: 0.8) else { + return UUID().uuidString + } + + let hash = imageData.sha256Hash + return hash + } + + /// Clear all cached results + func clearCache() { + cache.removeAllObjects() + } + + /// Approximate serialized byte size of a result for NSCache cost + private func estimateCostBytes(for result: AIFoodAnalysisResult) -> Int { + var bytes = 0 + // String fields + func addString(_ s: String?) { if let s = s { bytes += s.utf8.count } } + addString(result.overallDescription) + addString(result.portionAssessmentMethod) + addString(result.diabetesConsiderations) + addString(result.visualAssessmentDetails) + addString(result.notes) + addString(result.absorptionTimeReasoning) + addString(result.mealSizeImpact) + addString(result.individualizationFactors) + addString(result.safetyAlerts) + addString(result.fatProteinUnits) + addString(result.netCarbsAdjustment) + addString(result.insulinTimingRecommendations) + addString(result.fpuDosingGuidance) + addString(result.exerciseConsiderations) + // Numbers (8 bytes each as approximation) + func addNum(_ n: Double?) { if n != nil { bytes += 8 } } + addNum(result.totalProtein) + addNum(result.totalFat) + addNum(result.totalFiber) + addNum(result.totalCalories) + addNum(result.absorptionTimeHours) + // Detailed items + for item in result.foodItemsDetailed { + addString(item.name) + addString(item.portionEstimate) + addString(item.usdaServingSize) + addString(item.preparationMethod) + addString(item.visualCues) + addString(item.assessmentNotes) + addNum(item.calories) + addNum(item.fat) + addNum(item.fiber) + addNum(item.protein) + bytes += 8 // carbs + bytes += 8 // servingMultiplier + addNum(item.absorptionTimeHours) + } + // Base overhead + return max(bytes, 1024) + } +} + +extension ImageAnalysisCache { + /// Cache using a preencoded image + provider key (prevents cross‑provider collisions) + func cacheResult(_ result: AIFoodAnalysisResult, forPreencoded pre: PreencodedImage, providerKey: String) { + let key = (pre.sha256 + "|" + providerKey) as NSString + let cached = CachedAnalysisResult(result: result, timestamp: Date(), imageHash: pre.sha256) + let cost = estimateCostBytes(for: result) + cache.setObject(cached, forKey: key, cost: cost) + } + + /// Retrieve cache using a preencoded image key + provider key + func getCachedResult(forPreencoded pre: PreencodedImage, providerKey: String) -> AIFoodAnalysisResult? { + let key = (pre.sha256 + "|" + providerKey) as NSString + guard let cached = cache.object(forKey: key) else { return nil } + if Date().timeIntervalSince(cached.timestamp) > cacheExpirationTime { + cache.removeObject(forKey: key) + return nil + } + return cached.result + } +} + +/// Wrapper for cached analysis results with metadata +private class CachedAnalysisResult { + let result: AIFoodAnalysisResult + let timestamp: Date + let imageHash: String + + init(result: AIFoodAnalysisResult, timestamp: Date, imageHash: String) { + self.result = result + self.timestamp = timestamp + self.imageHash = imageHash + } +} + +/// Extension to calculate SHA256 hash for Data +extension Data { + var sha256Hash: String { + let digest = SHA256.hash(data: self) + return digest.compactMap { String(format: "%02x", $0) }.joined() + } +} + +// MARK: - Configurable AI Service + +/// AI service that allows users to configure their own API keys +class ConfigurableAIService: ObservableObject { + + // MARK: - Singleton + + static let shared = ConfigurableAIService() + + // private let log = OSLog(category: "ConfigurableAIService") + + // MARK: - Published Properties + + @Published var textSearchProvider: SearchProvider = .openFoodFacts + @Published var barcodeSearchProvider: SearchProvider = .openFoodFacts + @Published var aiImageSearchProvider: SearchProvider = .googleGemini + + private init() { + // Load current settings with normalization for legacy strings + let storedText = UserDefaults.standard.textSearchProvider + let storedBarcode = UserDefaults.standard.barcodeSearchProvider + let storedAI = UserDefaults.standard.aiImageProvider + + func normalize(_ raw: String) -> SearchProvider? { + if let p = SearchProvider(rawValue: raw) { return p } + // Legacy aliases + switch raw { + case "OpenFoodFacts": return .openFoodFacts + case "BYO": return .bringYourOwn + case "OpenAI ChatGPT": return .openAI + case "Anthropic Claude": return .claude + case "Google Gemini", "Google (Gemini)": return .googleGemini + default: return nil + } + } + + textSearchProvider = normalize(storedText) ?? .openFoodFacts + barcodeSearchProvider = normalize(storedBarcode) ?? .openFoodFacts + aiImageSearchProvider = normalize(storedAI) ?? .openAI + + // Google Gemini API key should be configured by user + if UserDefaults.standard.googleGeminiAPIKey.isEmpty { + print("⚠️ Google Gemini API key not configured - user needs to set up their own key") + } + } + + // MARK: - Configuration + + enum AIProvider: String, CaseIterable { + case basicAnalysis = "Basic Analysis (Free)" + case claude = "Anthropic (Claude API)" + case googleGemini = "Google (Gemini API)" + case openAI = "OpenAI (ChatGPT API)" + + var requiresAPIKey: Bool { + switch self { + case .basicAnalysis: + return false + case .claude, .googleGemini, .openAI: + return true + } + } + + var requiresCustomURL: Bool { + switch self { + case .basicAnalysis, .claude, .googleGemini, .openAI: + return false + } + } + + var description: String { + switch self { + case .basicAnalysis: + return "Uses built-in food database and basic image analysis. No API key required." + case .claude: + return "Anthropic's Claude AI with excellent reasoning. Requires paid API key from console.anthropic.com." + case .googleGemini: + return "Free API key available at ai.google.dev. Best for detailed food analysis." + case .openAI: + return "Requires paid OpenAI API key. Most accurate for complex meals." + } + } + } + + // MARK: - User Settings + + var currentProvider: AIProvider { + get { AIProvider(rawValue: UserDefaults.standard.aiProvider) ?? .basicAnalysis } + set { UserDefaults.standard.aiProvider = newValue.rawValue } + } + + var isConfigured: Bool { + switch currentProvider { + case .basicAnalysis: + return true // Always available, no configuration needed + case .claude: + return !UserDefaults.standard.claudeAPIKey.isEmpty + case .googleGemini: + return !UserDefaults.standard.googleGeminiAPIKey.isEmpty + case .openAI: + return !UserDefaults.standard.openAIAPIKey.isEmpty + } + } + + // MARK: - Public Methods + + func setAPIKey(_ key: String, for provider: AIProvider) { + switch provider { + case .basicAnalysis: + break // No API key needed for basic analysis + case .claude: + UserDefaults.standard.claudeAPIKey = key + case .googleGemini: + UserDefaults.standard.googleGeminiAPIKey = key + case .openAI: + UserDefaults.standard.openAIAPIKey = key + } + } + + func setAPIURL(_ url: String, for provider: AIProvider) { + switch provider { + case .basicAnalysis, .claude, .googleGemini, .openAI: + break // No custom URL needed + } + } + + func setAPIName(_ name: String, for provider: AIProvider) { + switch provider { + case .basicAnalysis, .claude, .googleGemini, .openAI: + break // No custom name needed + } + } + + func setQuery(_ query: String, for provider: AIProvider) { + switch provider { + case .basicAnalysis: + break // Uses built-in queries + case .claude: + UserDefaults.standard.claudeQuery = query + case .googleGemini: + UserDefaults.standard.googleGeminiQuery = query + case .openAI: + UserDefaults.standard.openAIQuery = query + } + } + + func setAnalysisMode(_ mode: AnalysisMode) { + analysisMode = mode + UserDefaults.standard.analysisMode = mode.rawValue + } + + func getAPIKey(for provider: AIProvider) -> String? { + switch provider { + case .basicAnalysis: + return nil // No API key needed + case .claude: + let key = UserDefaults.standard.claudeAPIKey + return key.isEmpty ? nil : key + case .googleGemini: + let key = UserDefaults.standard.googleGeminiAPIKey + return key.isEmpty ? nil : key + case .openAI: + let key = UserDefaults.standard.openAIAPIKey + return key.isEmpty ? nil : key + } + } + + func getAPIURL(for provider: AIProvider) -> String? { + switch provider { + case .basicAnalysis, .claude, .googleGemini, .openAI: + return nil + } + } + + func getAPIName(for provider: AIProvider) -> String? { + switch provider { + case .basicAnalysis, .claude, .googleGemini, .openAI: + return nil + } + } + + func getQuery(for provider: AIProvider) -> String? { + switch provider { + case .basicAnalysis: + return "Analyze this food image and estimate nutritional content based on visual appearance and portion size." + case .claude: + return UserDefaults.standard.claudeQuery + case .googleGemini: + return UserDefaults.standard.googleGeminiQuery + case .openAI: + return UserDefaults.standard.openAIQuery + } + } + + /// Reset to default Basic Analysis provider (useful for troubleshooting) + func resetToDefault() { + currentProvider = .basicAnalysis + print("🔄 Reset AI provider to default: \(currentProvider.rawValue)") + } + + // MARK: - Search Type Configuration + + func getProviderForSearchType(_ searchType: SearchType) -> SearchProvider { + // Retrieve the configured provider + let configured: SearchProvider = { + switch searchType { + case .textSearch: return textSearchProvider + case .barcodeSearch: return barcodeSearchProvider + case .aiImageSearch: return aiImageSearchProvider + } + }() + + // If the configured provider does not support this search type (e.g., BYO for text/barcode), + // fall back to a sensible default and persist the correction. + if !configured.supportsSearchType.contains(searchType) { + let fallback: SearchProvider + switch searchType { + case .textSearch: + fallback = .openFoodFacts + textSearchProvider = fallback + UserDefaults.standard.textSearchProvider = fallback.rawValue + case .barcodeSearch: + fallback = .openFoodFacts + barcodeSearchProvider = fallback + UserDefaults.standard.barcodeSearchProvider = fallback.rawValue + case .aiImageSearch: + fallback = .googleGemini + aiImageSearchProvider = fallback + UserDefaults.standard.aiImageProvider = fallback.rawValue + } + return fallback + } + + return configured + } + + func setProviderForSearchType(_ provider: SearchProvider, searchType: SearchType) { + switch searchType { + case .textSearch: + textSearchProvider = provider + UserDefaults.standard.textSearchProvider = provider.rawValue + case .barcodeSearch: + barcodeSearchProvider = provider + UserDefaults.standard.barcodeSearchProvider = provider.rawValue + case .aiImageSearch: + aiImageSearchProvider = provider + UserDefaults.standard.aiImageProvider = provider.rawValue + } + + } + + func getAvailableProvidersForSearchType(_ searchType: SearchType) -> [SearchProvider] { + return SearchProvider.allCases + .filter { $0.supportsSearchType.contains(searchType) } + .sorted { $0.rawValue < $1.rawValue } + } + + /// Get a summary of current provider configuration + func getProviderConfigurationSummary() -> String { + let textProvider = getProviderForSearchType(.textSearch).rawValue + let barcodeProvider = getProviderForSearchType(.barcodeSearch).rawValue + let aiProvider = getProviderForSearchType(.aiImageSearch).rawValue + + return """ + Search Configuration: + • Text/Voice: \(textProvider) + • Barcode: \(barcodeProvider) + • AI Image: \(aiProvider) + """ + } + + /// Convert AI image search provider to AIProvider for image analysis + private func getAIProviderForImageAnalysis() -> AIProvider { + switch aiImageSearchProvider { + case .claude: + return .claude + case .googleGemini: + return .googleGemini + case .openAI: + return .openAI + case .openFoodFacts, .usdaFoodData: + // These don't support image analysis, fallback to basic + return .basicAnalysis + case .bringYourOwn: + // BYO is not enabled for image analysis; use basic to avoid confusion + return .basicAnalysis + } + } + + /// Analyze food image using the configured provider with intelligent caching + func analyzeFoodImage(_ image: UIImage) async throws -> AIFoodAnalysisResult { + return try await analyzeFoodImage(image, telemetryCallback: nil) + } + + /// Analyze food image with telemetry callbacks for progress tracking + func analyzeFoodImage(_ image: UIImage, telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + // Pre-encode once to reuse across providers and caching + telemetryCallback?("🖼️ Preparing image once for all providers...") + let pre = await ConfigurableAIService.preencodeImageForProviders(image) + + let originalWidth = Int((image.size.width * image.scale).rounded()) + let originalHeight = Int((image.size.height * image.scale).rounded()) + if pre.width > 0, pre.height > 0, + (pre.width != originalWidth || pre.height != originalHeight) { + telemetryCallback?("✂️ Optimized image to \(pre.width)×\(pre.height) px (was \(originalWidth)×\(originalHeight))") + } + telemetryCallback?(String(format: "🗜️ Encoded upload ≈ %.0f KB", Double(pre.bytes) / 1024.0)) + + // If BYO is selected for image analysis, run custom OpenAI-compatible path directly + if aiImageSearchProvider == .bringYourOwn { + telemetryCallback?("🤖 Connecting to your chosen AI provider...") + // Prefer temporary BYO test override if enabled (DEBUG), else UserDefaults. + let key: String + let base: String + let model: String? + let version: String? + let org: String? + + if BYOTestConfig.enabled { + key = BYOTestConfig.apiKey + base = BYOTestConfig.baseURL + model = BYOTestConfig.model + version = BYOTestConfig.apiVersion + org = BYOTestConfig.organizationID + } else { + key = UserDefaults.standard.customAIAPIKey + base = UserDefaults.standard.customAIBaseURL + let m = UserDefaults.standard.customAIModel + let v = UserDefaults.standard.customAIAPIVersion + let o = UserDefaults.standard.customAIOrganization + model = m.isEmpty ? nil : m + version = v.isEmpty ? nil : v + org = o.isEmpty ? nil : o + } + + guard !key.isEmpty, !base.isEmpty else { + print("❌ BYO AI not configured for image analysis") + throw AIFoodAnalysisError.noApiKey + } + // Use empty query to apply our optimized internal prompts + let adv = UserDefaults.standard.advancedDosingRecommendationsEnabled ? "adv" : "std" + let modeKey = analysisMode.rawValue + let byoKey = [BYOTestConfig.enabled ? "BYO_TEST" : "BYO", + base, + model ?? "", + version ?? "", + adv, + "mode=\(modeKey)"] + .joined(separator: "|") + + if let cached = imageAnalysisCache.getCachedResult(forPreencoded: pre, providerKey: byoKey) { + telemetryCallback?("⚡ Using cached BYO analysis result") + return cached + } + + let result = try await OpenAIFoodAnalysisService.shared.analyzeFoodImage( + image, + apiKey: key, + query: "", + baseURL: base, + model: model, + apiVersion: version, + organizationID: org, + customPath: UserDefaults.standard.customAIEndpointPath.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? nil : UserDefaults.standard.customAIEndpointPath, + telemetryCallback: telemetryCallback, + preencoded: pre + ) + // Cache BYO using provider-specific key (base|model|version|adv|mode) + imageAnalysisCache.cacheResult(result, forPreencoded: pre, providerKey: byoKey) + return result + } + + // Use the AI image search provider instead of the separate currentProvider + let provider = getAIProviderForImageAnalysis() + let advFlag = UserDefaults.standard.advancedDosingRecommendationsEnabled ? "adv" : "std" + let modelForCache: String = { + switch provider { + case .claude: + return ConfigurableAIService.optimalModel(for: .claude, mode: analysisMode) + case .googleGemini: + return ConfigurableAIService.optimalModel(for: .googleGemini, mode: analysisMode) + case .openAI: + return ConfigurableAIService.optimalModel(for: .openAI, mode: analysisMode) + case .basicAnalysis: + return "basic" + } + }() + let providerKey = [provider.rawValue, + modelForCache, + advFlag, + "mode=\(analysisMode.rawValue)"].joined(separator: "|") + + if let cached = imageAnalysisCache.getCachedResult(forPreencoded: pre, providerKey: providerKey) { + telemetryCallback?("⚡ Using cached \(provider.rawValue) analysis") + return cached + } + + let result: AIFoodAnalysisResult + + switch provider { + case .basicAnalysis: + telemetryCallback?("🧠 Running basic analysis...") + result = try await BasicFoodAnalysisService.shared.analyzeFoodImage(image, telemetryCallback: telemetryCallback) + case .claude: + let key = UserDefaults.standard.claudeAPIKey + // Use empty query to ensure only optimized prompts are used for performance + let query = "" + guard !key.isEmpty else { + print("❌ Claude API key not configured") + throw AIFoodAnalysisError.noApiKey + } + telemetryCallback?("🤖 Connecting to Claude AI...") + result = try await ClaudeFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query, telemetryCallback: telemetryCallback, preencoded: pre) + case .googleGemini: + let key = UserDefaults.standard.googleGeminiAPIKey + // Use empty query to ensure only optimized prompts are used for performance + let query = "" + guard !key.isEmpty else { + print("❌ Google Gemini API key not configured") + throw AIFoodAnalysisError.noApiKey + } + telemetryCallback?("🤖 Connecting to Google Gemini...") + result = try await GoogleGeminiFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query, telemetryCallback: telemetryCallback, preencoded: pre) + case .openAI: + let key = UserDefaults.standard.openAIAPIKey + // Use empty query to ensure only optimized prompts are used for performance + let query = "" + guard !key.isEmpty else { + print("❌ OpenAI API key not configured") + throw AIFoodAnalysisError.noApiKey + } + telemetryCallback?("🤖 Connecting to OpenAI...") + result = try await OpenAIFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query, telemetryCallback: telemetryCallback, preencoded: pre) + } + + telemetryCallback?("💾 Caching analysis result...") + imageAnalysisCache.cacheResult(result, forPreencoded: pre, providerKey: providerKey) + + return result + } + + // MARK: - Text Processing Helper Methods + + /// Centralized list of unwanted prefixes that AI commonly adds to food descriptions + /// Add new prefixes here as edge cases are discovered - this is the SINGLE source of truth + static let unwantedFoodPrefixes = [ + "of ", + "with ", + "contains ", + "includes ", + "featuring ", + "consisting of ", + "made of ", + "composed of ", + "a plate of ", + "a bowl of ", + "a serving of ", + "a portion of ", + "some ", + "several ", + "multiple ", + "various ", + "an ", + "a ", + "the ", + "- ", + "– ", + "— ", + "this is ", + "there is ", + "there are ", + "i see ", + "appears to be ", + "looks like " + ] + + /// Adaptive image compression based on image size for optimal performance + static func adaptiveCompressionQuality(for image: UIImage) -> CGFloat { + let imagePixels = image.size.width * image.size.height + + // Adaptive compression: larger images need more compression for faster uploads + switch imagePixels { + case 0..<500_000: // Small images (< 500k pixels) + return 0.9 + case 500_000..<1_000_000: // Medium images (500k-1M pixels) + return 0.8 + default: // Large images (> 1M pixels) + return 0.7 + } + } + + /// Analysis mode for speed vs accuracy trade-offs + enum AnalysisMode: String, CaseIterable { + case standard = "standard" + case fast = "fast" + + var displayName: String { + switch self { + case .standard: + return "Standard Quality" + case .fast: + return "Fast Mode" + } + } + + var description: String { + switch self { + case .standard: + return "Highest accuracy, slower processing" + case .fast: + return "Good accuracy, 50-70% faster" + } + } + + var detailedDescription: String { + let gpt5Enabled = UserDefaults.standard.useGPT5ForOpenAI + + switch self { + case .standard: + let openAIModel = gpt5Enabled ? "GPT-5" : "GPT-4o" + return "Uses full AI models (\(openAIModel), Gemini-1.5-Pro, Claude-3.5-Sonnet) for maximum accuracy. Best for complex meals with multiple components." + case .fast: + let openAIModel = gpt5Enabled ? "GPT-5-nano" : "GPT-4o-mini" + return "Uses optimized models (\(openAIModel), Gemini-1.5-Flash) for faster analysis. 2-3x faster with ~5-10% accuracy trade-off. Great for simple meals." + } + } + + var iconName: String { + switch self { + case .standard: + return "target" + case .fast: + return "bolt.fill" + } + } + + var iconColor: Color { + switch self { + case .standard: + return .blue + case .fast: + return .orange + } + } + + var backgroundColor: Color { + switch self { + case .standard: + return Color(.systemBlue).opacity(0.08) + case .fast: + return Color(.systemOrange).opacity(0.08) + } + } + } + + /// Current analysis mode setting + @Published var analysisMode: AnalysisMode = AnalysisMode(rawValue: UserDefaults.standard.analysisMode) ?? .standard + + /// Enable parallel processing for fastest results + @Published var enableParallelProcessing: Bool = false + + /// Intelligent caching system for AI analysis results + private var imageAnalysisCache = ImageAnalysisCache() + + /// Provider-specific optimized timeouts for better performance and user experience + static func optimalTimeout(for provider: SearchProvider) -> TimeInterval { + switch provider { + case .googleGemini: + return 15 // Free tier optimization - faster but may timeout on complex analysis + case .openAI: + // Check if using GPT-5 models which need more time + if UserDefaults.standard.useGPT5ForOpenAI { + return 60 // GPT-5 models need significantly more time for processing + } else { + return 20 // GPT-4o models - good balance of speed and reliability + } + case .bringYourOwn: + // Default to OpenAI-like timeout; can be tuned per service + return 20 + case .claude: + return 25 // Highest quality responses but slower processing + case .openFoodFacts, .usdaFoodData: + return 10 // Simple API calls should be fast + } + } + + /// Get optimal model for provider and analysis mode + static func optimalModel(for provider: SearchProvider, mode: AnalysisMode) -> String { + switch (provider, mode) { + case (.googleGemini, .standard): + return "gemini-1.5-pro" + case (.googleGemini, .fast): + return "gemini-1.5-flash" // ~2x faster + case (.openAI, .standard): + // Use GPT-5 if user enabled it, otherwise use GPT-4o + return UserDefaults.standard.useGPT5ForOpenAI ? "gpt-5" : "gpt-4o" + case (.openAI, .fast): + // Use GPT-5-nano for fastest analysis if user enabled GPT-5, otherwise use GPT-4o-mini + return UserDefaults.standard.useGPT5ForOpenAI ? "gpt-5-nano" : "gpt-4o-mini" + case (.claude, .standard): + return "claude-3-5-sonnet-20241022" + case (.claude, .fast): + return "claude-3-haiku-20240307" // ~2x faster + default: + return "" // Not applicable for non-AI providers + } + } + + /// Safe async image optimization to prevent main thread blocking + static func optimizeImageForAnalysisSafely(_ image: UIImage) async -> UIImage { + return await withCheckedContinuation { continuation in + // Process image on background thread to prevent UI freezing + DispatchQueue.global(qos: .userInitiated).async { + let optimized = optimizeImageForAnalysis(image) + continuation.resume(returning: optimized) + } + } + } + + /// Intelligent image resizing for optimal AI analysis performance + static func optimizeImageForAnalysis(_ image: UIImage) -> UIImage { + let trimmed = cropUniformBorder(from: image) + let usingGPT5 = UserDefaults.standard.useGPT5ForOpenAI + let maxDimension: CGFloat = usingGPT5 ? 896 : 1024 + + if trimmed.size.width <= maxDimension && trimmed.size.height <= maxDimension { + return trimmed + } + + let scale = maxDimension / max(trimmed.size.width, trimmed.size.height) + let newSize = CGSize(width: trimmed.size.width * scale, + height: trimmed.size.height * scale) + + return resizeImage(trimmed, to: newSize) + } + + /// Pre-encode an image once for all providers with a byte budget + /// - Parameters: + /// - image: source image + /// - targetBytes: desired upper bound in bytes (default ~450 KB) + /// - Returns: PreencodedImage with JPEG data, base64, and SHA256 + static func preencodeImageForProviders(_ image: UIImage, targetBytes: Int = 450 * 1024) async -> PreencodedImage { + // Respect user cancellation before heavy work + try? Task.checkCancellation() + let optimized = await optimizeImageForAnalysisSafely(image) + try? Task.checkCancellation() + let byteBudget: Int = { + if UserDefaults.standard.useGPT5ForOpenAI { + return min(targetBytes, 320 * 1024) + } + return targetBytes + }() + // Binary search JPEG quality + var low: CGFloat = 0.35 + var high: CGFloat = 0.95 + var bestData: Data? = nil + for _ in 0..<7 { // ~7 iters is enough + if Task.isCancelled { break } + let mid = (low + high) / 2 + if let d = optimized.jpegData(compressionQuality: mid) { + if d.count > byteBudget { + high = mid + } else { + bestData = d + low = mid + } + } else { + break + } + } + var finalImage = optimized + var data = bestData ?? (optimized.jpegData(compressionQuality: 0.75) ?? Data()) + // If still above target, downscale once and retry quickly at a safe quality + if data.count > byteBudget { + try? Task.checkCancellation() + let scale: CGFloat = 0.85 + let newSize = CGSize(width: optimized.size.width * scale, height: optimized.size.height * scale) + let downsized = resizeImage(optimized, to: newSize) + finalImage = downsized + data = downsized.jpegData(compressionQuality: 0.7) ?? data + } + let base64 = data.base64EncodedString() + let sha = data.sha256Hash + return PreencodedImage( + resizedImage: finalImage, + jpegData: data, + base64: base64, + sha256: sha, + bytes: data.count, + width: Int(finalImage.size.width), + height: Int(finalImage.size.height) + ) + } + + /// High-quality image resizing helper + private static func resizeImage(_ image: UIImage, to newSize: CGSize) -> UIImage { + UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0) + defer { UIGraphicsEndImageContext() } + + image.draw(in: CGRect(origin: .zero, size: newSize)) + return UIGraphicsGetImageFromCurrentImageContext() ?? image + } + + /// Trim near-uniform borders (e.g., table, counter, plain backgrounds) to reduce upload size + private static func cropUniformBorder(from image: UIImage) -> UIImage { + guard let cgImage = image.cgImage else { return image } + let width = cgImage.width + let height = cgImage.height + guard width > 32, height > 32 else { return image } + + let bytesPerPixel = 4 + let bytesPerRow = bytesPerPixel * width + let colorSpace = CGColorSpaceCreateDeviceRGB() + var rawData = [UInt8](repeating: 0, count: Int(bytesPerRow * height)) + + guard let context = CGContext(data: &rawData, + width: width, + height: height, + bitsPerComponent: 8, + bytesPerRow: bytesPerRow, + space: colorSpace, + bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValue) else { + return image + } + + // Ensure row 0 maps to the top edge + context.translateBy(x: 0, y: CGFloat(height)) + context.scaleBy(x: 1, y: -1) + context.draw(cgImage, in: CGRect(x: 0, y: 0, width: CGFloat(width), height: CGFloat(height))) + + @inline(__always) + func pixelOffset(x: Int, y: Int) -> Int { + y * bytesPerRow + x * bytesPerPixel + } + + @inline(__always) + func sampleRGB(x: Int, y: Int) -> (Double, Double, Double) { + let offset = pixelOffset(x: x, y: y) + let r = Double(rawData[offset]) / 255.0 + let g = Double(rawData[offset + 1]) / 255.0 + let b = Double(rawData[offset + 2]) / 255.0 + return (r, g, b) + } + + // Derive background color from corners and mid-edges + let samplePoints: [(Int, Int)] = [ + (0, 0), (width - 1, 0), (0, height - 1), (width - 1, height - 1), + (width / 2, 0), (width / 2, height - 1), (0, height / 2), (width - 1, height / 2) + ] + var bgR = 0.0, bgG = 0.0, bgB = 0.0 + for point in samplePoints { + let (r, g, b) = sampleRGB(x: max(0, min(width - 1, point.0)), + y: max(0, min(height - 1, point.1))) + bgR += r + bgG += g + bgB += b + } + let sampleCount = Double(samplePoints.count) + bgR /= sampleCount + bgG /= sampleCount + bgB /= sampleCount + + let tolerance = 0.08 + @inline(__always) + func isBackground(_ color: (Double, Double, Double)) -> Bool { + let dr = abs(color.0 - bgR) + let dg = abs(color.1 - bgG) + let db = abs(color.2 - bgB) + return dr < tolerance && dg < tolerance && db < tolerance + } + + let sampleStride = max(1, min(width, height) / 300) + var edgeSamples = 0 + var edgeMatches = 0 + + func countEdgeMatches(xRange: StrideThrough, fixedY: Int) { + for x in xRange { + let rgb = sampleRGB(x: x, y: fixedY) + if isBackground(rgb) { edgeMatches += 1 } + edgeSamples += 1 + } + } + + func countEdgeMatchesVertical(yRange: StrideThrough, fixedX: Int) { + for y in yRange { + let rgb = sampleRGB(x: fixedX, y: y) + if isBackground(rgb) { edgeMatches += 1 } + edgeSamples += 1 + } + } + + let horizontalRange = stride(from: 0, through: width - 1, by: sampleStride) + let verticalRange = stride(from: 0, through: height - 1, by: sampleStride) + countEdgeMatches(xRange: horizontalRange, fixedY: 0) + countEdgeMatches(xRange: horizontalRange, fixedY: height - 1) + countEdgeMatchesVertical(yRange: verticalRange, fixedX: 0) + countEdgeMatchesVertical(yRange: verticalRange, fixedX: width - 1) + + if edgeSamples == 0 || Double(edgeMatches) / Double(edgeSamples) < 0.65 { + return image + } + + func rowHasContent(_ y: Int) -> Bool { + var nonBackground = 0 + var total = 0 + for x in stride(from: 0, to: width, by: sampleStride) { + let rgb = sampleRGB(x: x, y: y) + if !isBackground(rgb) { nonBackground += 1 } + total += 1 + if nonBackground > max(1, total / 12) { return true } + } + return false + } + + func columnHasContent(_ x: Int) -> Bool { + var nonBackground = 0 + var total = 0 + for y in stride(from: 0, to: height, by: sampleStride) { + let rgb = sampleRGB(x: x, y: y) + if !isBackground(rgb) { nonBackground += 1 } + total += 1 + if nonBackground > max(1, total / 12) { return true } + } + return false + } + + var top = 0 + while top < height && !rowHasContent(top) { + top += sampleStride + } + + var bottom = height - 1 + while bottom > top && !rowHasContent(bottom) { + bottom -= sampleStride + } + + var left = 0 + while left < width && !columnHasContent(left) { + left += sampleStride + } + + var right = width - 1 + while right > left && !columnHasContent(right) { + right -= sampleStride + } + + if top <= 0 && left <= 0 && bottom >= height - 1 && right >= width - 1 { + return image + } + + let margin = max(sampleStride, Int(Double(min(width, height)) * 0.02)) + top = max(0, top - margin) + left = max(0, left - margin) + bottom = min(height - 1, bottom + margin) + right = min(width - 1, right + margin) + + let cropWidth = right - left + 1 + let cropHeight = bottom - top + 1 + guard cropWidth > 0, cropHeight > 0 else { return image } + + let cropRect = CGRect(x: left, y: top, width: cropWidth, height: cropHeight) + guard let cropped = cgImage.cropping(to: cropRect) else { return image } + + return UIImage(cgImage: cropped, scale: image.scale, orientation: image.imageOrientation) + } + + /// Analyze image with network-aware provider strategy + func analyzeImageWithParallelProviders(_ image: UIImage, telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + return try await analyzeImageWithParallelProviders(image, query: "", telemetryCallback: telemetryCallback) + } + + func analyzeImageWithParallelProviders(_ image: UIImage, query: String = "", telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + let networkMonitor = NetworkQualityMonitor.shared + telemetryCallback?("🌐 Analyzing network conditions...") + + // Get available providers that support AI analysis + let availableProviders: [SearchProvider] = [.googleGemini, .openAI, .claude].filter { provider in + // Only include providers that have API keys configured + switch provider { + case .googleGemini: + return !UserDefaults.standard.googleGeminiAPIKey.isEmpty + case .openAI: + return !UserDefaults.standard.openAIAPIKey.isEmpty + case .claude: + return !UserDefaults.standard.claudeAPIKey.isEmpty + default: + return false + } + } + + guard !availableProviders.isEmpty else { + throw AIFoodAnalysisError.noApiKey + } + + // Check network conditions and decide strategy + if networkMonitor.shouldUseParallelProcessing && availableProviders.count > 1 { + print("🌐 Good network detected, using parallel processing with \(availableProviders.count) providers") + telemetryCallback?("⚡ Starting parallel AI provider analysis...") + return try await analyzeWithParallelStrategy(image, providers: availableProviders, query: query, telemetryCallback: telemetryCallback) + } else { + print("🌐 Poor network detected, using sequential processing") + telemetryCallback?("🔄 Starting sequential AI provider analysis...") + return try await analyzeWithSequentialStrategy(image, providers: availableProviders, query: query, telemetryCallback: telemetryCallback) + } + } + + /// Parallel strategy for good networks + private func analyzeWithParallelStrategy(_ image: UIImage, providers: [SearchProvider], query: String, telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + // Use the maximum timeout from all providers, with special handling for GPT-5 + let timeout = providers.map { provider in + max(ConfigurableAIService.optimalTimeout(for: provider), NetworkQualityMonitor.shared.recommendedTimeout) + }.max() ?? NetworkQualityMonitor.shared.recommendedTimeout + + return try await withThrowingTaskGroup(of: AIFoodAnalysisResult.self) { group in + // Add timeout wrapper for each provider + for provider in providers { + group.addTask { [weak self] in + guard let self = self else { throw AIFoodAnalysisError.invalidResponse } + return try await withTimeoutForAnalysis(seconds: timeout) { + let startTime = Date() + do { + let result = try await self.analyzeWithSingleProvider(image, provider: provider, query: query) + let duration = Date().timeIntervalSince(startTime) + print("✅ \(provider.rawValue) succeeded in \(String(format: "%.1f", duration))s") + return result + } catch { + let duration = Date().timeIntervalSince(startTime) + print("❌ \(provider.rawValue) failed after \(String(format: "%.1f", duration))s: \(error.localizedDescription)") + throw error + } + } + } + } + + // Return the first successful result + guard let result = try await group.next() else { + throw AIFoodAnalysisError.invalidResponse + } + + // Cancel remaining tasks since we got our result + group.cancelAll() + + return result + } + } + + /// Sequential strategy for poor networks - tries providers one by one + private func analyzeWithSequentialStrategy(_ image: UIImage, providers: [SearchProvider], query: String, telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + // Use provider-specific timeout, with special handling for GPT-5 + let baseTimeout = NetworkQualityMonitor.shared.recommendedTimeout + var lastError: Error? + + // Try providers one by one until one succeeds + for provider in providers { + do { + // Use provider-specific timeout for each provider + let providerTimeout = max(ConfigurableAIService.optimalTimeout(for: provider), baseTimeout) + print("🔄 Trying \(provider.rawValue) sequentially with \(providerTimeout)s timeout...") + telemetryCallback?("🤖 Trying \(provider.rawValue)...") + let result = try await withTimeoutForAnalysis(seconds: providerTimeout) { + try await self.analyzeWithSingleProvider(image, provider: provider, query: query) + } + print("✅ \(provider.rawValue) succeeded in sequential mode") + return result + } catch { + print("❌ \(provider.rawValue) failed in sequential mode: \(error.localizedDescription)") + lastError = error + // Continue to next provider + } + } + + // If all providers failed, throw the last error + throw lastError ?? AIFoodAnalysisError.invalidResponse + } + + /// Analyze with a single provider (helper for parallel processing) + private func analyzeWithSingleProvider(_ image: UIImage, provider: SearchProvider, query: String) async throws -> AIFoodAnalysisResult { + switch provider { + case .googleGemini: + return try await GoogleGeminiFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: UserDefaults.standard.googleGeminiAPIKey, query: query, telemetryCallback: nil) + case .openAI: + return try await OpenAIFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: UserDefaults.standard.openAIAPIKey, query: query, telemetryCallback: nil) + case .claude: + return try await ClaudeFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: UserDefaults.standard.claudeAPIKey, query: query, telemetryCallback: nil) + default: + throw AIFoodAnalysisError.invalidResponse + } + } + + /// Public static method to clean food text - can be called from anywhere + static func cleanFoodText(_ text: String?) -> String? { + guard let text = text else { return nil } + + var cleaned = text.trimmingCharacters(in: .whitespacesAndNewlines) + + + // Keep removing prefixes until none match (handles multiple prefixes) + var foundPrefix = true + var iterationCount = 0 + while foundPrefix && iterationCount < 10 { // Prevent infinite loops + foundPrefix = false + iterationCount += 1 + + for prefix in unwantedFoodPrefixes { + if cleaned.lowercased().hasPrefix(prefix.lowercased()) { + cleaned = String(cleaned.dropFirst(prefix.count)) + cleaned = cleaned.trimmingCharacters(in: .whitespacesAndNewlines) + foundPrefix = true + break + } + } + } + + // Capitalize first letter + if !cleaned.isEmpty { + cleaned = cleaned.prefix(1).uppercased() + cleaned.dropFirst() + } + + return cleaned.isEmpty ? nil : cleaned + } + + /// Cleans AI description text by removing unwanted prefixes and ensuring proper capitalization + private func cleanAIDescription(_ description: String?) -> String? { + return Self.cleanFoodText(description) + } +} + + + +/// Parse OpenAI response content into AIFoodAnalysisResult +private func parseOpenAIResponse(content: String) throws -> AIFoodAnalysisResult { + // Helper functions for parsing + func extractString(from json: [String: Any], keys: [String]) -> String? { + for key in keys { + if let value = json[key] as? String, !value.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return value.trimmingCharacters(in: .whitespacesAndNewlines) + } + } + return nil + } + + func extractNumber(from json: [String: Any], keys: [String]) -> Double? { + for key in keys { + if let value = json[key] as? Double { + return value + } else if let value = json[key] as? Int { + return Double(value) + } else if let value = json[key] as? String, let doubleValue = Double(value) { + return doubleValue + } + } + return nil + } + + func extractConfidence(from json: [String: Any]) -> AIConfidenceLevel { + let confidenceKeys = ["confidence", "confidence_level", "accuracy"] + for key in confidenceKeys { + if let value = json[key] as? Double { + if value >= 0.8 { return .high } + else if value >= 0.6 { return .medium } + else { return .low } + } else if let value = json[key] as? String { + switch value.lowercased() { + case "high", "very high": return .high + case "medium", "moderate": return .medium + case "low", "very low": return .low + default: break + } + } + } + return .medium + } + + func extractNumericConfidence(from json: [String: Any]) -> Double? { + let keys = ["confidence", "confidence_score", "accuracy", "confidence_level"] + for key in keys { + if let d = json[key] as? Double { return min(1.0, max(0.0, d)) } + if let s = json[key] as? String { + let ls = s.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + if let v = Double(ls) { return min(1.0, max(0.0, v)) } + switch ls { + case "very high": return 0.9 + case "high": return 0.85 + case "medium", "moderate": return 0.65 + case "low", "very low": return 0.4 + default: break + } + } + } + return nil + } + + // Extract JSON from response + let cleanedContent = content.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "```json", with: "") + .replacingOccurrences(of: "```", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + + // Find JSON boundaries + var jsonString: String + if let jsonStartRange = cleanedContent.range(of: "{"), + let jsonEndRange = cleanedContent.range(of: "}", options: .backwards), + jsonStartRange.lowerBound < jsonEndRange.upperBound { + jsonString = String(cleanedContent[jsonStartRange.lowerBound.. 0 ? totalProtein : nil, + totalFat: totalFat > 0 ? totalFat : nil, + totalFiber: totalFiber, + totalCalories: totalCalories > 0 ? totalCalories : nil, + portionAssessmentMethod: extractString(from: nutritionData, keys: ["portion_assessment_method"]), + diabetesConsiderations: extractString(from: nutritionData, keys: ["diabetes_considerations"]), + visualAssessmentDetails: extractString(from: nutritionData, keys: ["visual_assessment_details"]), + notes: "GPT-4o fallback analysis after GPT-5 timeout", + originalServings: originalServings, + fatProteinUnits: extractString(from: nutritionData, keys: ["fat_protein_units"]), + netCarbsAdjustment: extractString(from: nutritionData, keys: ["net_carbs_adjustment"]), + insulinTimingRecommendations: extractString(from: nutritionData, keys: ["insulin_timing_recommendations"]), + fpuDosingGuidance: extractString(from: nutritionData, keys: ["fpu_dosing_guidance"]), + exerciseConsiderations: extractString(from: nutritionData, keys: ["exercise_considerations"]), + absorptionTimeHours: absorptionHours, + absorptionTimeReasoning: extractString(from: nutritionData, keys: ["absorption_time_reasoning"]), + mealSizeImpact: extractString(from: nutritionData, keys: ["meal_size_impact"]), + individualizationFactors: extractString(from: nutritionData, keys: ["individualization_factors"]), + safetyAlerts: extractString(from: nutritionData, keys: ["safety_alerts"]) + ) +} + +// MARK: - OpenAI Service (Alternative) + +class OpenAIFoodAnalysisService { + static let shared = OpenAIFoodAnalysisService() + private init() { + // Preconfigure sessions for OpenAI-compatible endpoints + self.sessionOpenAI = OpenAIFoodAnalysisService.makeSession(timeout: 60) + self.sessionAzure = OpenAIFoodAnalysisService.makeSession(timeout: 90) + } + + private static func makeSession(timeout: TimeInterval) -> URLSession { + let config = URLSessionConfiguration.default + config.timeoutIntervalForRequest = timeout + config.timeoutIntervalForResource = timeout * 2 + config.waitsForConnectivity = true + config.allowsCellularAccess = true + config.httpMaximumConnectionsPerHost = 2 + config.httpShouldSetCookies = false + config.httpCookieAcceptPolicy = .never + return URLSession(configuration: config) + } + + private let sessionOpenAI: URLSession + private let sessionAzure: URLSession + + private struct OpenAIModelList: Decodable { + struct Model: Decodable { let id: String } + let data: [Model] + } + + // Normalizes a custom endpoint path to ensure it begins with a single '/' + private func normalizedPath(_ path: String?) -> String { + guard let raw = path?.trimmingCharacters(in: .whitespacesAndNewlines), !raw.isEmpty else { + return "/v1/chat/completions" + } + return raw.hasPrefix("/") ? raw : "/" + raw + } + + // Safely build Azure Chat Completions URL, encoding the deployment as a path component + private func buildAzureChatCompletionsURL(baseURL: String, deployment: String, apiVersion: String) -> URL? { + let trimmed = baseURL.trimmingCharacters(in: .whitespacesAndNewlines).trimmingCharacters(in: CharacterSet(charactersIn: "/")) + let encodedDeployment = deployment.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? deployment + let full = "\(trimmed)/openai/deployments/\(encodedDeployment)/chat/completions?api-version=\(apiVersion)" + return URL(string: full) + } + + func ensureGPT5Availability(apiKey: String, organizationID: String?) async throws { + let trimmedKey = apiKey.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmedKey.isEmpty else { + throw AIFoodAnalysisError.customError("OpenAI API key required to enable GPT-5 models.") + } + + guard let url = URL(string: "https://api.openai.com/v1/models") else { + throw AIFoodAnalysisError.invalidResponse + } + + var request = URLRequest(url: url) + request.httpMethod = "GET" + request.timeoutInterval = 20 + request.setValue("Bearer \(trimmedKey)", forHTTPHeaderField: "Authorization") + if let organizationID, !organizationID.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + request.setValue(organizationID.trimmingCharacters(in: .whitespacesAndNewlines), forHTTPHeaderField: "OpenAI-Organization") + } + + let (data, response) = try await sessionOpenAI.data(for: request) + guard let http = response as? HTTPURLResponse else { + throw AIFoodAnalysisError.invalidResponse + } + + switch http.statusCode { + case 200: + let list = try JSONDecoder().decode(OpenAIModelList.self, from: data) + let hasGPT5 = list.data.contains { $0.id.lowercased().contains("gpt-5") } + if !hasGPT5 { + throw AIFoodAnalysisError.customError("Your OpenAI account does not list GPT-5 models yet. Please contact OpenAI support or disable the GPT-5 toggle.") + } + case 401, 403: + throw AIFoodAnalysisError.customError("OpenAI rejected your API key for GPT-5 access (HTTP \(http.statusCode)). GPT-5 requires an approved account.") + case 429: + throw AIFoodAnalysisError.customError("OpenAI rate limit reached while verifying GPT-5 availability. Please try again shortly.") + default: + let body = String(data: data, encoding: .utf8) ?? "" + throw AIFoodAnalysisError.customError("Unable to confirm GPT-5 availability (HTTP \(http.statusCode)). \(body)") + } + } + + func analyzeFoodImage(_ image: UIImage, apiKey: String, query: String) async throws -> AIFoodAnalysisResult { + return try await analyzeFoodImage(image, apiKey: apiKey, query: query, telemetryCallback: nil) + } + + /// Create a GPT-5 optimized version of the comprehensive analysis prompt + private func createGPT5OptimizedPrompt(from fullPrompt: String) -> String { + // Determine advanced mode directly from settings + let isAdvancedEnabled = UserDefaults.standard.advancedDosingRecommendationsEnabled + + if isAdvancedEnabled { + // GPT-5 optimized prompt with advanced dosing fields + return """ +ADVANCED DIABETES ANALYSIS - JSON format required: +{ + "food_items": [{ + "name": "specific_food_name", + "portion_estimate": "visual_portion_with_reference", + "usda_serving_size": "describe_standard_usda_portion", + "carbohydrates": grams, + "protein": grams, + "fat": grams, + "calories": kcal, + "fiber": grams, + "serving_multiplier": usda_serving_ratio + }], + "total_carbohydrates": sum_carbs, + "total_protein": sum_protein, + "total_fat": sum_fat, + "total_fiber": sum_fiber, + "total_calories": sum_calories, + "portion_assessment_method": "explain_measurement_process", + "confidence": 0.0_to_1.0, + "overall_description": "visual_description", + "diabetes_considerations": "carb_sources_gi_timing", + "fat_protein_units": "calculate_FPU_equals_fat_plus_protein_divided_by_10", + "insulin_timing_recommendations": "meal_type_timing_bolus_strategy", + "fpu_dosing_guidance": "extended_bolus_for_fat_protein", + "absorption_time_hours": hours_2_to_6, + "absorption_time_reasoning": "explain_absorption_timing" +} + +// (moved extension below createGPT5OptimizedPrompt) +Calculate FPU = (total_fat + total_protein) ÷ 10. Use visual references for portions. +""" + } else { + return """ +DIABETES ANALYSIS - JSON format required: +{ + "food_items": [{ + "name": "specific_food_name", + "portion_estimate": "visual_portion_with_reference", + "usda_serving_size": "describe_standard_usda_portion", + "serving_multiplier": usda_serving_ratio, + "carbohydrates": grams, + "protein": grams, + "fat": grams, + "fiber": grams, + "calories": kcal + }], + "total_carbohydrates": sum_carbs, + "total_protein": sum_protein, + "total_fat": sum_fat, + "total_fiber": sum_fiber, + "total_calories": sum_calories, + "portion_assessment_method": "explain_measurement_process", + "confidence": 0.0_to_1.0, + "diabetes_considerations": "concise_notes_on_glycemic_risk" +} + +Return compact JSON only. Avoid markdown or narrative explanations. +""" + } + } + +// Convenience overload for BYO/OpenAI that uses a preencoded image (method lives in class scope) + func analyzeFoodImage( + _ image: UIImage, + apiKey: String, + query: String, + baseURL: String? = nil, + model overrideModel: String? = nil, + apiVersion: String? = nil, + organizationID: String? = nil, + customPath: String? = nil, + telemetryCallback: ((String) -> Void)?, + preencoded pre: PreencodedImage? = nil + ) async throws -> AIFoodAnalysisResult { + let defaultBase = "https://api.openai.com" + let trimmedBase = (baseURL ?? "").trimmingCharacters(in: .whitespacesAndNewlines) + let base = trimmedBase.isEmpty ? defaultBase : trimmedBase + let isAzure = base.contains(".openai.azure.com") || ((apiVersion ?? "").isEmpty == false) + + let url: URL? = isAzure + ? buildAzureChatCompletionsURL(baseURL: base, deployment: (overrideModel?.isEmpty == false ? overrideModel! : ConfigurableAIService.optimalModel(for: .openAI, mode: ConfigurableAIService.shared.analysisMode)), apiVersion: (apiVersion?.isEmpty == false ? apiVersion! : "2024-06-01")) + : URL(string: base.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + normalizedPath(customPath)) + guard let url else { throw AIFoodAnalysisError.invalidResponse } + + let analysisMode = ConfigurableAIService.shared.analysisMode + let model = overrideModel ?? ConfigurableAIService.optimalModel(for: .openAI, mode: analysisMode) + let imageDetail = (analysisMode == .fast) ? "low" : "high" + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + if isAzure { request.setValue(apiKey, forHTTPHeaderField: "api-key") } + else { request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") } + + let analysisPrompt = getAnalysisPrompt() + let isAdvancedPrompt = UserDefaults.standard.advancedDosingRecommendationsEnabled + let finalPrompt: String = model.contains("gpt-5") + ? (query.isEmpty ? createGPT5OptimizedPrompt(from: analysisPrompt) : query) + : (query.isEmpty ? analysisPrompt : "\(query)\n\n\(analysisPrompt)") + + var contentBlocks: [[String: Any]] = [] + contentBlocks.append(["type": "text", "text": finalPrompt]) + // Prepare image (use preencoded if provided) + let prepared: PreencodedImage + if let provided = pre { + prepared = provided + } else { + prepared = await ConfigurableAIService.preencodeImageForProviders(image) + } + var imageURL: [String: Any] = ["url": "data:image/jpeg;base64,\(prepared.base64)"] + if !isAzure { imageURL["detail"] = imageDetail } + contentBlocks.append(["type": "image_url", "image_url": imageURL]) + + var payload: [String: Any] = ["messages": [["role": "user", "content": contentBlocks]]] + if !isAzure { payload["model"] = model } + if isAzure { + let ver = (apiVersion?.isEmpty == false ? apiVersion! : "") + let useNew = ver.hasPrefix("2024-12") || ver.hasPrefix("2025") + if useNew { payload["max_completion_tokens"] = isAdvancedPrompt ? 6000 : 2500 } else { payload["max_tokens"] = isAdvancedPrompt ? 6000 : 2500 } + payload["temperature"] = 0.01 + if !model.contains("gpt-5") { payload["response_format"] = ["type": "json_object"] } + } else { + if model.contains("gpt-5") || model.contains("gpt-4") { + payload["max_completion_tokens"] = isAdvancedPrompt ? 6000 : 2500 + payload["response_format"] = ["type": "json_object"] + if model.contains("gpt-5") { payload["stream"] = false } + } else { + payload["max_tokens"] = isAdvancedPrompt ? 6000 : 2500 + payload["temperature"] = 0.01 + payload["response_format"] = ["type": "json_object"] + } + } + + request.httpBody = try JSONSerialization.data(withJSONObject: payload) + let (data, response) = try await (isAzure ? sessionAzure : sessionOpenAI).data(for: request) + guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { throw AIFoodAnalysisError.apiError((response as? HTTPURLResponse)?.statusCode ?? -1) } + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let choices = json["choices"] as? [[String: Any]], + let first = choices.first, + let message = first["message"] as? [String: Any], + let content = message["content"] as? String else { throw AIFoodAnalysisError.responseParsingFailed } + return try parseOpenAIResponse(content: content) + } +// end of convenience overload + + + // MARK: - Connection Test (OpenAI-compatible/BYO) + /// Performs a minimal connectivity/auth check against an OpenAI-compatible endpoint. + /// Scope: verifies network reachability and that the API accepts the key (no model/parse validation). + /// Returns a concise status string suitable for UI display. + func testConnection( + baseURL: String, + apiKey: String, + model: String?, + apiVersion: String?, + organizationID: String?, + customPath: String? + ) async throws -> String { + let trimmedBase = baseURL.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmedBase.isEmpty, !apiKey.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { + throw AIFoodAnalysisError.customError("Missing Base URL or API key") + } + + let isAzure = trimmedBase.contains(".openai.azure.com") || ((apiVersion ?? "").isEmpty == false) + let url: URL? + if isAzure { + let deployment = (model?.isEmpty == false ? model! : "gpt-4o") + let version = (apiVersion?.isEmpty == false ? apiVersion! : "2024-06-01") + url = buildAzureChatCompletionsURL(baseURL: trimmedBase, deployment: deployment, apiVersion: version) + } else { + let path = normalizedPath(customPath) + url = URL(string: trimmedBase.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + path) + } + + guard let url else { + throw AIFoodAnalysisError.invalidResponse + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + if isAzure { + request.setValue(apiKey, forHTTPHeaderField: "api-key") + } else { + request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") + if let org = organizationID, !org.isEmpty { request.setValue(org, forHTTPHeaderField: "OpenAI-Organization") } + } + request.timeoutInterval = 15 + + // Minimal body: a tiny, valid chat payload for OpenAI-compatible endpoints. + // We intentionally avoid strict response parsing. Any 2xx (and many 400s) indicate + // connectivity + key acceptance; 401/403 indicate auth failures. + var payload: [String: Any] = [ + "messages": [["role": "user", "content": [["type": "text", "text": "ping"]]]], + // Use modern token param for OpenAI; Azure still relies on max_tokens + (isAzure ? "max_tokens" : "max_completion_tokens"): 1, + "temperature": 0 + ] + if !isAzure { payload["model"] = (model?.isEmpty == false ? model! : "gpt-4o-mini") } + request.httpBody = try JSONSerialization.data(withJSONObject: payload) + + let (data, response) = try await (isAzure ? sessionAzure : sessionOpenAI).data(for: request) + guard let http = response as? HTTPURLResponse else { throw AIFoodAnalysisError.invalidResponse } + + // Treat success and many client errors (400) as a connectivity/auth pass. + switch http.statusCode { + case 200...299: + // Success: we don't parse the body; scope is connectivity/auth only. + return isAzure ? "Connection OK (Azure endpoint)" : "Connection OK (OpenAI-compatible)" + case 400: + // Likely a schema/parameter issue; if not an auth error, consider it an OK connection. + if let info = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let error = info["error"] as? [String: Any], + let type = (error["type"] as? String)?.lowercased(), + type.contains("auth") || type.contains("key") { + throw AIFoodAnalysisError.customError("Authentication failed (400) — check key or headers") + } + return "Connection OK (request invalid — credentials likely accepted)" + case 401, 403: + // Auth failures + let message: String + if let info = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let error = info["error"] as? [String: Any], + let msg = error["message"] as? String { + message = msg + } else { + message = HTTPURLResponse.localizedString(forStatusCode: http.statusCode) + } + throw AIFoodAnalysisError.customError("Authentication failed (\(http.statusCode)): \(message)") + case 404: + // Likely not an OpenAI-compatible path (e.g., Gemini endpoint) — surface a helpful hint. + let baseLower = trimmedBase.lowercased() + if baseLower.contains("googleapis.com") || baseLower.contains("aistudio") || baseLower.contains("gemini") { + return "Connected, but endpoint is not OpenAI-compatible (Gemini). BYO expects OpenAI-compatible APIs." + } + throw AIFoodAnalysisError.apiError(404) + default: + // Other errors: attempt to show provider message + if let info = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let error = info["error"] as? [String: Any], + let msg = error["message"] as? String { + throw AIFoodAnalysisError.customError("HTTP \(http.statusCode): \(msg)") + } + throw AIFoodAnalysisError.apiError(http.statusCode) + } + } + + func analyzeFoodImage(_ image: UIImage, apiKey: String, query: String, telemetryCallback: ((String) -> Void)?, preencoded: PreencodedImage? = nil) async throws -> AIFoodAnalysisResult { + // OpenAI GPT Vision implementation (GPT-5 or GPT-4o-mini) + guard let url = URL(string: "https://api.openai.com/v1/chat/completions") else { + throw AIFoodAnalysisError.invalidResponse + } + + // Get optimal model based on current analysis mode + telemetryCallback?("⚙️ Configuring OpenAI parameters...") + let analysisMode = ConfigurableAIService.shared.analysisMode + let imageDetail = (analysisMode == .fast) ? "low" : "high" + let model = ConfigurableAIService.optimalModel(for: .openAI, mode: analysisMode) + let gpt5Enabled = UserDefaults.standard.useGPT5ForOpenAI + + print("🤖 OpenAI Model Selection:") + print(" Analysis Mode: \(analysisMode.rawValue)") + print(" GPT-5 Enabled: \(gpt5Enabled)") + print(" Selected Model: \(model)") + + // Pre-encode once using byte budget + telemetryCallback?("🖼️ Optimizing your image...") + let targetBytes = model.contains("gpt-5") ? 320 * 1024 : 450 * 1024 + let pre: PreencodedImage + if let provided = preencoded { + if model.contains("gpt-5") && provided.bytes > targetBytes { + pre = await ConfigurableAIService.preencodeImageForProviders(image, targetBytes: targetBytes) + } else { + pre = provided + } + } else { + pre = await ConfigurableAIService.preencodeImageForProviders(image, targetBytes: targetBytes) + } + let base64Image = pre.base64 + + // Get analysis prompt early to check complexity + telemetryCallback?("📡 Preparing API request...") + let analysisPrompt = getAnalysisPrompt() + let isAdvancedPrompt = UserDefaults.standard.advancedDosingRecommendationsEnabled + + // Create OpenAI API request + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") + + request.timeoutInterval = model.contains("gpt-5") ? 80 : (isAdvancedPrompt ? 150 : 30) + + // Use appropriate parameters based on model type + var payload: [String: Any] = [ + "model": model, + "messages": [ + [ + "role": "user", + "content": [ + [ + "type": "text", + "text": { + // Use the pre-prepared analysis prompt + let finalPrompt: String + + if model.contains("gpt-5") { + // For GPT-5, use the user's custom query if provided, otherwise use a simplified version of the main prompt + if !query.isEmpty { + finalPrompt = query + } else { + // Create a simplified version of the comprehensive prompt for GPT-5 performance + finalPrompt = createGPT5OptimizedPrompt(from: analysisPrompt) + } + } else { + // For GPT-4, use full prompt system + finalPrompt = query.isEmpty ? analysisPrompt : "\(query)\n\n\(analysisPrompt)" + } + return finalPrompt + }() + ], + [ + "type": "image_url", + "image_url": [ + "url": "data:image/jpeg;base64,\(base64Image)", + "detail": "\(imageDetail)" + ] + ] + ] + ] + ] + ] + + // Configure parameters based on model type + if model.contains("gpt-5") { + // GPT-5 optimized parameters for better performance and reliability + payload["max_completion_tokens"] = 6000 // Reduced from 8000 for faster processing + // GPT-5 uses default temperature (1) - don't set custom temperature + // Add explicit response format for GPT-5 + payload["response_format"] = [ + "type": "json_object" + ] + // Add performance optimization for GPT-5 + payload["stream"] = false // Ensure complete response (no streaming) + telemetryCallback?("⚡ Using GPT-5 optimized settings...") + } else if model.contains("gpt-4") { + // GPT-4 and later support max_completion_tokens + payload["max_completion_tokens"] = isAdvancedPrompt ? 6000 : 2500 + payload["temperature"] = 0.01 + // Enforce JSON output + payload["response_format"] = ["type": "json_object"] + } else { + // Older models use max_tokens + payload["max_tokens"] = isAdvancedPrompt ? 6000 : 2500 + payload["temperature"] = 0.01 + // Enforce JSON output in GPT-4o path + payload["response_format"] = ["type": "json_object"] + } + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: payload) + + // Intentionally no request body debug logging in production builds + } catch { + throw AIFoodAnalysisError.requestCreationFailed + } + + telemetryCallback?("🌐 Sending request to OpenAI...") + + do { + // Telemetry hints shown to the user (kept minimal) + telemetryCallback?("⏳ Analyzing...") + + // Use enhanced timeout logic with retry for GPT-5 + let (data, response): (Data, URLResponse) + if model.contains("gpt-5") { + do { + (data, response) = try await performGPT5RequestWithRetry(request: request, telemetryCallback: telemetryCallback) + } catch let error as AIFoodAnalysisError where error.localizedDescription.contains("GPT-5 timeout") { + telemetryCallback?("⚠️ GPT-5 timed out, switching to GPT-4o…") + return try await retryWithGPT4Fallback(image, apiKey: apiKey, query: query, + analysisPrompt: analysisPrompt, isAdvancedPrompt: isAdvancedPrompt, + telemetryCallback: telemetryCallback) + } + } else { + // Standard GPT-4 processing + (data, response) = try await URLSession.shared.data(for: request) + } + + telemetryCallback?("📥 Received response from OpenAI...") + + guard let httpResponse = response as? HTTPURLResponse else { + print("❌ OpenAI: Invalid HTTP response") + throw AIFoodAnalysisError.invalidResponse + } + + guard httpResponse.statusCode == 200 else { + // Enhanced error logging for different status codes + if let errorData = try? JSONSerialization.jsonObject(with: data) as? [String: Any] { + print("❌ OpenAI API Error: \(errorData)") + + // Check for specific OpenAI errors + if let error = errorData["error"] as? [String: Any], + let message = error["message"] as? String { + print("❌ OpenAI Error Message: \(message)") + + // Handle common OpenAI errors with specific error types + if message.contains("quota") || message.contains("billing") || message.contains("insufficient_quota") { + throw AIFoodAnalysisError.creditsExhausted(provider: "OpenAI") + } else if message.contains("rate_limit_exceeded") || message.contains("rate limit") { + throw AIFoodAnalysisError.rateLimitExceeded(provider: "OpenAI") + } else if message.contains("invalid") && message.contains("key") { + throw AIFoodAnalysisError.customError("Invalid OpenAI API key. Please check your configuration.") + } else if message.contains("usage") && message.contains("limit") { + throw AIFoodAnalysisError.quotaExceeded(provider: "OpenAI") + } else if (message.contains("model") && message.contains("not found")) || message.contains("does not exist") { + // Handle GPT-5 model not available - auto-fallback to GPT-4o + if model.contains("gpt-5") && UserDefaults.standard.useGPT5ForOpenAI { + print("⚠️ GPT-5 model not available, falling back to GPT-4o...") + UserDefaults.standard.useGPT5ForOpenAI = false // Auto-disable GPT-5 + throw AIFoodAnalysisError.customError("GPT-5 not available yet. Switched to GPT-4o automatically. You can try enabling GPT-5 again later.") + } + } + } + } else { + print("❌ OpenAI: Error data: \(String(data: data, encoding: .utf8) ?? "Unable to decode")") + } + + // Handle HTTP status codes for common credit/quota issues + if httpResponse.statusCode == 429 { + throw AIFoodAnalysisError.rateLimitExceeded(provider: "OpenAI") + } else if httpResponse.statusCode == 402 { + throw AIFoodAnalysisError.creditsExhausted(provider: "OpenAI") + } else if httpResponse.statusCode == 403 { + throw AIFoodAnalysisError.quotaExceeded(provider: "OpenAI") + } + + // Generic API error for unhandled cases + throw AIFoodAnalysisError.apiError(httpResponse.statusCode) + } + + // Enhanced data validation like Gemini + guard data.count > 0 else { + print("❌ OpenAI: Empty response data") + throw AIFoodAnalysisError.invalidResponse + } + + // Parse OpenAI response + telemetryCallback?("🔍 Parsing OpenAI response...") + guard let jsonResponse = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("❌ OpenAI: Failed to parse response as JSON") + print("❌ OpenAI: Raw response data: \(String(data: data, encoding: .utf8) ?? "Unable to decode")") + throw AIFoodAnalysisError.responseParsingFailed + } + + + guard let choices = jsonResponse["choices"] as? [[String: Any]] else { + print("❌ OpenAI: No 'choices' array in response") + print("❌ OpenAI: Response structure: \(jsonResponse)") + throw AIFoodAnalysisError.responseParsingFailed + } + + guard let firstChoice = choices.first else { + print("❌ OpenAI: Empty choices array") + throw AIFoodAnalysisError.responseParsingFailed + } + + guard let message = firstChoice["message"] as? [String: Any] else { + print("❌ OpenAI: No 'message' in first choice") + print("❌ OpenAI: First choice structure: \(firstChoice)") + throw AIFoodAnalysisError.responseParsingFailed + } + + guard let content = message["content"] as? String else { + print("❌ OpenAI: No 'content' in message") + print("❌ OpenAI: Message structure: \(message)") + throw AIFoodAnalysisError.responseParsingFailed + } + + // Add detailed logging like Gemini + print("🔧 OpenAI: Received content length: \(content.count)") + + // Check for empty content from GPT-5 and auto-fallback to GPT-4o + if content.count == 0 { + print("❌ OpenAI: Empty content received") + print("❌ OpenAI: Model used: \(model)") + print("❌ OpenAI: HTTP Status: \(httpResponse.statusCode)") + + if model.contains("gpt-5") && UserDefaults.standard.useGPT5ForOpenAI { + print("⚠️ GPT-5 returned empty response, automatically switching to GPT-4o...") + DispatchQueue.main.async { + UserDefaults.standard.useGPT5ForOpenAI = false + } + throw AIFoodAnalysisError.customError("GPT-5 returned empty response. Automatically switched to GPT-4o for next analysis.") + } + + throw AIFoodAnalysisError.responseParsingFailed + } + + // Enhanced JSON extraction from GPT-4's response (like Claude service) + telemetryCallback?("⚡ Processing AI analysis results...") + let cleanedContent = content.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "```json", with: "") + .replacingOccurrences(of: "```", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + + // Try to extract JSON content safely + var jsonString: String + if let jsonStartRange = cleanedContent.range(of: "{"), + let jsonEndRange = cleanedContent.range(of: "}", options: .backwards), + jsonStartRange.lowerBound < jsonEndRange.upperBound { + jsonString = String(cleanedContent[jsonStartRange.lowerBound.. 0 ? totalProtein : nil, + totalFat: totalFat > 0 ? totalFat : nil, + totalFiber: totalFiber, + totalCalories: totalCalories > 0 ? totalCalories : nil, + portionAssessmentMethod: portionAssessmentMethod, + diabetesConsiderations: diabetesConsiderations, + visualAssessmentDetails: visualAssessmentDetails, + notes: "Analyzed using OpenAI GPT Vision with detailed portion assessment", + originalServings: originalServings, + fatProteinUnits: extractString(from: nutritionData, keys: ["fat_protein_units"]), + netCarbsAdjustment: extractString(from: nutritionData, keys: ["net_carbs_adjustment"]), + insulinTimingRecommendations: extractString(from: nutritionData, keys: ["insulin_timing_recommendations"]), + fpuDosingGuidance: extractString(from: nutritionData, keys: ["fpu_dosing_guidance"]), + exerciseConsiderations: extractString(from: nutritionData, keys: ["exercise_considerations"]), + absorptionTimeHours: absorptionHours, + absorptionTimeReasoning: extractString(from: nutritionData, keys: ["absorption_time_reasoning"]), + mealSizeImpact: extractString(from: nutritionData, keys: ["meal_size_impact"]), + individualizationFactors: extractString(from: nutritionData, keys: ["individualization_factors"]), + safetyAlerts: extractString(from: nutritionData, keys: ["safety_alerts"]) + ) + + } catch let error as AIFoodAnalysisError { + throw error + } catch { + throw AIFoodAnalysisError.networkError(error) + } + } + + // Helper to convert nutrition JSON (from OpenAI-compatible text result) to AIFoodAnalysisResult + private func parseNutritionDataToAnalysisResult(_ nutritionData: [String: Any], image: UIImage) throws -> AIFoodAnalysisResult { + // Extract minimal fields with safe defaults + let foodName: String = (nutritionData["food_name"] as? String) + ?? (nutritionData["name"] as? String) + ?? (nutritionData["foodItems"] as? [[String: Any]])?.first?["name"] as? String + ?? "Food item" + let serving: String = (nutritionData["serving_size"] as? String) + ?? (nutritionData["serving"] as? String) + ?? "1 serving" + let carbs = (nutritionData["carbohydrates"] as? NSNumber)?.doubleValue + ?? (nutritionData["carbs"] as? NSNumber)?.doubleValue + ?? 0 + let protein = (nutritionData["protein"] as? NSNumber)?.doubleValue + let fat = (nutritionData["fat"] as? NSNumber)?.doubleValue + let calories = (nutritionData["calories"] as? NSNumber)?.doubleValue + + // Build FoodItemAnalysis using the full memberwise initializer + let item = FoodItemAnalysis( + name: foodName, + portionEstimate: serving, + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: nil, + visualCues: nil, + carbohydrates: carbs, + calories: calories, + fat: fat, + fiber: nil, + protein: protein, + assessmentNotes: nil, + absorptionTimeHours: nil + ) + + // Compute totals with reasonable defaults + let totalCarbs = carbs + let totalProtein = protein + let totalFat = fat + let totalFiber: Double? = nil + let totalCalories = calories + let originalServings = 1.0 + let confidence: AIConfidenceLevel = .medium + + return AIFoodAnalysisResult( + imageType: .foodPhoto, + foodItemsDetailed: [item], + overallDescription: foodName, + confidence: confidence, + numericConfidence: nil, + totalFoodPortions: 1, + totalUsdaServings: 1.0, + totalCarbohydrates: totalCarbs, + totalProtein: totalProtein, + totalFat: totalFat, + totalFiber: totalFiber, + totalCalories: totalCalories, + portionAssessmentMethod: "Text-based nutrition lookup", + diabetesConsiderations: nil, + visualAssessmentDetails: nil, + notes: "Custom provider (BYO) text analysis", + originalServings: originalServings, + fatProteinUnits: nil, + netCarbsAdjustment: nil, + insulinTimingRecommendations: nil, + fpuDosingGuidance: nil, + exerciseConsiderations: nil, + absorptionTimeHours: nil, + absorptionTimeReasoning: nil, + mealSizeImpact: nil, + individualizationFactors: nil, + safetyAlerts: nil + ) + } + + // MARK: - Custom Endpoint (OpenAI-compatible, e.g., Azure OpenAI, Groq, Together) + /// Analyze an image using a custom OpenAI-compatible endpoint. + /// If `baseURL` is empty or nil, falls back to standard OpenAI endpoint. + func analyzeFoodImage( + _ image: UIImage, + apiKey: String, + query: String, + baseURL: String?, + model overrideModel: String?, + apiVersion: String?, + organizationID: String?, + customPath: String? = nil, + telemetryCallback: ((String) -> Void)? + ) async throws -> AIFoodAnalysisResult { + let defaultBase = "https://api.openai.com" + let trimmedBase = (baseURL ?? "").trimmingCharacters(in: .whitespacesAndNewlines) + let base = trimmedBase.isEmpty ? defaultBase : trimmedBase + let isAzure = base.contains(".openai.azure.com") || ((apiVersion ?? "").isEmpty == false) + let url: URL? + if isAzure { + // Azure uses deployment name in the path and api-version query param + let deployment = (overrideModel?.isEmpty == false ? overrideModel! : ConfigurableAIService.optimalModel(for: .openAI, mode: ConfigurableAIService.shared.analysisMode)) + let version = (apiVersion?.isEmpty == false ? apiVersion! : "2024-06-01") + url = buildAzureChatCompletionsURL(baseURL: base, deployment: deployment, apiVersion: version) + } else { + let path = normalizedPath(customPath) + url = URL(string: base.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + path) + } + guard let url else { + throw AIFoodAnalysisError.invalidResponse + } + + telemetryCallback?("⚙️ Configuring OpenAI-compatible parameters...") + telemetryCallback?(isAzure ? "🔗 Azure OpenAI endpoint detected (chat/completions)" : "🔗 OpenAI-compatible endpoint detected (chat/completions)") + let analysisMode = ConfigurableAIService.shared.analysisMode + let model = overrideModel ?? ConfigurableAIService.optimalModel(for: .openAI, mode: analysisMode) + let imageDetail = (analysisMode == .fast) ? "low" : "high" + + // Optimize and encode image + telemetryCallback?("🖼️ Optimizing your image...") + let optimizedImage = await ConfigurableAIService.optimizeImageForAnalysisSafely(image) + telemetryCallback?("🔄 Encoding image data...") + var compressionQuality = model.contains("gpt-5") ? + min(0.7, ConfigurableAIService.adaptiveCompressionQuality(for: optimizedImage)) : + ConfigurableAIService.adaptiveCompressionQuality(for: optimizedImage) + if analysisMode == .fast { compressionQuality = min(compressionQuality, 0.6) } + guard let imageData = optimizedImage.jpegData(compressionQuality: compressionQuality) else { + throw AIFoodAnalysisError.imageProcessingFailed + } + let base64Image = imageData.base64EncodedString() + + telemetryCallback?("📡 Preparing API request...") + let analysisPrompt = getAnalysisPrompt() + let isAdvancedPrompt = UserDefaults.standard.advancedDosingRecommendationsEnabled + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + if isAzure { + request.setValue(apiKey, forHTTPHeaderField: "api-key") + } else { + request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") + if let org = organizationID, !org.isEmpty { request.setValue(org, forHTTPHeaderField: "OpenAI-Organization") } + } + + request.timeoutInterval = model.contains("gpt-5") ? 80 : (isAdvancedPrompt ? 150 : 30) + + // Build messages content (Azure is stricter: omit `detail` in image_url) + var contentBlocks: [[String: Any]] = [] + // Text block + let finalPrompt: String = { + if model.contains("gpt-5") { + return query.isEmpty ? createGPT5OptimizedPrompt(from: analysisPrompt) : query + } else { + return query.isEmpty ? analysisPrompt : "\(query)\n\n\(analysisPrompt)" + } + }() + contentBlocks.append(["type": "text", "text": finalPrompt]) + // Image block + var imageURL: [String: Any] = ["url": "data:image/jpeg;base64,\(base64Image)"] + if !isAzure { imageURL["detail"] = imageDetail } + contentBlocks.append(["type": "image_url", "image_url": imageURL]) + + var payload: [String: Any] = [ + "messages": [["role": "user", "content": contentBlocks]] + ] + if !isAzure { payload["model"] = model } + + if isAzure { + // Azure Chat Completions + // Prefer max_completion_tokens for newer API versions; fall back to max_tokens for compatibility + let version = (apiVersion?.isEmpty == false ? apiVersion! : "") + let useNewTokensParam = version.hasPrefix("2024-12") || version.hasPrefix("2025") + if useNewTokensParam { + payload["max_completion_tokens"] = isAdvancedPrompt ? 6000 : 2500 + } else { + payload["max_tokens"] = isAdvancedPrompt ? 6000 : 2500 + } + payload["temperature"] = 0.01 + // Stricter JSON guarantees on Azure for GPT-4o family + if !model.contains("gpt-5") { + payload["response_format"] = ["type": "json_object"] + } + } else { + if model.contains("gpt-5") || model.contains("gpt-4") { + payload["max_completion_tokens"] = isAdvancedPrompt ? 6000 : 2500 + payload["response_format"] = ["type": "json_object"] + if model.contains("gpt-5") { payload["stream"] = false } + } else { + payload["max_tokens"] = isAdvancedPrompt ? 6000 : 2500 + payload["temperature"] = 0.01 + payload["response_format"] = ["type": "json_object"] + } + } + + do { request.httpBody = try JSONSerialization.data(withJSONObject: payload) } catch { throw AIFoodAnalysisError.requestCreationFailed } + + telemetryCallback?("🌐 Sending request to OpenAI-compatible endpoint...") + let (data, response): (Data, URLResponse) + if model.contains("gpt-5") && !isAzure { + (data, response) = try await performGPT5RequestWithRetry(request: request, telemetryCallback: telemetryCallback) + } else { + (data, response) = try await URLSession.shared.data(for: request) + } + + guard let httpResponse = response as? HTTPURLResponse else { throw AIFoodAnalysisError.invalidResponse } + if httpResponse.statusCode != 200 { + switch httpResponse.statusCode { + case 400: + // Often schema/preview feature mismatches; surface a helpful hint for Azure + if isAzure { + throw AIFoodAnalysisError.customError("Azure returned 400 (Bad Request). Verify deployment supports vision chat and try another api-version.") + } else { + throw AIFoodAnalysisError.apiError(400) + } + case 401, 403: + throw AIFoodAnalysisError.customError("Authentication failed (\(httpResponse.statusCode)). Check API key and permissions.") + case 404: + if isAzure { + throw AIFoodAnalysisError.customError("Deployment not found (404). Check Azure deployment name and region.") + } else { + throw AIFoodAnalysisError.apiError(404) + } + case 429: + throw AIFoodAnalysisError.rateLimitExceeded(provider: isAzure ? "Azure OpenAI" : "OpenAI-compatible") + case 500...599: + throw AIFoodAnalysisError.customError("Server error (\(httpResponse.statusCode)). Azure endpoint may be unavailable; retry or adjust api-version.") + default: + throw AIFoodAnalysisError.apiError(httpResponse.statusCode) + } + } + + guard data.count > 0 else { throw AIFoodAnalysisError.invalidResponse } + telemetryCallback?("🔍 Parsing response...") + guard let jsonResponse = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let choices = jsonResponse["choices"] as? [[String: Any]], + let first = choices.first, + let message = first["message"] as? [String: Any], + let content = message["content"] as? String else { + throw AIFoodAnalysisError.responseParsingFailed + } + + let cleanedContent = content.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "```json", with: "") + .replacingOccurrences(of: "```", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + let jsonString: String + if let s = cleanedContent.range(of: "{"), let e = cleanedContent.range(of: "}", options: .backwards), s.lowerBound < e.upperBound { + jsonString = String(cleanedContent[s.lowerBound.. Double? { + for key in keys { + print("🧮 extractNumber checking key '\(key)' in JSON") + if let value = json[key] as? Double { + print("🧮 Found Double value: \(value) for key '\(key)'") + let result = max(0, value) // Ensure non-negative nutrition values like Gemini + print("🧮 Returning Double result: \(result)") + return result + } else if let value = json[key] as? Int { + print("🧮 Found Int value: \(value) for key '\(key)'") + let result = max(0, Double(value)) // Ensure non-negative + print("🧮 Returning Int->Double result: \(result)") + return result + } else if let value = json[key] as? String, let doubleValue = Double(value) { + print("🧮 Found String value: '\(value)' converted to Double: \(doubleValue) for key '\(key)'") + let result = max(0, doubleValue) // Ensure non-negative + print("🧮 Returning String->Double result: \(result)") + return result + } else { + print("🧮 Key '\(key)' not found or not convertible to number. Value type: \(type(of: json[key]))") + if let value = json[key] { + print("🧮 Value: \(value)") + } + } + } + print("🧮 extractNumber returning nil - no valid number found for keys: \(keys)") + return nil + } + + private func extractString(from json: [String: Any], keys: [String]) -> String? { + for key in keys { + if let value = json[key] as? String, !value.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return value.trimmingCharacters(in: .whitespacesAndNewlines) // Enhanced validation like Gemini + } + } + return nil + } + + private func extractStringArray(from json: [String: Any], keys: [String]) -> [String]? { + for key in keys { + if let value = json[key] as? [String] { + return value + } else if let value = json[key] as? String { + return [value] + } + } + return nil + } + + // Unified parser for our standard/advanced schema used across providers + // Handles `food_items` array with per-item macros and top-level totals. + private func parseUnifiedAnalysisResult(from nutritionData: [String: Any], defaultNotes: String) -> AIFoodAnalysisResult { + var detailedFoodItems: [FoodItemAnalysis] = [] + if let foodItemsArray = nutritionData["food_items"] as? [[String: Any]] { + for itemData in foodItemsArray { + let foodItem = FoodItemAnalysis( + name: extractString(from: itemData, keys: ["name"]) ?? "Unknown Food", + portionEstimate: extractString(from: itemData, keys: ["portion_estimate"]) ?? "1 serving", + usdaServingSize: extractString(from: itemData, keys: ["usda_serving_size"]), + servingMultiplier: max(0.1, extractNumber(from: itemData, keys: ["serving_multiplier"]) ?? 1.0), + preparationMethod: extractString(from: itemData, keys: ["preparation_method"]), + visualCues: extractString(from: itemData, keys: ["visual_cues"]), + carbohydrates: max(0, extractNumber(from: itemData, keys: ["carbohydrates"]) ?? 0), + calories: extractNumber(from: itemData, keys: ["calories"]).map { max(0, $0) }, + fat: extractNumber(from: itemData, keys: ["fat"]).map { max(0, $0) }, + fiber: extractNumber(from: itemData, keys: ["fiber"]).map { max(0, $0) }, + protein: extractNumber(from: itemData, keys: ["protein"]).map { max(0, $0) }, + assessmentNotes: extractString(from: itemData, keys: ["assessment_notes"]), + absorptionTimeHours: extractNumber(from: itemData, keys: ["absorption_time_hours"]) + ) + detailedFoodItems.append(foodItem) + } + } else if let combined = extractStringArray(from: nutritionData, keys: ["food_items"]) { + // Legacy fallback (list of names only) + let totalCarbs = extractNumber(from: nutritionData, keys: ["total_carbohydrates", "carbohydrates", "carbs"]) ?? 25.0 + let totalProtein = extractNumber(from: nutritionData, keys: ["total_protein", "protein"]) + let totalFat = extractNumber(from: nutritionData, keys: ["total_fat", "fat"]) + let totalFiber = extractNumber(from: nutritionData, keys: ["total_fiber", "fiber"]) + let totalCalories = extractNumber(from: nutritionData, keys: ["total_calories", "calories"]) + let item = FoodItemAnalysis( + name: combined.joined(separator: ", "), + portionEstimate: extractString(from: nutritionData, keys: ["portion_size"]) ?? "1 serving", + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: nil, + visualCues: nil, + carbohydrates: totalCarbs, + calories: totalCalories, + fat: totalFat, + fiber: totalFiber, + protein: totalProtein, + assessmentNotes: "Legacy format - combined nutrition values", + absorptionTimeHours: nil + ) + detailedFoodItems = [item] + } + + if detailedFoodItems.isEmpty { + // As a last resort provide a non-zero safe fallback so UI doesn’t show zeros + detailedFoodItems = [FoodItemAnalysis( + name: extractString(from: nutritionData, keys: ["overall_description"]) ?? "AI analyzed food", + portionEstimate: "1 serving", + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: nil, + visualCues: nil, + carbohydrates: 25.0, + calories: 200.0, + fat: 8.0, + fiber: 3.0, + protein: 8.0, + assessmentNotes: "Safe fallback — verify", + absorptionTimeHours: nil + )] + } + + let totalCarbs = extractNumber(from: nutritionData, keys: ["total_carbohydrates"]) ?? detailedFoodItems.reduce(0) { $0 + $1.carbohydrates } + let totalProtein = extractNumber(from: nutritionData, keys: ["total_protein"]) ?? detailedFoodItems.compactMap { $0.protein }.reduce(0, +) + let totalFat = extractNumber(from: nutritionData, keys: ["total_fat"]) ?? detailedFoodItems.compactMap { $0.fat }.reduce(0, +) + let totalFiber = extractNumber(from: nutritionData, keys: ["total_fiber"]) ?? detailedFoodItems.compactMap { $0.fiber }.reduce(0, +) + let totalCalories = extractNumber(from: nutritionData, keys: ["total_calories"]) ?? detailedFoodItems.compactMap { $0.calories }.reduce(0, +) + + let confidence = extractConfidence(from: nutritionData) + let numericConf = extractNumericConfidence(from: nutritionData) + let absorptionHours = extractNumber(from: nutritionData, keys: ["absorption_time_hours"]) + + return AIFoodAnalysisResult( + imageType: .foodPhoto, + foodItemsDetailed: detailedFoodItems, + overallDescription: extractString(from: nutritionData, keys: ["overall_description"]), + confidence: confidence, + numericConfidence: numericConf, + totalFoodPortions: extractNumber(from: nutritionData, keys: ["total_food_portions"]).map { Int($0) }, + totalUsdaServings: extractNumber(from: nutritionData, keys: ["total_usda_servings"]), + totalCarbohydrates: totalCarbs, + totalProtein: totalProtein > 0 ? totalProtein : nil, + totalFat: totalFat > 0 ? totalFat : nil, + totalFiber: totalFiber, + totalCalories: totalCalories > 0 ? totalCalories : nil, + portionAssessmentMethod: extractString(from: nutritionData, keys: ["portion_assessment_method", "analysis_notes"]), + diabetesConsiderations: extractString(from: nutritionData, keys: ["diabetes_considerations"]), + visualAssessmentDetails: extractString(from: nutritionData, keys: ["visual_assessment_details"]), + notes: defaultNotes, + originalServings: detailedFoodItems.reduce(0) { $0 + $1.servingMultiplier }, + fatProteinUnits: extractString(from: nutritionData, keys: ["fat_protein_units"]), + netCarbsAdjustment: extractString(from: nutritionData, keys: ["net_carbs_adjustment"]), + insulinTimingRecommendations: extractString(from: nutritionData, keys: ["insulin_timing_recommendations"]), + fpuDosingGuidance: extractString(from: nutritionData, keys: ["fpu_dosing_guidance"]), + exerciseConsiderations: extractString(from: nutritionData, keys: ["exercise_considerations"]), + absorptionTimeHours: absorptionHours, + absorptionTimeReasoning: extractString(from: nutritionData, keys: ["absorption_time_reasoning"]), + mealSizeImpact: extractString(from: nutritionData, keys: ["meal_size_impact"]), + individualizationFactors: extractString(from: nutritionData, keys: ["individualization_factors"]), + safetyAlerts: extractString(from: nutritionData, keys: ["safety_alerts"]) + ) + } + + private func extractConfidence(from json: [String: Any]) -> AIConfidenceLevel { + let confidenceKeys = ["confidence", "confidence_score"] + + for key in confidenceKeys { + if let value = json[key] as? Double { + if value >= 0.8 { + return .high + } else if value >= 0.5 { + return .medium + } else { + return .low + } + } else if let value = json[key] as? String { + // Enhanced string-based confidence detection like Gemini + switch value.lowercased() { + case "high": + return .high + case "medium": + return .medium + case "low": + return .low + default: + continue + } + } + } + + return .medium // Default confidence + } +} + +// MARK: - USDA FoodData Central Service + +/// Service for accessing USDA FoodData Central API for comprehensive nutrition data +class USDAFoodDataService { + static let shared = USDAFoodDataService() + + private let baseURL = "https://api.nal.usda.gov/fdc/v1" + private let session: URLSession + + private init() { + // Create optimized URLSession configuration for USDA API + let config = URLSessionConfiguration.default + let usdaTimeout = ConfigurableAIService.optimalTimeout(for: .usdaFoodData) + config.timeoutIntervalForRequest = usdaTimeout + config.timeoutIntervalForResource = usdaTimeout * 2 + config.waitsForConnectivity = true + config.allowsCellularAccess = true + self.session = URLSession(configuration: config) + } + + /// Search for food products using USDA FoodData Central API + /// - Parameter query: Search query string + /// - Returns: Array of OpenFoodFactsProduct for compatibility with existing UI + func searchProducts(query: String, pageSize: Int = 15) async throws -> [OpenFoodFactsProduct] { + print("🇺🇸 Starting USDA FoodData Central search for: '\(query)'") + + guard let url = URL(string: "\(baseURL)/foods/search") else { + throw OpenFoodFactsError.invalidURL + } + + var components = URLComponents(url: url, resolvingAgainstBaseURL: false)! + let usdaKey = UserDefaults.standard.usdaAPIKey.isEmpty ? "DEMO_KEY" : UserDefaults.standard.usdaAPIKey + components.queryItems = [ + URLQueryItem(name: "api_key", value: usdaKey), + URLQueryItem(name: "query", value: query), + URLQueryItem(name: "pageSize", value: String(pageSize)), + URLQueryItem(name: "dataType", value: "Foundation,SR Legacy,Survey (FNDDS),Branded"), + URLQueryItem(name: "sortBy", value: "dataType.keyword"), + URLQueryItem(name: "sortOrder", value: "asc"), + URLQueryItem(name: "requireAllWords", value: "false") // Allow partial matches for better results + ] + + guard let finalURL = components.url else { + throw OpenFoodFactsError.invalidURL + } + + var request = URLRequest(url: finalURL) + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.timeoutInterval = ConfigurableAIService.optimalTimeout(for: .usdaFoodData) + + do { + // Check for task cancellation before making request + try Task.checkCancellation() + + let (data, response) = try await session.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw OpenFoodFactsError.invalidResponse + } + + guard httpResponse.statusCode == 200 else { + print("🇺🇸 USDA: HTTP error \(httpResponse.statusCode)") + if httpResponse.statusCode == 429 { + // Map USDA rate limit to a specific error so callers can gracefully fall back + throw OpenFoodFactsError.rateLimitExceeded + } + // Prefer higher-level router to fall back; pass through server error + throw OpenFoodFactsError.serverError(httpResponse.statusCode) + } + + // Parse USDA response with detailed error handling + guard let jsonResponse = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("🇺🇸 USDA: Invalid JSON response format") + throw OpenFoodFactsError.decodingError(NSError(domain: "USDA", code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid JSON response"])) + } + + // Check for API errors in response + if let error = jsonResponse["error"] as? [String: Any], + let code = error["code"] as? String, + let message = error["message"] as? String { + print("🇺🇸 USDA: API error - \(code): \(message)") + throw OpenFoodFactsError.serverError(400) + } + + guard let foods = jsonResponse["foods"] as? [[String: Any]] else { + print("🇺🇸 USDA: No foods array in response") + throw OpenFoodFactsError.noData + } + + print("🇺🇸 USDA: Raw API returned \(foods.count) food items") + + // Check for task cancellation before processing results + try Task.checkCancellation() + + // Convert USDA foods to OpenFoodFactsProduct format for UI compatibility + let products = foods.compactMap { foodData -> OpenFoodFactsProduct? in + // Check for cancellation during processing to allow fast cancellation + if Task.isCancelled { + return nil + } + return convertUSDAFoodToProduct(foodData) + } + + print("🇺🇸 USDA search completed: \(products.count) valid products found (filtered from \(foods.count) raw items)") + return products + + } catch { + print("🇺🇸 USDA search failed: \(error)") + + // Handle task cancellation gracefully + if error is CancellationError { + print("🇺🇸 USDA: Task was cancelled (expected behavior during rapid typing)") + return [] + } + + if let urlError = error as? URLError, urlError.code == .cancelled { + print("🇺🇸 USDA: URLSession request was cancelled (expected behavior during rapid typing)") + return [] + } + + throw OpenFoodFactsError.networkError(error) + } + } + + /// Convert USDA food data to OpenFoodFactsProduct for UI compatibility + private func convertUSDAFoodToProduct(_ foodData: [String: Any]) -> OpenFoodFactsProduct? { + guard let fdcId = foodData["fdcId"] as? Int, + let description = foodData["description"] as? String else { + print("🇺🇸 USDA: Missing fdcId or description for food item") + return nil + } + + // Extract nutrition data from USDA food nutrients with comprehensive mapping + var carbs: Double = 0 + var protein: Double = 0 + var fat: Double = 0 + var fiber: Double = 0 + var sugars: Double = 0 + var energy: Double = 0 + + // Track what nutrients we found for debugging + var foundNutrients: [String] = [] + + if let foodNutrients = foodData["foodNutrients"] as? [[String: Any]] { + print("🇺🇸 USDA: Found \(foodNutrients.count) nutrients for '\(description)'") + + for nutrient in foodNutrients { + // Debug: print the structure of the first few nutrients + if foundNutrients.count < 3 { + print("🇺🇸 USDA: Nutrient structure: \(nutrient)") + } + + // Try different possible field names for nutrient number + var nutrientNumber: Int? + if let number = nutrient["nutrientNumber"] as? Int { + nutrientNumber = number + } else if let number = nutrient["nutrientId"] as? Int { + nutrientNumber = number + } else if let numberString = nutrient["nutrientNumber"] as? String, + let number = Int(numberString) { + nutrientNumber = number + } else if let numberString = nutrient["nutrientId"] as? String, + let number = Int(numberString) { + nutrientNumber = number + } + + guard let nutrientNum = nutrientNumber else { + continue + } + + // Handle both Double and String values from USDA API + var value: Double = 0 + if let doubleValue = nutrient["value"] as? Double { + value = doubleValue + } else if let stringValue = nutrient["value"] as? String, + let parsedValue = Double(stringValue) { + value = parsedValue + } else if let doubleValue = nutrient["amount"] as? Double { + value = doubleValue + } else if let stringValue = nutrient["amount"] as? String, + let parsedValue = Double(stringValue) { + value = parsedValue + } else { + continue + } + + // Comprehensive USDA nutrient number mapping + switch nutrientNum { + // Carbohydrates - multiple possible sources + case 205: // Carbohydrate, by difference (most common) + carbs = value + foundNutrients.append("carbs-205") + case 1005: // Carbohydrate, by summation + if carbs == 0 { carbs = value } + foundNutrients.append("carbs-1005") + case 1050: // Carbohydrate, other + if carbs == 0 { carbs = value } + foundNutrients.append("carbs-1050") + + // Protein - multiple possible sources + case 203: // Protein (most common) + protein = value + foundNutrients.append("protein-203") + case 1003: // Protein, crude + if protein == 0 { protein = value } + foundNutrients.append("protein-1003") + + // Fat - multiple possible sources + case 204: // Total lipid (fat) (most common) + fat = value + foundNutrients.append("fat-204") + case 1004: // Total lipid, crude + if fat == 0 { fat = value } + foundNutrients.append("fat-1004") + + // Fiber - multiple possible sources + case 291: // Fiber, total dietary (most common) + fiber = value + foundNutrients.append("fiber-291") + case 1079: // Fiber, crude + if fiber == 0 { fiber = value } + foundNutrients.append("fiber-1079") + + // Sugars - multiple possible sources + case 269: // Sugars, total including NLEA (most common) + sugars = value + foundNutrients.append("sugars-269") + case 1010: // Sugars, total + if sugars == 0 { sugars = value } + foundNutrients.append("sugars-1010") + case 1063: // Sugars, added + if sugars == 0 { sugars = value } + foundNutrients.append("sugars-1063") + + // Energy/Calories - multiple possible sources + case 208: // Energy (kcal) (most common) + energy = value + foundNutrients.append("energy-208") + case 1008: // Energy, gross + if energy == 0 { energy = value } + foundNutrients.append("energy-1008") + case 1062: // Energy, metabolizable + if energy == 0 { energy = value } + foundNutrients.append("energy-1062") + + default: + break + } + } + } else { + print("🇺🇸 USDA: No foodNutrients array found in food data for '\(description)'") + print("🇺🇸 USDA: Available keys in foodData: \(Array(foodData.keys))") + } + + // Log what we found for debugging + if foundNutrients.isEmpty { + print("🇺🇸 USDA: No recognized nutrients found for '\(description)' (fdcId: \(fdcId))") + } else { + print("🇺🇸 USDA: Found nutrients for '\(description)': \(foundNutrients.joined(separator: ", "))") + } + + // Enhanced data quality validation + let hasUsableNutrientData = carbs > 0 || protein > 0 || fat > 0 || energy > 0 + if !hasUsableNutrientData { + print("🇺🇸 USDA: Skipping '\(description)' - no usable nutrient data (carbs: \(carbs), protein: \(protein), fat: \(fat), energy: \(energy))") + return nil + } + + // Create nutriments object with comprehensive data + let nutriments = Nutriments( + carbohydrates: carbs, + proteins: protein > 0 ? protein : nil, + fat: fat > 0 ? fat : nil, + calories: energy > 0 ? energy : nil, + sugars: sugars > 0 ? sugars : nil, + fiber: fiber > 0 ? fiber : nil, + energy: energy > 0 ? energy : nil + ) + + // Create product with USDA data + return OpenFoodFactsProduct( + id: String(fdcId), + productName: cleanUSDADescription(description), + brands: "USDA FoodData Central", + categories: categorizeUSDAFood(description), + nutriments: nutriments, + servingSize: "100g", // USDA data is typically per 100g + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: String(fdcId) + ) + } + + /// Clean up USDA food descriptions for better readability + private func cleanUSDADescription(_ description: String) -> String { + var cleaned = description + + // Remove common USDA technical terms and codes + let removals = [ + ", raw", ", cooked", ", boiled", ", steamed", + ", NFS", ", NS as to form", ", not further specified", + "USDA Commodity", "Food and Nutrition Service", + ", UPC: ", "\\b\\d{5,}\\b" // Remove long numeric codes + ] + + for removal in removals { + if removal.starts(with: "\\") { + // Handle regex patterns + cleaned = cleaned.replacingOccurrences( + of: removal, + with: "", + options: .regularExpression + ) + } else { + cleaned = cleaned.replacingOccurrences(of: removal, with: "") + } + } + + // Capitalize properly and trim + cleaned = cleaned.trimmingCharacters(in: .whitespacesAndNewlines) + + // Ensure first letter is capitalized + if !cleaned.isEmpty { + cleaned = cleaned.prefix(1).uppercased() + cleaned.dropFirst() + } + + return cleaned.isEmpty ? "USDA Food Item" : cleaned + } + + /// Categorize USDA food items based on their description + private func categorizeUSDAFood(_ description: String) -> String? { + let lowercased = description.lowercased() + + // Define category mappings based on common USDA food terms + let categories: [String: [String]] = [ + "Fruits": ["apple", "banana", "orange", "berry", "grape", "peach", "pear", "plum", "cherry", "melon", "fruit"], + "Vegetables": ["broccoli", "carrot", "spinach", "lettuce", "tomato", "onion", "pepper", "cucumber", "vegetable"], + "Grains": ["bread", "rice", "pasta", "cereal", "oat", "wheat", "barley", "quinoa", "grain"], + "Dairy": ["milk", "cheese", "yogurt", "butter", "cream", "dairy"], + "Protein": ["chicken", "beef", "pork", "fish", "egg", "meat", "turkey", "salmon", "tuna"], + "Nuts & Seeds": ["nut", "seed", "almond", "peanut", "walnut", "cashew", "sunflower"], + "Beverages": ["juice", "beverage", "drink", "soda", "tea", "coffee"], + "Snacks": ["chip", "cookie", "cracker", "candy", "chocolate", "snack"] + ] + + for (category, keywords) in categories { + if keywords.contains(where: { lowercased.contains($0) }) { + return category + } + } + + return nil + } +} + +// MARK: - Google Gemini Food Analysis Service + +/// Service for food analysis using Google Gemini Vision API (free tier) +class GoogleGeminiFoodAnalysisService { + static let shared = GoogleGeminiFoodAnalysisService() + + private let baseURLTemplate = "https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent" + + private init() {} + + func analyzeFoodImage(_ image: UIImage, apiKey: String, query: String) async throws -> AIFoodAnalysisResult { + return try await analyzeFoodImage(image, apiKey: apiKey, query: query, telemetryCallback: nil) + } + + func analyzeFoodImage(_ image: UIImage, apiKey: String, query: String, telemetryCallback: ((String) -> Void)?, preencoded: PreencodedImage? = nil) async throws -> AIFoodAnalysisResult { + + telemetryCallback?("⚙️ Configuring Gemini parameters...") + + // Get optimal model based on current analysis mode + let analysisMode = ConfigurableAIService.shared.analysisMode + let model = ConfigurableAIService.optimalModel(for: .googleGemini, mode: analysisMode) + let baseURL = baseURLTemplate.replacingOccurrences(of: "{model}", with: model) + + + guard let url = URL(string: "\(baseURL)?key=\(apiKey)") else { + throw AIFoodAnalysisError.invalidResponse + } + + // Reuse pre-encode path for Gemini as well + telemetryCallback?("🖼️ Optimizing your image...") + let pre = await ConfigurableAIService.preencodeImageForProviders(image) + let base64Image = pre.base64 + + // Create Gemini API request payload + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let payload: [String: Any] = [ + "contents": [ + [ + "parts": [ + [ + "text": query.isEmpty ? getAnalysisPrompt() : "\(query)\n\n\(getAnalysisPrompt())" + ], + [ + "inline_data": [ + "mime_type": "image/jpeg", + "data": base64Image + ] + ] + ] + ] + ], + "generationConfig": [ + "temperature": 0.01, // Minimal temperature for fastest responses + "topP": 0.95, // High value for comprehensive vocabulary + "topK": 8, // Very focused for maximum speed + "maxOutputTokens": 2500 // Balanced for speed vs detail + ] + ] + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: payload) + } catch { + throw AIFoodAnalysisError.requestCreationFailed + } + + telemetryCallback?("🌐 Sending request to Google Gemini...") + + do { + telemetryCallback?("⏳ Analyzing...") + let (data, response) = try await URLSession.shared.data(for: request) + + telemetryCallback?("📥 Received response from Gemini...") + + guard let httpResponse = response as? HTTPURLResponse else { + print("❌ Google Gemini: Invalid HTTP response") + throw AIFoodAnalysisError.invalidResponse + } + + + guard httpResponse.statusCode == 200 else { + print("❌ Google Gemini API error: \(httpResponse.statusCode)") + if let errorData = try? JSONSerialization.jsonObject(with: data) as? [String: Any] { + print("❌ Gemini API Error Details: \(errorData)") + + // Check for specific Google Gemini errors + if let error = errorData["error"] as? [String: Any], + let message = error["message"] as? String { + print("❌ Gemini Error Message: \(message)") + + // Handle common Gemini errors with specific error types + if message.contains("quota") || message.contains("QUOTA_EXCEEDED") { + throw AIFoodAnalysisError.quotaExceeded(provider: "Google Gemini") + } else if message.contains("RATE_LIMIT_EXCEEDED") || message.contains("rate limit") { + throw AIFoodAnalysisError.rateLimitExceeded(provider: "Google Gemini") + } else if message.contains("PERMISSION_DENIED") || message.contains("API_KEY_INVALID") { + throw AIFoodAnalysisError.customError("Invalid Google Gemini API key. Please check your configuration.") + } else if message.contains("RESOURCE_EXHAUSTED") { + throw AIFoodAnalysisError.creditsExhausted(provider: "Google Gemini") + } + } + } else { + print("❌ Gemini: Error data: \(String(data: data, encoding: .utf8) ?? "Unable to decode")") + } + + // Handle HTTP status codes for common credit/quota issues + if httpResponse.statusCode == 429 { + throw AIFoodAnalysisError.rateLimitExceeded(provider: "Google Gemini") + } else if httpResponse.statusCode == 403 { + throw AIFoodAnalysisError.quotaExceeded(provider: "Google Gemini") + } + + throw AIFoodAnalysisError.apiError(httpResponse.statusCode) + } + + // Add data validation + guard data.count > 0 else { + print("❌ Google Gemini: Empty response data") + throw AIFoodAnalysisError.invalidResponse + } + + // Parse Gemini response with detailed error handling + guard let jsonResponse = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("❌ Google Gemini: Failed to parse JSON response") + print("❌ Raw response: \(String(data: data, encoding: .utf8) ?? "Unable to decode")") + throw AIFoodAnalysisError.responseParsingFailed + } + + + guard let candidates = jsonResponse["candidates"] as? [[String: Any]], !candidates.isEmpty else { + print("❌ Google Gemini: No candidates in response") + if let error = jsonResponse["error"] as? [String: Any] { + print("❌ Google Gemini: API returned error: \(error)") + } + throw AIFoodAnalysisError.responseParsingFailed + } + + let firstCandidate = candidates[0] + print("🔧 Google Gemini: Candidate keys: \(Array(firstCandidate.keys))") + + guard let content = firstCandidate["content"] as? [String: Any], + let parts = content["parts"] as? [[String: Any]], + !parts.isEmpty, + let text = parts[0]["text"] as? String else { + print("❌ Google Gemini: Invalid response structure") + print("❌ Candidate: \(firstCandidate)") + throw AIFoodAnalysisError.responseParsingFailed + } + + print("🔧 Google Gemini: Received text length: \(text.count)") + + // Parse the JSON content from Gemini's response + let cleanedText = text.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "```json", with: "") + .replacingOccurrences(of: "```", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + + guard let contentData = cleanedText.data(using: .utf8), + let nutritionData = try JSONSerialization.jsonObject(with: contentData) as? [String: Any] else { + throw AIFoodAnalysisError.responseParsingFailed + } + + // Parse detailed food items analysis with crash protection + var detailedFoodItems: [FoodItemAnalysis] = [] + + do { + if let foodItemsArray = nutritionData["food_items"] as? [[String: Any]] { + // New detailed format + for (index, itemData) in foodItemsArray.enumerated() { + do { + let foodItem = FoodItemAnalysis( + name: extractString(from: itemData, keys: ["name"]) ?? "Food Item \(index + 1)", + portionEstimate: extractString(from: itemData, keys: ["portion_estimate"]) ?? "1 serving", + usdaServingSize: extractString(from: itemData, keys: ["usda_serving_size"]), + servingMultiplier: max(0.1, extractNumber(from: itemData, keys: ["serving_multiplier"]) ?? 1.0), + preparationMethod: extractString(from: itemData, keys: ["preparation_method"]), + visualCues: extractString(from: itemData, keys: ["visual_cues"]), + carbohydrates: max(0, extractNumber(from: itemData, keys: ["carbohydrates"]) ?? 0), + calories: extractNumber(from: itemData, keys: ["calories"]), + fat: extractNumber(from: itemData, keys: ["fat"]), + fiber: extractNumber(from: itemData, keys: ["fiber"]), + protein: extractNumber(from: itemData, keys: ["protein"]), + assessmentNotes: extractString(from: itemData, keys: ["assessment_notes"]), + absorptionTimeHours: { + if let v = extractNumber(from: itemData, keys: ["absorption_time_hours"]) { return min(max(v, 0), 24) } + return nil + }() + ) + detailedFoodItems.append(foodItem) + } catch { + print("⚠️ Google Gemini: Error parsing food item \(index): \(error)") + // Continue with other items + } + } + } else if let foodItemsStringArray = extractStringArray(from: nutritionData, keys: ["food_items"]) { + // Fallback to legacy format + let totalCarbs = max(0, extractNumber(from: nutritionData, keys: ["total_carbohydrates", "carbohydrates", "carbs"]) ?? 25.0) + let totalProtein = extractNumber(from: nutritionData, keys: ["total_protein", "protein"]) + let totalFat = extractNumber(from: nutritionData, keys: ["total_fat", "fat"]) + let totalFiber = extractNumber(from: nutritionData, keys: ["total_fiber", "fiber"]) + let totalCalories = extractNumber(from: nutritionData, keys: ["total_calories", "calories"]) + + let singleItem = FoodItemAnalysis( + name: foodItemsStringArray.joined(separator: ", "), + portionEstimate: extractString(from: nutritionData, keys: ["portion_size"]) ?? "1 serving", + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: nil, + visualCues: nil, + carbohydrates: totalCarbs, + calories: totalCalories, + fat: totalFat, + fiber: totalFiber, + protein: totalProtein, + assessmentNotes: "Legacy format - combined nutrition values", + absorptionTimeHours: { + if let v = extractNumber(from: nutritionData, keys: ["absorption_time_hours"]) { return min(max(v, 0), 24) } + return nil + }() + ) + detailedFoodItems = [singleItem] + } + } catch { + print("⚠️ Google Gemini: Error in food items parsing: \(error)") + } + + // If no detailed items were parsed, create a safe fallback + if detailedFoodItems.isEmpty { + let fallbackItem = FoodItemAnalysis( + name: "Analyzed Food", + portionEstimate: "1 serving", + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: "Not specified", + visualCues: "Visual analysis completed", + carbohydrates: 25.0, + calories: 200.0, + fat: 10.0, + fiber: 5.0, + protein: 15.0, + assessmentNotes: "Safe fallback nutrition estimate - check actual food for accuracy", + absorptionTimeHours: { + if let v = extractNumber(from: nutritionData, keys: ["absorption_time_hours"]) { return min(max(v, 0), 24) } + return nil + }() + ) + detailedFoodItems = [fallbackItem] + } + + // Extract totals with safety checks + let totalCarbs = max(0, extractNumber(from: nutritionData, keys: ["total_carbohydrates"]) ?? + detailedFoodItems.reduce(0) { $0 + $1.carbohydrates }) + let totalProtein = max(0, extractNumber(from: nutritionData, keys: ["total_protein"]) ?? + detailedFoodItems.compactMap { $0.protein }.reduce(0, +)) + let totalFat = max(0, extractNumber(from: nutritionData, keys: ["total_fat"]) ?? + detailedFoodItems.compactMap { $0.fat }.reduce(0, +)) + let totalFiber = max(0, extractNumber(from: nutritionData, keys: ["total_fiber"]) ?? + detailedFoodItems.compactMap { $0.fiber }.reduce(0, +)) + let totalCalories = max(0, extractNumber(from: nutritionData, keys: ["total_calories"]) ?? + detailedFoodItems.compactMap { $0.calories }.reduce(0, +)) + + let overallDescription = extractString(from: nutritionData, keys: ["overall_description", "detailed_description"]) ?? "Google Gemini analysis completed" + let portionAssessmentMethod = extractString(from: nutritionData, keys: ["portion_assessment_method", "analysis_notes"]) + let diabetesConsiderations = extractString(from: nutritionData, keys: ["diabetes_considerations"]) + let visualAssessmentDetails = extractString(from: nutritionData, keys: ["visual_assessment_details"]) + + let confidence = extractConfidence(from: nutritionData) + + // Extract image type to determine if this is menu analysis or food photo + let imageTypeString = extractString(from: nutritionData, keys: ["image_type"]) + let imageType = ImageAnalysisType(rawValue: imageTypeString ?? "food_photo") ?? .foodPhoto + + print("🔍 ========== GEMINI AI ANALYSIS RESULT CREATION ==========") + print("🔍 nutritionData keys: \(nutritionData.keys)") + if let absorptionTimeValue = nutritionData["absorption_time_hours"] { + print("🔍 Raw absorption_time_hours in JSON: \(absorptionTimeValue) (type: \(type(of: absorptionTimeValue)))") + } else { + print("🔍 ❌ absorption_time_hours key not found in nutritionData") + } + + let absorptionHours = extractNumber(from: nutritionData, keys: ["absorption_time_hours"]) + print("🔍 Extracted absorptionTimeHours: \(absorptionHours?.description ?? "nil")") + print("🔍 ========== GEMINI AI ANALYSIS RESULT CREATION COMPLETE ==========") + + // Calculate original servings for proper scaling + let originalServings = detailedFoodItems.reduce(0) { $0 + $1.servingMultiplier } + + return AIFoodAnalysisResult( + imageType: imageType, + foodItemsDetailed: detailedFoodItems, + overallDescription: overallDescription, + confidence: confidence, numericConfidence: extractNumericConfidence(from: nutritionData), + totalFoodPortions: extractNumber(from: nutritionData, keys: ["total_food_portions"]).map { Int($0) }, + totalUsdaServings: extractNumber(from: nutritionData, keys: ["total_usda_servings"]), + totalCarbohydrates: totalCarbs, + totalProtein: totalProtein > 0 ? totalProtein : nil, + totalFat: totalFat > 0 ? totalFat : nil, + totalFiber: totalFiber, + totalCalories: totalCalories > 0 ? totalCalories : nil, + portionAssessmentMethod: portionAssessmentMethod, + diabetesConsiderations: diabetesConsiderations, + visualAssessmentDetails: visualAssessmentDetails, + notes: "Analyzed using Google Gemini Vision - AI food recognition with enhanced safety measures", + originalServings: originalServings, + fatProteinUnits: extractString(from: nutritionData, keys: ["fat_protein_units"]), + netCarbsAdjustment: extractString(from: nutritionData, keys: ["net_carbs_adjustment"]), + insulinTimingRecommendations: extractString(from: nutritionData, keys: ["insulin_timing_recommendations"]), + fpuDosingGuidance: extractString(from: nutritionData, keys: ["fpu_dosing_guidance"]), + exerciseConsiderations: extractString(from: nutritionData, keys: ["exercise_considerations"]), + absorptionTimeHours: absorptionHours, + absorptionTimeReasoning: extractString(from: nutritionData, keys: ["absorption_time_reasoning"]), + mealSizeImpact: extractString(from: nutritionData, keys: ["meal_size_impact"]), + individualizationFactors: extractString(from: nutritionData, keys: ["individualization_factors"]), + safetyAlerts: extractString(from: nutritionData, keys: ["safety_alerts"]) + ) + + } catch let error as AIFoodAnalysisError { + throw error + } catch { + throw AIFoodAnalysisError.networkError(error) + } + } + + // MARK: - Helper Methods + + private func extractNumber(from json: [String: Any], keys: [String]) -> Double? { + for key in keys { + if let value = json[key] as? Double { + return max(0, value) // Ensure non-negative nutrition values + } else if let value = json[key] as? Int { + return max(0, Double(value)) // Ensure non-negative nutrition values + } else if let value = json[key] as? String, let doubleValue = Double(value) { + return max(0, doubleValue) // Ensure non-negative nutrition values + } + } + return nil + } + + private func extractString(from json: [String: Any], keys: [String]) -> String? { + for key in keys { + if let value = json[key] as? String, !value.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return value.trimmingCharacters(in: .whitespacesAndNewlines) + } + } + return nil + } + + private func extractStringArray(from json: [String: Any], keys: [String]) -> [String]? { + for key in keys { + if let value = json[key] as? [String] { + let cleanedItems = value.compactMap { item in + let cleaned = item.trimmingCharacters(in: .whitespacesAndNewlines) + return cleaned.isEmpty ? nil : cleaned + } + return cleanedItems.isEmpty ? nil : cleanedItems + } else if let value = json[key] as? String { + let cleaned = value.trimmingCharacters(in: .whitespacesAndNewlines) + return cleaned.isEmpty ? nil : [cleaned] + } + } + return nil + } + + private func extractConfidence(from json: [String: Any]) -> AIConfidenceLevel { + let confidenceKeys = ["confidence", "confidence_score"] + + for key in confidenceKeys { + if let value = json[key] as? Double { + if value >= 0.8 { + return .high + } else if value >= 0.5 { + return .medium + } else { + return .low + } + } else if let value = json[key] as? String { + switch value.lowercased() { + case "high": + return .high + case "medium": + return .medium + case "low": + return .low + default: + continue + } + } + } + + return .high // Gemini typically has high confidence + } +} + +// MARK: - Basic Food Analysis Service (No API Key Required) + +/// Basic food analysis using built-in logic and food database +/// Provides basic nutrition estimates without requiring external API keys +class BasicFoodAnalysisService { + static let shared = BasicFoodAnalysisService() + private init() {} + + func analyzeFoodImage(_ image: UIImage) async throws -> AIFoodAnalysisResult { + return try await analyzeFoodImage(image, telemetryCallback: nil) + } + + func analyzeFoodImage(_ image: UIImage, telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + telemetryCallback?("📊 Initializing analysis...") + + // Simulate analysis time for better UX with telemetry updates + telemetryCallback?("📱 Analyzing your image...") + try await Task.sleep(nanoseconds: 500_000_000) // 0.5 seconds + + telemetryCallback?("🍽️ Identifying food characteristics...") + try await Task.sleep(nanoseconds: 500_000_000) // 0.5 seconds + + telemetryCallback?("📊 Calculating nutrition estimates...") + try await Task.sleep(nanoseconds: 500_000_000) // 0.5 seconds + + // Basic analysis based on image characteristics and common foods + telemetryCallback?("⚙️ Processing the results...") + let analysisResult = performBasicAnalysis(image: image) + + return analysisResult + } + + private func performBasicAnalysis(image: UIImage) -> AIFoodAnalysisResult { + // Basic analysis logic - could be enhanced with Core ML models in the future + + // Analyze image characteristics + let imageSize = image.size + let brightness = calculateImageBrightness(image: image) + + // Generate basic food estimation based on image properties + let foodItems = generateBasicFoodEstimate(imageSize: imageSize, brightness: brightness) + + // Calculate totals + let totalCarbs = foodItems.reduce(0) { $0 + $1.carbohydrates } + let totalProtein = foodItems.compactMap { $0.protein }.reduce(0, +) + let totalFat = foodItems.compactMap { $0.fat }.reduce(0, +) + let totalFiber = foodItems.compactMap { $0.fiber }.reduce(0, +) + let totalCalories = foodItems.compactMap { $0.calories }.reduce(0, +) + + // Calculate original servings for proper scaling + let originalServings = foodItems.reduce(0) { $0 + $1.servingMultiplier } + + return AIFoodAnalysisResult( + imageType: .foodPhoto, // Fallback analysis assumes food photo + foodItemsDetailed: foodItems, + overallDescription: "Basic analysis of visible food items. For more accurate results, consider using an AI provider with API key.", + confidence: .medium, numericConfidence: nil, + totalFoodPortions: foodItems.count, + totalUsdaServings: Double(foodItems.count), // Fallback estimate + totalCarbohydrates: totalCarbs, + totalProtein: totalProtein > 0 ? totalProtein : nil, + totalFat: totalFat > 0 ? totalFat : nil, + totalFiber: totalFiber > 0 ? totalFiber : nil, + totalCalories: totalCalories > 0 ? totalCalories : nil, + portionAssessmentMethod: "Estimated based on image size and typical serving portions", + diabetesConsiderations: "Basic carbohydrate estimate provided. Monitor blood glucose response and adjust insulin as needed.", + visualAssessmentDetails: nil, + notes: "This is a basic analysis. For more detailed and accurate nutrition information, consider configuring an AI provider in Settings.", + originalServings: originalServings, + fatProteinUnits: nil, + netCarbsAdjustment: nil, + insulinTimingRecommendations: nil, + fpuDosingGuidance: nil, + exerciseConsiderations: nil, + absorptionTimeHours: nil, + absorptionTimeReasoning: nil, + mealSizeImpact: nil, + individualizationFactors: nil, + safetyAlerts: nil + ) + } + + private func calculateImageBrightness(image: UIImage) -> Double { + // Simple brightness calculation based on image properties + // In a real implementation, this could analyze pixel values + return 0.6 // Default medium brightness + } + + private func generateBasicFoodEstimate(imageSize: CGSize, brightness: Double) -> [FoodItemAnalysis] { + // Generate basic food estimates based on common foods and typical portions + // This is a simplified approach - could be enhanced with food recognition models + + let portionSize = estimatePortionSize(imageSize: imageSize) + + // Common food estimation + let commonFoods = [ + "Mixed Plate", + "Carbohydrate-rich Food", + "Protein Source", + "Vegetables" + ] + + let selectedFood = commonFoods.randomElement() ?? "Mixed Meal" + + return [ + FoodItemAnalysis( + name: selectedFood, + portionEstimate: portionSize, + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: "Not specified", + visualCues: nil, + carbohydrates: estimateCarbohydrates(for: selectedFood, portion: portionSize), + calories: estimateCalories(for: selectedFood, portion: portionSize), + fat: estimateFat(for: selectedFood, portion: portionSize), + fiber: estimateFiber(for: selectedFood, portion: portionSize), + protein: estimateProtein(for: selectedFood, portion: portionSize), + assessmentNotes: "Basic estimate based on typical portions and common nutrition values. For diabetes management, monitor actual blood glucose response.", + absorptionTimeHours: nil + ) + ] + } + + private func estimatePortionSize(imageSize: CGSize) -> String { + let area = imageSize.width * imageSize.height + + if area < 100000 { + return "Small portion (about 1/2 cup or 3-4 oz)" + } else if area < 300000 { + return "Medium portion (about 1 cup or 6 oz)" + } else { + return "Large portion (about 1.5 cups or 8+ oz)" + } + } + + private func estimateCarbohydrates(for food: String, portion: String) -> Double { + // Basic carb estimates based on food type and portion + let baseCarbs: Double + + switch food { + case "Carbohydrate-rich Food": + baseCarbs = 45.0 // Rice, pasta, bread + case "Mixed Plate": + baseCarbs = 30.0 // Typical mixed meal + case "Protein Source": + baseCarbs = 5.0 // Meat, fish, eggs + case "Vegetables": + baseCarbs = 15.0 // Mixed vegetables + default: + baseCarbs = 25.0 // Default mixed food + } + + // Adjust for portion size + if portion.contains("Small") { + return baseCarbs * 0.7 + } else if portion.contains("Large") { + return baseCarbs * 1.4 + } else { + return baseCarbs + } + } + + private func estimateProtein(for food: String, portion: String) -> Double? { + let baseProtein: Double + + switch food { + case "Protein Source": + baseProtein = 25.0 + case "Mixed Plate": + baseProtein = 15.0 + case "Carbohydrate-rich Food": + baseProtein = 8.0 + case "Vegetables": + baseProtein = 3.0 + default: + baseProtein = 12.0 + } + + // Adjust for portion size + if portion.contains("Small") { + return baseProtein * 0.7 + } else if portion.contains("Large") { + return baseProtein * 1.4 + } else { + return baseProtein + } + } + + private func estimateFat(for food: String, portion: String) -> Double? { + let baseFat: Double + + switch food { + case "Protein Source": + baseFat = 12.0 + case "Mixed Plate": + baseFat = 8.0 + case "Carbohydrate-rich Food": + baseFat = 2.0 + case "Vegetables": + baseFat = 1.0 + default: + baseFat = 6.0 + } + + // Adjust for portion size + if portion.contains("Small") { + return baseFat * 0.7 + } else if portion.contains("Large") { + return baseFat * 1.4 + } else { + return baseFat + } + } + + private func estimateCalories(for food: String, portion: String) -> Double? { + let baseCalories: Double + + switch food { + case "Protein Source": + baseCalories = 200.0 + case "Mixed Plate": + baseCalories = 300.0 + case "Carbohydrate-rich Food": + baseCalories = 220.0 + case "Vegetables": + baseCalories = 60.0 + default: + baseCalories = 250.0 + } + + // Adjust for portion size + if portion.contains("Small") { + return baseCalories * 0.7 + } else if portion.contains("Large") { + return baseCalories * 1.4 + } else { + return baseCalories + } + } + + private func estimateFiber(for food: String, portion: String) -> Double? { + let baseFiber: Double + + switch food { + case "Protein Source": + baseFiber = 0.5 + case "Mixed Plate": + baseFiber = 4.0 + case "Carbohydrate-rich Food": + baseFiber = 3.0 + case "Vegetables": + baseFiber = 6.0 + default: + baseFiber = 2.5 + } + + // Adjust for portion size + if portion.contains("Small") { + return baseFiber * 0.7 + } else if portion.contains("Large") { + return baseFiber * 1.4 + } else { + return baseFiber + } + } +} + +// MARK: - Claude Food Analysis Service + +/// Claude (Anthropic) food analysis service +class ClaudeFoodAnalysisService { + static let shared = ClaudeFoodAnalysisService() + private init() {} + + func analyzeFoodImage(_ image: UIImage, apiKey: String, query: String) async throws -> AIFoodAnalysisResult { + return try await analyzeFoodImage(image, apiKey: apiKey, query: query, telemetryCallback: nil) + } + + func analyzeFoodImage(_ image: UIImage, apiKey: String, query: String, telemetryCallback: ((String) -> Void)?, preencoded: PreencodedImage? = nil) async throws -> AIFoodAnalysisResult { + guard let url = URL(string: "https://api.anthropic.com/v1/messages") else { + throw AIFoodAnalysisError.invalidResponse + } + + // Get optimal model based on current analysis mode + telemetryCallback?("⚙️ Configuring parameters...") + let analysisMode = ConfigurableAIService.shared.analysisMode + let model = ConfigurableAIService.optimalModel(for: .claude, mode: analysisMode) + + + // Use pre-encoded image if available (avoids recompression) + telemetryCallback?("🖼️ Optimizing your image...") + let pre: PreencodedImage + if let provided = preencoded { + pre = provided + } else { + pre = await ConfigurableAIService.preencodeImageForProviders(image) + } + let base64Image = pre.base64 + + // Prepare the request + telemetryCallback?("📡 Preparing API request...") + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + // Trim potential whitespace/newlines from pasted keys to avoid auth errors + let trimmedKey = apiKey.trimmingCharacters(in: .whitespacesAndNewlines) + request.setValue(trimmedKey, forHTTPHeaderField: "x-api-key") + request.setValue("2023-06-01", forHTTPHeaderField: "anthropic-version") + + let requestBody: [String: Any] = [ + "model": model, // Dynamic model selection based on analysis mode + "max_tokens": 2500, // Balanced for speed vs detail + "temperature": 0.01, // Optimized for faster, more deterministic responses + "messages": [ + [ + "role": "user", + "content": [ + [ + "type": "text", + "text": query.isEmpty ? getAnalysisPrompt() : "\(query)\n\n\(getAnalysisPrompt())" + ], + [ + "type": "image", + "source": [ + "type": "base64", + "media_type": "image/jpeg", + "data": base64Image + ] + ] + ] + ] + ] + ] + + request.httpBody = try JSONSerialization.data(withJSONObject: requestBody) + + telemetryCallback?("🌐 Sending request to AI...") + + // Make the request + telemetryCallback?("⏳ Analyzing...") + let (data, response) = try await URLSession.shared.data(for: request) + + telemetryCallback?("📥 Received response from AI...") + + guard let httpResponse = response as? HTTPURLResponse else { + print("❌ Claude: Invalid HTTP response") + throw AIFoodAnalysisError.invalidResponse + } + + + guard httpResponse.statusCode == 200 else { + if let errorData = try? JSONSerialization.jsonObject(with: data) as? [String: Any] { + print("❌ Claude API Error: \(errorData)") + if let error = errorData["error"] as? [String: Any], + let message = error["message"] as? String { + print("❌ Claude Error Message: \(message)") + + // Handle common Claude errors with specific error types + if message.contains("credit") || message.contains("billing") || message.contains("usage") { + throw AIFoodAnalysisError.creditsExhausted(provider: "Claude") + } else if message.contains("rate_limit") || message.contains("rate limit") { + throw AIFoodAnalysisError.rateLimitExceeded(provider: "Claude") + } else if message.contains("quota") || message.contains("limit") { + throw AIFoodAnalysisError.quotaExceeded(provider: "Claude") + } else if message.contains("authentication") || message.contains("invalid") && message.contains("key") { + throw AIFoodAnalysisError.customError("Invalid Claude API key. Please check your configuration.") + } + } + } else { + print("❌ Claude: Error data: \(String(data: data, encoding: .utf8) ?? "Unable to decode")") + } + + // Handle HTTP status codes for common credit/quota issues + if httpResponse.statusCode == 429 { + throw AIFoodAnalysisError.rateLimitExceeded(provider: "Claude") + } else if httpResponse.statusCode == 402 { + throw AIFoodAnalysisError.creditsExhausted(provider: "Claude") + } else if httpResponse.statusCode == 403 { + throw AIFoodAnalysisError.quotaExceeded(provider: "Claude") + } + + throw AIFoodAnalysisError.apiError(httpResponse.statusCode) + } + + // Enhanced data validation like Gemini + guard data.count > 0 else { + print("❌ Claude: Empty response data") + throw AIFoodAnalysisError.invalidResponse + } + + // Parse response + telemetryCallback?("🔍 Parsing Claude response...") + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("❌ Claude: Failed to parse JSON response") + print("❌ Claude: Raw response: \(String(data: data, encoding: .utf8) ?? "Unable to decode")") + throw AIFoodAnalysisError.responseParsingFailed + } + + guard let content = json["content"] as? [[String: Any]], + let firstContent = content.first, + let text = firstContent["text"] as? String else { + print("❌ Claude: Invalid response structure") + print("❌ Claude: Response JSON: \(json)") + throw AIFoodAnalysisError.responseParsingFailed + } + + // Add detailed logging like Gemini + print("🔧 Claude: Received text length: \(text.count)") + + // Parse the JSON response from Claude + telemetryCallback?("⚡ Processing AI analysis results...") + return try parseClaudeAnalysis(text) + } + + private func parseClaudeAnalysis(_ text: String) throws -> AIFoodAnalysisResult { + // Clean the text and extract JSON from Claude's response + let cleanedText = text.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "```json", with: "") + .replacingOccurrences(of: "```", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + + // Safely extract JSON content with proper bounds checking + var jsonString: String + if let jsonStartRange = cleanedText.range(of: "{"), + let jsonEndRange = cleanedText.range(of: "}", options: .backwards), + jsonStartRange.lowerBound < jsonEndRange.upperBound { // Ensure valid range + // Safely extract from start brace to end brace (inclusive) + jsonString = String(cleanedText[jsonStartRange.lowerBound.. Double? { + for key in keys { + if let value = json[key] as? Double { + return max(0, value) // Ensure non-negative nutrition values like Gemini + } else if let value = json[key] as? Int { + return max(0, Double(value)) // Ensure non-negative + } else if let value = json[key] as? String, let doubleValue = Double(value) { + return max(0, doubleValue) // Ensure non-negative + } + } + return nil + } + + private func extractClaudeString(from json: [String: Any], keys: [String]) -> String? { + for key in keys { + if let value = json[key] as? String, !value.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + return value.trimmingCharacters(in: .whitespacesAndNewlines) // Enhanced validation like Gemini + } + } + return nil + } + + private func extractConfidence(from json: [String: Any]) -> AIConfidenceLevel { + let confidenceKeys = ["confidence", "confidence_score"] + + for key in confidenceKeys { + if let value = json[key] as? Double { + if value >= 0.8 { + return .high + } else if value >= 0.5 { + return .medium + } else { + return .low + } + } else if let value = json[key] as? String { + // Enhanced string-based confidence detection like Gemini + switch value.lowercased() { + case "high": + return .high + case "medium": + return .medium + case "low": + return .low + default: + continue + } + } + } + + return .medium // Default to medium instead of assuming high + } +} +// MARK: - GPT-5 Enhanced Request Handling + +/// Performs a GPT-5 request with retry logic and enhanced timeout handling +private func performGPT5RequestWithRetry(request: URLRequest, telemetryCallback: ((String) -> Void)?) async throws -> (Data, URLResponse) { + let maxRetries = 2 + + for attempt in 1...maxRetries { + do { + telemetryCallback?("🔄 GPT-5 attempt \(attempt)/\(maxRetries)...") + + let config = URLSessionConfiguration.default + config.timeoutIntervalForRequest = 60 + config.timeoutIntervalForResource = 80 + let session = URLSession(configuration: config) + + let (data, response) = try await withTimeoutForAnalysis(seconds: 40) { + try await session.data(for: request) + } + + return (data, response) + + } catch AIFoodAnalysisError.timeout { + if attempt < maxRetries { + let backoffDelay = Double(attempt) * 1.5 + telemetryCallback?("⏳ GPT-5 retry in \(String(format: "%.1f", backoffDelay))s...") + try await Task.sleep(nanoseconds: UInt64(backoffDelay * 1_000_000_000)) + } + } catch { + throw error + } + } + + telemetryCallback?("❌ GPT-5 requests timed out, switching to GPT-4o...") + + throw AIFoodAnalysisError.customError("GPT-5 timeout") +} + +/// Retry the request with GPT-4o after GPT-5 failure +private func retryWithGPT4Fallback(_ image: UIImage, apiKey: String, query: String, + analysisPrompt: String, isAdvancedPrompt: Bool, + telemetryCallback: ((String) -> Void)?) async throws -> AIFoodAnalysisResult { + + // Use GPT-4o model for fallback + let fallbackModel = "gpt-4o" + let compressionQuality: CGFloat = 0.85 // Standard compression for GPT-4 + + guard let imageData = image.jpegData(compressionQuality: compressionQuality), + let url = URL(string: "https://api.openai.com/v1/chat/completions") else { + throw AIFoodAnalysisError.imageProcessingFailed + } + + let base64Image = imageData.base64EncodedString() + + // Create GPT-4o request with appropriate timeouts + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization") + request.timeoutInterval = isAdvancedPrompt ? 150 : 30 + + // Create GPT-4o payload + let finalPrompt = query.isEmpty ? analysisPrompt : "\(query)\n\n\(analysisPrompt)" + let payload: [String: Any] = [ + "model": fallbackModel, + "max_completion_tokens": isAdvancedPrompt ? 6000 : 2500, + "temperature": 0.01, + "messages": [ + [ + "role": "user", + "content": [ + [ + "type": "text", + "text": finalPrompt + ], + [ + "type": "image_url", + "image_url": [ + "url": "data:image/jpeg;base64,\(base64Image)", + "detail": "high" + ] + ] + ] + ] + ] + ] + + request.httpBody = try JSONSerialization.data(withJSONObject: payload) + + print("🔄 Fallback request: Using \(fallbackModel) with \(request.timeoutInterval)s timeout") + + // Execute GPT-4o request + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw AIFoodAnalysisError.invalidResponse + } + + guard httpResponse.statusCode == 200 else { + throw AIFoodAnalysisError.apiError(httpResponse.statusCode) + } + + // Parse the response (reuse the existing parsing logic) + guard let jsonResponse = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let choices = jsonResponse["choices"] as? [[String: Any]], + let firstChoice = choices.first, + let message = firstChoice["message"] as? [String: Any], + let content = message["content"] as? String else { + throw AIFoodAnalysisError.responseParsingFailed + } + + telemetryCallback?("✅ GPT-4o fallback successful!") + print("✅ GPT-4o fallback completed successfully") + + // Use the same parsing logic as the main function + return try parseOpenAIResponse(content: content) +} diff --git a/Loop/Services/FoodFinder/FoodFinder_AIProviderConfig.swift b/Loop/Services/FoodFinder/FoodFinder_AIProviderConfig.swift new file mode 100644 index 0000000000..cc56efb307 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_AIProviderConfig.swift @@ -0,0 +1,211 @@ +// +// AIProviderConfiguration.swift +// Loop +// +// Created by Taylor Patterson on 9/30/25. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - Authentication Type + +/// Authentication types supported by AI providers +enum AuthType: String, CaseIterable, Codable, Equatable { + case bearer = "Bearer Token" + case apiKey = "API Key Header" + case custom = "Custom Header" + + /// The header field name for this auth type + var headerField: String { + switch self { + case .bearer: + return "Authorization" + case .apiKey: + return "x-api-key" + case .custom: + return "Custom" + } + } +} + +// MARK: - AI Provider Configuration + +/// Configuration for an AI provider that can be used for food analysis +struct AIProviderConfiguration: Identifiable, Codable, Equatable { + var id: String + var name: String + var baseURL: String + var model: String + var apiKey: String + var endpointPath: String + var authType: AuthType + var requestTemplate: String + var responseKeyPath: String + var supportsVision: Bool + var headers: [String: String] + var testEndpointPath: String? + var apiVersion: String? + var organizationID: String? + // Custom auth fields (used when authType == .custom) + var customHeaderName: String? + var customHeaderValue: String? + + init( + id: String = UUID().uuidString, + name: String, + baseURL: String, + model: String, + apiKey: String, + endpointPath: String = "/v1/chat/completions", + authType: AuthType = .bearer, + requestTemplate: String = AIProviderConfiguration.openAITemplate, + responseKeyPath: String = "choices.0.message.content", + supportsVision: Bool = true, + headers: [String: String] = ["Content-Type": "application/json"], + testEndpointPath: String? = nil, + apiVersion: String? = nil, + organizationID: String? = nil, + customHeaderName: String? = nil, + customHeaderValue: String? = nil + ) { + self.id = id + self.name = name + self.baseURL = baseURL + self.model = model + self.apiKey = apiKey + self.endpointPath = endpointPath + self.authType = authType + self.requestTemplate = requestTemplate + self.responseKeyPath = responseKeyPath + self.supportsVision = supportsVision + self.headers = headers + self.testEndpointPath = testEndpointPath + self.apiVersion = apiVersion + self.organizationID = organizationID + self.customHeaderName = customHeaderName + self.customHeaderValue = customHeaderValue + } + + // MARK: - Request Templates + + /// OpenAI-compatible request template for vision models + static let openAITemplate = """ +{ + "model": "{{MODEL}}", + "messages": [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "{{PROMPT}}" + }, + { + "type": "image_url", + "image_url": { + "url": "data:image/jpeg;base64,{{IMAGE_BASE64}}" + } + } + ] + } + ], + "max_tokens": 4096 +} +""" + + /// Claude/Anthropic request template for vision + static let claudeTemplate = """ +{ + "model": "{{MODEL}}", + "max_tokens": 4096, + "messages": [ + { + "role": "user", + "content": [ + { + "type": "image", + "source": { + "type": "base64", + "media_type": "image/jpeg", + "data": "{{IMAGE_BASE64}}" + } + }, + { + "type": "text", + "text": "{{PROMPT}}" + } + ] + } + ] +} +""" + + /// Google Gemini request template + static let geminiTemplate = """ +{ + "contents": [ + { + "parts": [ + { + "text": "{{PROMPT}}" + }, + { + "inline_data": { + "mime_type": "image/jpeg", + "data": "{{IMAGE_BASE64}}" + } + } + ] + } + ], + "generationConfig": { + "maxOutputTokens": 4096 + } +} +""" +} + +// MARK: - UserDefaults Extension + +extension UserDefaults { + private enum AIConfigKey: String { + case aiProviderConfigurations = "com.loopkit.Loop.aiProviderConfigurations" + case activeAIProviderConfigurationId = "com.loopkit.Loop.activeAIProviderConfigurationId" + } + + /// All stored AI provider configurations + var aiProviderConfigurations: [AIProviderConfiguration] { + get { + guard let data = data(forKey: AIConfigKey.aiProviderConfigurations.rawValue) else { + return [] + } + let decoder = JSONDecoder() + return (try? decoder.decode([AIProviderConfiguration].self, from: data)) ?? [] + } + set { + let encoder = JSONEncoder() + if let data = try? encoder.encode(newValue) { + set(data, forKey: AIConfigKey.aiProviderConfigurations.rawValue) + } + } + } + + /// The ID of the currently active AI provider configuration + var activeAIProviderConfigurationId: String? { + get { + return string(forKey: AIConfigKey.activeAIProviderConfigurationId.rawValue) + } + set { + set(newValue, forKey: AIConfigKey.activeAIProviderConfigurationId.rawValue) + } + } + + /// The currently active AI provider configuration (computed from ID) + var activeAIProviderConfiguration: AIProviderConfiguration? { + guard let activeId = activeAIProviderConfigurationId else { + return nil + } + return aiProviderConfigurations.first { $0.id == activeId } + } +} diff --git a/Loop/Services/FoodFinder/FoodFinder_AIServiceAdapter.swift b/Loop/Services/FoodFinder/FoodFinder_AIServiceAdapter.swift new file mode 100644 index 0000000000..282639d4d7 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_AIServiceAdapter.swift @@ -0,0 +1,87 @@ +// +// AIServiceAdapter.swift +// Loop +// +// Created by Taylor Patterson on 9/30/25. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import UIKit +import os.log + +/// Adapter that bridges between the new AIServiceManager and the existing AIFoodAnalysisService interface +class AIServiceAdapter { + static let shared = AIServiceAdapter() + + private let log = OSLog(category: "AIServiceAdapter") + private let settingsManager = AISettingsManager.shared + private let aiServiceManager = AIServiceManager.shared + + private init() {} + + /// Analyze a food image using the active AI provider configuration + /// - Parameters: + /// - image: The image to analyze + /// - query: Optional search query + /// - telemetryCallback: Callback for progress updates + /// - Returns: AIFoodAnalysisResult with analysis + func analyzeFoodImage( + _ image: UIImage, + query: String = "", + telemetryCallback: ((String) -> Void)? = nil + ) async throws -> AIFoodAnalysisResult { + // Get the active configuration + guard let config = try? await settingsManager.loadActiveConfiguration() else { + throw AIFoodAnalysisError.configurationError("No active AI provider configuration") + } + + telemetryCallback?("⚙️ Using \(config.name) for analysis...") + + do { + // Use the new AIServiceManager to perform the analysis + let result = try await aiServiceManager.analyzeFoodImage( + image, + using: config, + query: query + ) + + telemetryCallback?("✅ Analysis complete") + return result + + } catch { + telemetryCallback?("❌ Analysis failed: \(error.localizedDescription)") + throw error + } + } + + /// Test the connection to the active AI provider + func testConnection() async -> Bool { + do { + guard let config = try? await settingsManager.loadActiveConfiguration() else { + return false + } + + return await aiServiceManager.testConnection(to: config) + + } catch { + log.error("Failed to test connection: %{public}@", error.localizedDescription) + return false + } + } + + /// Get the active provider name for display + func getActiveProviderName() async -> String { + do { + guard let config = try? await settingsManager.loadActiveConfiguration() else { + return "No Active Provider" + } + return config.name + + } catch { + log.error("Failed to get active provider: %{public}@", error.localizedDescription) + return "Unknown Provider" + } + } +} + diff --git a/Loop/Services/FoodFinder/FoodFinder_AIServiceManager.swift b/Loop/Services/FoodFinder/FoodFinder_AIServiceManager.swift new file mode 100644 index 0000000000..a9eb4a09cd --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_AIServiceManager.swift @@ -0,0 +1,466 @@ +// +// AIServiceManager.swift +// Loop +// +// Created by Taylor Patterson on 9/30/25. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import os.log +import UIKit +import LoopKit + +/// Manages AI service operations using the provider-agnostic configuration +final class AIServiceManager { + static let shared = AIServiceManager() + + private let log = OSLog(category: "AIServiceManager") + private let session = URLSession.shared + private let jsonDecoder = JSONDecoder() + private let imageCache = NSCache() + + private init() { + jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase + imageCache.countLimit = 20 // Cache up to 20 images + } + + // MARK: - Public Methods + + /// Analyzes a food image using the specified AI provider configuration + /// - Parameters: + /// - image: The image to analyze + /// - configuration: The AI provider configuration to use + /// - query: Optional search query to guide the analysis + /// - Returns: The analysis result + func analyzeFoodImage( + _ image: UIImage, + using configuration: AIProviderConfiguration, + query: String = "" + ) async throws -> AIFoodAnalysisResult { + // 1. Validate configuration + guard configuration.supportsVision else { + throw AIFoodAnalysisError.invalidModel + } + + // 2. Prepare the image + let preparedImage = await prepareImageForAnalysis(image) + + // 3. Create the request + let request = try createRequest( + with: configuration, + image: preparedImage, + query: query + ) + + // 4. Make the request with timeout + let (data, response): (Data, URLResponse) = try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<(Data, URLResponse), Error>) in + let task = session.dataTask(with: request) { data, response, error in + if let error = error { + continuation.resume(throwing: AIFoodAnalysisError.networkError(error)) + return + } + + guard let data = data, let response = response else { + continuation.resume(throwing: AIFoodAnalysisError.invalidResponse) + return + } + + continuation.resume(returning: (data, response)) + } + + task.resume() + } + + // 5. Validate the response + guard let httpResponse = response as? HTTPURLResponse else { + throw AIFoodAnalysisError.invalidResponse + } + + // Handle rate limiting and quota errors + switch httpResponse.statusCode { + case 429: + throw AIFoodAnalysisError.rateLimitExceededGeneric + case 402, 403: + throw AIFoodAnalysisError.insufficientQuota + case 400..<500: + let errorMessage = String(data: data, encoding: .utf8) ?? "Client error" + throw AIFoodAnalysisError.apiErrorWithMessage(statusCode: httpResponse.statusCode, message: errorMessage) + case 500..<600: + let errorMessage = String(data: data, encoding: .utf8) ?? "Server error" + throw AIFoodAnalysisError.serverError(errorMessage) + default: + break + } + + guard (200...299).contains(httpResponse.statusCode) else { + let errorMessage = String(data: data, encoding: .utf8) ?? "Unknown error" + log.error("AI API error: %{public}@", errorMessage) + throw AIFoodAnalysisError.apiErrorWithMessage(statusCode: httpResponse.statusCode, message: errorMessage) + } + + // 6. Parse the response + do { + return try parseResponse(data: data, configuration: configuration) + } catch let error as AIFoodAnalysisError { + throw error + } catch { + log.error("Failed to parse AI response: %{public}@", error.localizedDescription) + throw AIFoodAnalysisError.invalidResponseFormat + } + } + + /// Tests the connection to an AI provider + /// - Parameter configuration: The configuration to test + /// - Returns: True if the connection was successful + func testConnection(to configuration: AIProviderConfiguration) async -> Bool { + do { + // Create a simple test request + let request = try createTestRequest(with: configuration) + + // Make the request with a timeout + let (data, response): (Data, URLResponse) = try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<(Data, URLResponse), Error>) in + let task = session.dataTask(with: request) { data, response, error in + if let error = error { + continuation.resume(throwing: error) + return + } + + guard let data = data, let response = response else { + continuation.resume(throwing: AIFoodAnalysisError.invalidResponse) + return + } + + continuation.resume(returning: (data, response)) + } + + task.resume() + } + + // Check if the response is valid + guard let httpResponse = response as? HTTPURLResponse else { + return false + } + + // Log the response for debugging + let statusCode = httpResponse.statusCode + let responseBody = String(data: data, encoding: .utf8) ?? "" + let truncatedResponse = String(responseBody.prefix(200)) + log.debug("Test connection to %{public}@: Status %d, Response: %{public}@", + configuration.name, statusCode, truncatedResponse) + + // Consider 2xx and 4xx (auth errors) as valid responses + // since they indicate the endpoint is reachable + let isValid = (200...499).contains(statusCode) + + if !isValid { + log.error("Connection test failed with status %d: %{public}@", + statusCode, truncatedResponse) + } + + return isValid + } catch { + log.error("Connection test failed: %{public}@", error.localizedDescription) + return false + } + } + + // MARK: - Private Methods + + private func prepareImageForAnalysis(_ image: UIImage) async -> UIImage { + // Optimize the image for analysis + let targetSize = CGSize(width: 1024, height: 1024) + let resizedImage = await image.byPreparingForAnalysis(targetSize: targetSize) + return resizedImage + } + + private func createRequest( + with configuration: AIProviderConfiguration, + image: UIImage, + query: String + ) throws -> URLRequest { + // 1. Construct the URL + let baseURL = configuration.baseURL.trimmingCharacters(in: ["/"]) + let endpoint = configuration.endpointPath.starts(with: "/") ? + String(configuration.endpointPath.dropFirst()) : + configuration.endpointPath + + let urlString = "\(baseURL)/\(endpoint)" + guard let url = URL(string: urlString) else { + throw AIFoodAnalysisError.invalidURL(urlString) + } + + // 2. Prepare the request body + var requestBody = configuration.requestTemplate + .replacingOccurrences(of: "{{MODEL}}", with: configuration.model) + .replacingOccurrences(of: "{{PROMPT}}", with: query) + + // Add the image if the provider supports vision + if configuration.supportsVision, let imageData = image.jpegData(compressionQuality: 0.8) { + let base64Image = imageData.base64EncodedString() + requestBody = requestBody.replacingOccurrences(of: "{{IMAGE_BASE64}}", with: base64Image) + } + + // 3. Create the request + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.httpBody = requestBody.data(using: .utf8) + + // 4. Set headers + configuration.headers.forEach { key, value in + request.setValue(value, forHTTPHeaderField: key) + } + + // 5. Add authentication + switch configuration.authType { + case .bearer: + request.setValue("Bearer \(configuration.apiKey)", forHTTPHeaderField: "Authorization") + case .apiKey: + request.setValue(configuration.apiKey, forHTTPHeaderField: "x-api-key") + case .custom: + if let header = configuration.customHeaderName, let value = configuration.customHeaderValue { + let finalValue = value.replacingOccurrences(of: "{{API_KEY}}", with: configuration.apiKey) + request.setValue(finalValue, forHTTPHeaderField: header) + } + } + + return request + } + + private func createTestRequest(with configuration: AIProviderConfiguration) throws -> URLRequest { + // Create a lightweight test request to validate the connection + let baseURL = configuration.baseURL.trimmingCharacters(in: ["/"]) + let testEndpoint = configuration.testEndpointPath ?? configuration.endpointPath + let urlString = "\(baseURL)/\(testEndpoint)" + + guard let url = URL(string: urlString) else { + throw AIFoodAnalysisError.invalidURL(urlString) + } + + var request = URLRequest(url: url) + request.httpMethod = "GET" + request.timeoutInterval = 10 // Shorter timeout for connection tests + + // Add authentication + switch configuration.authType { + case .bearer: + request.setValue("Bearer \(configuration.apiKey)", forHTTPHeaderField: "Authorization") + case .apiKey: + request.setValue(configuration.apiKey, forHTTPHeaderField: "x-api-key") + case .custom: + if let header = configuration.customHeaderName, let value = configuration.customHeaderValue { + let finalValue = value.replacingOccurrences(of: "{{API_KEY}}", with: configuration.apiKey) + request.setValue(finalValue, forHTTPHeaderField: header) + } + } + + return request + } + + private func parseResponse(data: Data, configuration: AIProviderConfiguration) throws -> AIFoodAnalysisResult { + // Parse the JSON response + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + throw AIFoodAnalysisError.invalidResponseFormat + } + + // Extract the content using the configured key path + let content: String + if !configuration.responseKeyPath.isEmpty { + // Use key path to extract content + let keys = configuration.responseKeyPath.components(separatedBy: ".") + var current: Any? = json + + for key in keys { + if let dict = current as? [String: Any] { + current = dict[key] + } else if let array = current as? [Any], let index = Int(key), array.indices.contains(index) { + current = array[index] + } else { + throw AIFoodAnalysisError.invalidResponseFormat + } + } + + guard let resultContent = current as? String else { + throw AIFoodAnalysisError.invalidResponseFormat + } + + content = resultContent + } else { + // Fallback to direct string conversion + guard let resultContent = String(data: data, encoding: .utf8) else { + throw AIFoodAnalysisError.invalidResponseFormat + } + content = resultContent + } + + // Try to parse the content as JSON + guard let contentData = content.data(using: .utf8), + let contentJson = try? JSONSerialization.jsonObject(with: contentData) as? [String: Any] else { + // If not valid JSON, return a basic result with the raw content + return AIFoodAnalysisResult( + imageType: nil, + foodItemsDetailed: [ + FoodItemAnalysis( + name: "Unparsed Content", + portionEstimate: "1 serving", + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: nil, + visualCues: nil, + carbohydrates: 0, + calories: nil, + fat: nil, + fiber: nil, + protein: nil, + assessmentNotes: "The AI response could not be parsed as structured data.", + absorptionTimeHours: nil + ) + ], + overallDescription: "Analysis completed with unparsed content", + confidence: .low, + numericConfidence: nil, + totalFoodPortions: 1, + totalUsdaServings: nil, + totalCarbohydrates: 0, + totalProtein: nil, + totalFat: nil, + totalFiber: nil, + totalCalories: nil, + portionAssessmentMethod: nil, + diabetesConsiderations: nil, + visualAssessmentDetails: nil, + notes: nil, + originalServings: 1.0, + fatProteinUnits: nil, + netCarbsAdjustment: nil, + insulinTimingRecommendations: nil, + fpuDosingGuidance: nil, + exerciseConsiderations: nil, + absorptionTimeHours: nil, + absorptionTimeReasoning: nil, + mealSizeImpact: nil, + individualizationFactors: nil, + safetyAlerts: nil + ) + } + + // Parse the structured response + return try parseStructuredResponse(contentJson) + } + + private func parseStructuredResponse(_ json: [String: Any]) throws -> AIFoodAnalysisResult { + // Extract basic information + let imageTypeString = json["image_type"] as? String + let imageType: ImageAnalysisType? = imageTypeString.flatMap { ImageAnalysisType(rawValue: $0) } + + // Parse food items + var foodItems: [FoodItemAnalysis] = [] + if let foodItemsArray = json["food_items"] as? [[String: Any]] { + for item in foodItemsArray { + let name = item["name"] as? String ?? "Unknown Food" + let portionEstimate = item["portion_estimate"] as? String ?? "1 serving" + + // Create food item using the actual FoodItemAnalysis structure + let foodItem = FoodItemAnalysis( + name: name, + portionEstimate: portionEstimate, + usdaServingSize: item["usda_serving_size"] as? String, + servingMultiplier: item["serving_multiplier"] as? Double ?? 1.0, + preparationMethod: item["preparation_method"] as? String, + visualCues: item["visual_cues"] as? String, + carbohydrates: item["carbohydrates"] as? Double ?? 0, + calories: item["calories"] as? Double, + fat: item["fat"] as? Double, + fiber: item["fiber"] as? Double, + protein: item["protein"] as? Double, + assessmentNotes: item["assessment_notes"] as? String, + absorptionTimeHours: item["absorption_time_hours"] as? Double + ) + + foodItems.append(foodItem) + } + } + + // Calculate totals from food items + let totalCarbs = foodItems.map { $0.carbohydrates }.reduce(0, +) + let totalProtein = foodItems.compactMap { $0.protein }.reduce(0, +) + let totalFat = foodItems.compactMap { $0.fat }.reduce(0, +) + let totalCalories = foodItems.compactMap { $0.calories }.reduce(0, +) + let totalFiber = foodItems.compactMap { $0.fiber }.reduce(0, +) + + // Create and return the result using the actual AIFoodAnalysisResult structure + return AIFoodAnalysisResult( + imageType: imageType, + foodItemsDetailed: foodItems, + overallDescription: json["overall_description"] as? String, + confidence: AIConfidenceLevel(rawValue: (json["confidence_level"] as? String) ?? "") ?? .medium, + numericConfidence: json["confidence"] as? Double, + totalFoodPortions: foodItems.count, + totalUsdaServings: json["total_usda_servings"] as? Double, + totalCarbohydrates: json["total_carbohydrates"] as? Double ?? totalCarbs, + totalProtein: totalProtein > 0 ? totalProtein : (json["total_protein"] as? Double), + totalFat: totalFat > 0 ? totalFat : (json["total_fat"] as? Double), + totalFiber: totalFiber > 0 ? totalFiber : (json["total_fiber"] as? Double), + totalCalories: totalCalories > 0 ? totalCalories : (json["total_calories"] as? Double), + portionAssessmentMethod: json["portion_assessment_method"] as? String, + diabetesConsiderations: json["diabetes_considerations"] as? String, + visualAssessmentDetails: json["visual_assessment_details"] as? String, + notes: json["notes"] as? String, + originalServings: (json["original_servings"] as? Double) ?? 1.0, + fatProteinUnits: json["fat_protein_units"] as? String, + netCarbsAdjustment: json["net_carbs_adjustment"] as? String, + insulinTimingRecommendations: json["insulin_timing_recommendations"] as? String, + fpuDosingGuidance: json["fpu_dosing_guidance"] as? String, + exerciseConsiderations: json["exercise_considerations"] as? String, + absorptionTimeHours: json["absorption_time_hours"] as? Double, + absorptionTimeReasoning: json["absorption_time_reasoning"] as? String, + mealSizeImpact: json["meal_size_impact"] as? String, + individualizationFactors: json["individualization_factors"] as? String, + safetyAlerts: json["safety_alerts"] as? String + ) + } +} + +// MARK: - Image Processing + +extension UIImage { + func byPreparingForAnalysis(targetSize: CGSize) -> UIImage { + // 1. Crop to square aspect ratio + let squareImage = byCroppingToSquare() + + // 2. Resize to target size + let format = UIGraphicsImageRendererFormat() + format.scale = 1.0 + format.opaque = true + + let renderer = UIGraphicsImageRenderer(size: targetSize, format: format) + let resizedImage = renderer.image { _ in + squareImage.draw(in: CGRect(origin: .zero, size: targetSize)) + } + + return resizedImage + } + + private func byCroppingToSquare() -> UIImage { + let originalWidth = size.width + let originalHeight = size.height + + // Check if already square + if originalWidth == originalHeight { + return self + } + + // Calculate square dimensions + let squareSize = min(originalWidth, originalHeight) + let x = (originalWidth - squareSize) / 2 + let y = (originalHeight - squareSize) / 2 + let squareRect = CGRect(x: x, y: y, width: squareSize, height: squareSize) + + // Crop to square + guard let cgImage = cgImage?.cropping(to: squareRect) else { + return self + } + + return UIImage(cgImage: cgImage, scale: scale, orientation: imageOrientation) + } +} diff --git a/Loop/Services/FoodFinder/FoodFinder_AISettingsManager.swift b/Loop/Services/FoodFinder/FoodFinder_AISettingsManager.swift new file mode 100644 index 0000000000..36801a4312 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_AISettingsManager.swift @@ -0,0 +1,72 @@ +// +// AISettingsManager.swift +// Loop +// +// Created by Taylor Patterson on 9/30/25. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import os.log + +class AISettingsManager { + static let shared = AISettingsManager() + private let log = OSLog(category: "AISettingsManager") + + private init() {} + + /// Loads the active AI provider configuration + /// - Returns: The active AI provider configuration, or nil if none is set + func loadActiveConfiguration() async throws -> AIProviderConfiguration? { + return UserDefaults.standard.activeAIProviderConfiguration + } + + /// Saves the active AI provider configuration + /// - Parameter configuration: The configuration to set as active + func saveActiveConfiguration(_ configuration: AIProviderConfiguration) async throws { + var configs = UserDefaults.standard.aiProviderConfigurations + + // Update or add the configuration + if let index = configs.firstIndex(where: { $0.id == configuration.id }) { + configs[index] = configuration + } else { + configs.append(configuration) + } + + // Save the updated configurations + UserDefaults.standard.aiProviderConfigurations = configs + + // Set as active + UserDefaults.standard.activeAIProviderConfigurationId = configuration.id + + log.debug("Saved active AI provider configuration: %{public}@", configuration.name) + } + + /// Deletes an AI provider configuration + /// - Parameter id: The ID of the configuration to delete + func deleteConfiguration(id: String) async throws { + var configs = UserDefaults.standard.aiProviderConfigurations + configs.removeAll { $0.id == id } + UserDefaults.standard.aiProviderConfigurations = configs + + // If the deleted config was active, clear the active config + if UserDefaults.standard.activeAIProviderConfigurationId == id { + UserDefaults.standard.activeAIProviderConfigurationId = nil + } + + log.debug("Deleted AI provider configuration with ID: %{public}@", id) + } + + /// Tests a connection to the AI provider with the given configuration + /// - Parameter configuration: The configuration to test + /// - Returns: True if the connection was successful, false otherwise + func testConnection(to configuration: AIProviderConfiguration) async -> Bool { + do { + return try await AIServiceManager.shared.testConnection(to: configuration) + } catch { + log.error("Failed to test connection to AI provider %{public}@: %{public}@", + configuration.name, error.localizedDescription) + return false + } + } +} diff --git a/Loop/Services/FoodFinder/FoodFinder_BYOTestConfig.swift b/Loop/Services/FoodFinder/FoodFinder_BYOTestConfig.swift new file mode 100644 index 0000000000..b32ee821e3 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_BYOTestConfig.swift @@ -0,0 +1,34 @@ +// +// BYOTestConfig.swift +// Loop +// +// Temporary test override for Bring Your Own (BYO) AI provider +// Populate values and set `enabled = true` in DEBUG builds while developing. +// Do NOT ship real secrets in release builds. +// + +import Foundation + +// Toggle and credentials for BYO testing. Keep disabled by default. +// Enable only in local DEBUG builds when you want to bypass UI/UserDefaults. +enum BYOTestConfig { + #if DEBUG + static let enabled: Bool = false // Disabled now that BYO config is stable + #else + static let enabled: Bool = false // Always false in non-DEBUG builds + #endif + + // Paste your temporary test configuration here when enabled + // Example: "https://api.myproxy.example.com/v1" + static let baseURL: String = "https:/" + + // Example: "sk-..." + static let apiKey: String = "" + + // Optional model/version/org overrides for OpenAI-compatible endpoints + // Leave empty to let the service use its defaults + // Azure: this is the DEPLOYMENT name (not the base model name) + static let model: String? = "gpt-4o-test" + static let apiVersion: String? = "2024-12-01-preview" + static let organizationID: String? = nil +} diff --git a/Loop/Services/FoodFinder/FoodFinder_EmojiProvider.swift b/Loop/Services/FoodFinder/FoodFinder_EmojiProvider.swift new file mode 100644 index 0000000000..ce7bef6fce --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_EmojiProvider.swift @@ -0,0 +1,81 @@ +import UIKit +import LoopKitUI + +/// Provides small UIImage thumbnails for simple whole foods using emoji. +/// Useful when the data provider (e.g., USDA) does not supply product images. +enum EmojiThumbnailProvider { + /// Quick keyword → emoji pairs we maintain locally (supplements the shared data source). + private static let directMatches: [String: String] = { + var map: [String: String] = [ + // allow simple keyword lookups not covered by data source + "apple": "🍎", + "banana": "🍌", + "orange": "🍊", + "grape": "🍇", + "strawberry": "🍓", + "blueberry": "🫐", + "cherry": "🍒", + "pear": "🍐", + "peach": "🍑", + "mango": "🥭", + "pineapple": "🍍", + "watermelon": "🍉", + "melon": "🍈", + "kiwi": "🥝", + "coconut": "🥥", + "lemon": "🍋", + "lime": "🟢", + "avocado": "🥑", + "tomato": "🍅", + "carrot": "🥕", + "broccoli": "🥦", + "lettuce": "🥬", + "spinach": "🥬", + "cucumber": "🥒", + "pepper": "🫑", + "chili": "🌶️", + "corn": "🌽", + "onion": "🧅", + "garlic": "🧄", + "mushroom": "🍄", + "potato": "🥔", + "sweet potato": "🍠", + "rice": "🍚", + "pasta": "🍝", + "bread": "🍞", + "bagel": "🥯", + "oat": "🥣", + "tortilla": "🫓" + ] + return map + }() + + /// Returns the mapped emoji for a simple food name, if recognized. + static func emoji(for name: String) -> String? { + let cleaned = name.lowercased().trimmingCharacters(in: .whitespacesAndNewlines) + guard !cleaned.isEmpty else { return nil } + + if let builtin = directMatches.first(where: { cleaned.contains($0.key) })?.value { + return builtin + } + + return nil + } + + /// Return a rendered emoji thumbnail if the name matches a known simple food. + static func image(for name: String, size: CGFloat = 50) -> UIImage? { + guard let e = emoji(for: name) else { return nil } + let renderer = UIGraphicsImageRenderer(size: CGSize(width: size, height: size)) + return renderer.image { _ in + UIColor.systemGray6.setFill() + UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: size, height: size), cornerRadius: 8).fill() + let attr: [NSAttributedString.Key: Any] = [ + .font: UIFont.systemFont(ofSize: size * 0.56) + ] + let t = (e as NSString) + let textSize = t.size(withAttributes: attr) + let rect = CGRect(x: (size - textSize.width)/2, y: (size - textSize.height)/2, width: textSize.width, height: textSize.height) + t.draw(in: rect, withAttributes: attr) + } + } +} diff --git a/Loop/Services/FoodFinder/FoodFinder_ImageDownloader.swift b/Loop/Services/FoodFinder/FoodFinder_ImageDownloader.swift new file mode 100644 index 0000000000..25980c9bb3 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_ImageDownloader.swift @@ -0,0 +1,38 @@ +import UIKit + +enum ImageDownloader { + static func fetchThumbnail(from url: URL, maxDimension: CGFloat = 300) async -> UIImage? { + var req = URLRequest(url: url) + req.timeoutInterval = 10 + do { + let (data, response) = try await URLSession.shared.data(for: req) + guard let http = response as? HTTPURLResponse, (200...299).contains(http.statusCode) else { return nil } + // Basic size guard (<= 2 MB) + guard data.count <= 2_000_000 else { return nil } + guard let image = UIImage(data: data) else { return nil } + let size = computeTargetSize(for: image.size, maxDimension: maxDimension) + return scale(image: image, to: size) + } catch { + #if DEBUG + print("🌐 Image download failed: \(error)") + #endif + return nil + } + } + + private static func computeTargetSize(for size: CGSize, maxDimension: CGFloat) -> CGSize { + guard max(size.width, size.height) > maxDimension else { return size } + let scale = maxDimension / max(size.width, size.height) + return CGSize(width: size.width * scale, height: size.height * scale) + } + + private static func scale(image: UIImage, to size: CGSize) -> UIImage { + let format = UIGraphicsImageRendererFormat.default() + format.scale = 1 + let renderer = UIGraphicsImageRenderer(size: size, format: format) + return renderer.image { _ in + image.draw(in: CGRect(origin: .zero, size: size)) + } + } +} + diff --git a/Loop/Services/FoodFinder/FoodFinder_ImageStore.swift b/Loop/Services/FoodFinder/FoodFinder_ImageStore.swift new file mode 100644 index 0000000000..39b2b2ccba --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_ImageStore.swift @@ -0,0 +1,69 @@ +import UIKit + +/// Stores small thumbnails for Favorite Foods and returns identifiers for lookup. +/// Images are stored under Application Support/Favorites/Thumbnails as JPEG. +enum FavoriteFoodImageStore { + private static var thumbnailsDir: URL? = { + do { + let base = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) + let dir = base.appendingPathComponent("Favorites/Thumbnails", isDirectory: true) + try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + return dir + } catch { + #if DEBUG + print("📂 FavoriteFoodImageStore init error: \(error)") + #endif + return nil + } + }() + + /// Save a thumbnail (JPEG) and return its identifier (filename) + static func saveThumbnail(from image: UIImage, maxDimension: CGFloat = 300) -> String? { + guard let dir = thumbnailsDir else { return nil } + let size = computeTargetSize(for: image.size, maxDimension: maxDimension) + let thumb = imageByScaling(image: image, to: size) + guard let data = thumb.jpegData(compressionQuality: 0.8) else { return nil } + let id = UUID().uuidString + ".jpg" + let url = dir.appendingPathComponent(id) + do { + try data.write(to: url, options: .atomic) + return id + } catch { + #if DEBUG + print("💾 Failed to save favorite thumbnail: \(error)") + #endif + return nil + } + } + + /// Load thumbnail for identifier + static func loadThumbnail(id: String) -> UIImage? { + guard let dir = thumbnailsDir else { return nil } + let url = dir.appendingPathComponent(id) + guard FileManager.default.fileExists(atPath: url.path) else { return nil } + return UIImage(contentsOfFile: url.path) + } + + /// Delete thumbnail for identifier + static func deleteThumbnail(id: String) { + guard let dir = thumbnailsDir else { return } + let url = dir.appendingPathComponent(id) + try? FileManager.default.removeItem(at: url) + } + + private static func computeTargetSize(for size: CGSize, maxDimension: CGFloat) -> CGSize { + guard max(size.width, size.height) > maxDimension else { return size } + let scale = maxDimension / max(size.width, size.height) + return CGSize(width: size.width * scale, height: size.height * scale) + } + + private static func imageByScaling(image: UIImage, to size: CGSize) -> UIImage { + let format = UIGraphicsImageRendererFormat.default() + format.scale = 1 + let renderer = UIGraphicsImageRenderer(size: size, format: format) + return renderer.image { _ in + image.draw(in: CGRect(origin: .zero, size: size)) + } + } +} + diff --git a/Loop/Services/FoodFinder/FoodFinder_OpenFoodFactsService.swift b/Loop/Services/FoodFinder/FoodFinder_OpenFoodFactsService.swift new file mode 100644 index 0000000000..119364127f --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_OpenFoodFactsService.swift @@ -0,0 +1,332 @@ +// +// OpenFoodFactsService.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for OpenFoodFacts Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import os.log + +/// Service for interacting with the OpenFoodFacts API +/// Provides food search functionality and barcode lookup for carb counting +class OpenFoodFactsService { + + // MARK: - Properties + + private let session: URLSession + // Use the primary .org domain for stable API responses + private let baseURL = "https://world.openfoodfacts.org" + private let userAgent = "Loop-iOS-Diabetes-App/1.0" + private let log = OSLog(category: "OpenFoodFactsService") + + // MARK: - Initialization + + /// Initialize the service + /// - Parameter session: URLSession to use for network requests (defaults to optimized configuration) + init(session: URLSession? = nil) { + if let session = session { + self.session = session + } else { + // Create optimized configuration for food database requests + let config = URLSessionConfiguration.default + config.timeoutIntervalForRequest = 30.0 + config.timeoutIntervalForResource = 60.0 + config.waitsForConnectivity = true + config.networkServiceType = .default + config.allowsCellularAccess = true + config.httpMaximumConnectionsPerHost = 4 + self.session = URLSession(configuration: config) + } + } + + // MARK: - Public API + + /// Search for food products by name + /// - Parameters: + /// - query: The search query string + /// - pageSize: Number of results to return (max 100, default 20) + /// - Returns: Array of OpenFoodFactsProduct objects matching the search + /// - Throws: OpenFoodFactsError for various failure cases + func searchProducts(query: String, pageSize: Int = 20) async throws -> [OpenFoodFactsProduct] { + let trimmedQuery = query.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmedQuery.isEmpty else { + os_log("Empty search query provided", log: log, type: .info) + return [] + } + + guard let encodedQuery = trimmedQuery.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { + os_log("Failed to encode search query: %{public}@", log: log, type: .error, trimmedQuery) + throw OpenFoodFactsError.invalidURL + } + + let clampedPageSize = min(max(pageSize, 1), 100) + let urlString = "\(baseURL)/cgi/search.pl?search_terms=\(encodedQuery)&search_simple=1&action=process&json=1&page_size=\(clampedPageSize)" + + guard let url = URL(string: urlString) else { + os_log("Failed to create URL from string: %{public}@", log: log, type: .error, urlString) + throw OpenFoodFactsError.invalidURL + } + + os_log("Searching OpenFoodFacts for: %{public}@", log: log, type: .info, trimmedQuery) + + let request = createRequest(for: url) + let response = try await performRequest(request) + let searchResponse = try decodeResponse(OpenFoodFactsSearchResponse.self, from: response.data) + + let validProducts = searchResponse.products.filter { product in + product.hasSufficientNutritionalData + } + + os_log("Found %d valid products (of %d total)", log: log, type: .info, validProducts.count, searchResponse.products.count) + + return validProducts + } + + /// Search for a specific product by barcode + /// - Parameter barcode: The product barcode (EAN-13, EAN-8, UPC-A, etc.) + /// - Returns: OpenFoodFactsProduct object for the barcode + /// - Throws: OpenFoodFactsError for various failure cases + func searchProduct(barcode: String) async throws -> OpenFoodFactsProduct { + let cleanBarcode = barcode.trimmingCharacters(in: .whitespacesAndNewlines) + guard !cleanBarcode.isEmpty else { + throw OpenFoodFactsError.invalidBarcode + } + + guard isValidBarcode(cleanBarcode) else { + os_log("Invalid barcode format: %{public}@", log: log, type: .error, cleanBarcode) + throw OpenFoodFactsError.invalidBarcode + } + + let urlString = "\(baseURL)/api/v2/product/\(cleanBarcode).json" + + guard let url = URL(string: urlString) else { + os_log("Failed to create URL for barcode: %{public}@", log: log, type: .error, cleanBarcode) + throw OpenFoodFactsError.invalidURL + } + + os_log("Looking up product by barcode: %{public}@ at URL: %{public}@", log: log, type: .info, cleanBarcode, urlString) + + let request = createRequest(for: url) + os_log("Starting barcode request with timeout: %.1f seconds", log: log, type: .info, request.timeoutInterval) + let response = try await performRequest(request) + let productResponse = try decodeResponse(OpenFoodFactsProductResponse.self, from: response.data) + + guard let product = productResponse.product else { + os_log("Product not found for barcode: %{public}@", log: log, type: .info, cleanBarcode) + throw OpenFoodFactsError.productNotFound + } + + guard product.hasSufficientNutritionalData else { + os_log("Product found but lacks sufficient nutritional data: %{public}@", log: log, type: .info, cleanBarcode) + throw OpenFoodFactsError.productNotFound + } + + os_log("Successfully found product: %{public}@", log: log, type: .info, product.displayName) + + return product + } + + /// Fetch a specific product by barcode (alias for searchProduct) + /// - Parameter barcode: The product barcode to look up + /// - Returns: OpenFoodFactsProduct if found, nil if not found + /// - Throws: OpenFoodFactsError for various failure cases + func fetchProduct(barcode: String) async throws -> OpenFoodFactsProduct? { + do { + let product = try await searchProduct(barcode: barcode) + return product + } catch OpenFoodFactsError.productNotFound { + return nil + } catch { + throw error + } + } + + // MARK: - Private Methods + + private func createRequest(for url: URL) -> URLRequest { + var request = URLRequest(url: url) + request.setValue(userAgent, forHTTPHeaderField: "User-Agent") + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.setValue("en", forHTTPHeaderField: "Accept-Language") + request.timeoutInterval = 30.0 // Increased from 10 to 30 seconds + return request + } + + private func performRequest(_ request: URLRequest, retryCount: Int = 0) async throws -> (data: Data, response: HTTPURLResponse) { + let maxRetries = 2 + + do { + let (data, response) = try await session.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + os_log("Invalid response type received", log: log, type: .error) + throw OpenFoodFactsError.networkError(URLError(.badServerResponse)) + } + + // Validate content type early to avoid decoding HTML error pages as JSON + if let contentType = httpResponse.value(forHTTPHeaderField: "Content-Type")?.lowercased(), + !contentType.contains("json") { + os_log("Unexpected content type: %{public}@", log: log, type: .error, contentType) + throw OpenFoodFactsError.invalidResponse + } + + switch httpResponse.statusCode { + case 200: + return (data, httpResponse) + case 404: + throw OpenFoodFactsError.productNotFound + case 429: + os_log("Rate limit exceeded", log: log, type: .error) + throw OpenFoodFactsError.rateLimitExceeded + case 500...599: + os_log("Server error: %d", log: log, type: .error, httpResponse.statusCode) + + // Retry server errors + if retryCount < maxRetries { + os_log("Retrying request due to server error (attempt %d/%d)", log: log, type: .info, retryCount + 1, maxRetries) + try await Task.sleep(nanoseconds: UInt64((retryCount + 1) * 1_000_000_000)) // 1s, 2s delay + return try await performRequest(request, retryCount: retryCount + 1) + } + + throw OpenFoodFactsError.serverError(httpResponse.statusCode) + default: + os_log("Unexpected HTTP status: %d", log: log, type: .error, httpResponse.statusCode) + throw OpenFoodFactsError.networkError(URLError(.init(rawValue: httpResponse.statusCode))) + } + + } catch let urlError as URLError { + // Retry timeout and connection errors + if (urlError.code == .timedOut || urlError.code == .notConnectedToInternet || urlError.code == .networkConnectionLost) && retryCount < maxRetries { + os_log("Network error (attempt %d/%d): %{public}@, retrying...", log: log, type: .info, retryCount + 1, maxRetries, urlError.localizedDescription) + try await Task.sleep(nanoseconds: UInt64((retryCount + 1) * 2_000_000_000)) // 2s, 4s delay + return try await performRequest(request, retryCount: retryCount + 1) + } + + os_log("Network error: %{public}@", log: log, type: .error, urlError.localizedDescription) + throw OpenFoodFactsError.networkError(urlError) + } catch let openFoodFactsError as OpenFoodFactsError { + throw openFoodFactsError + } catch { + os_log("Unexpected error: %{public}@", log: log, type: .error, error.localizedDescription) + throw OpenFoodFactsError.networkError(error) + } + } + + private func decodeResponse(_ type: T.Type, from data: Data) throws -> T { + do { + let decoder = JSONDecoder() + return try decoder.decode(type, from: data) + } catch let decodingError as DecodingError { + os_log("JSON decoding failed: %{public}@", log: log, type: .error, decodingError.localizedDescription) + throw OpenFoodFactsError.decodingError(decodingError) + } catch { + os_log("Decoding error: %{public}@", log: log, type: .error, error.localizedDescription) + throw OpenFoodFactsError.decodingError(error) + } + } + + private func isValidBarcode(_ barcode: String) -> Bool { + // Basic barcode validation + // Should be numeric and between 8-14 digits (covers EAN-8, EAN-13, UPC-A, etc.) + let numericPattern = "^[0-9]{8,14}$" + let predicate = NSPredicate(format: "SELF MATCHES %@", numericPattern) + return predicate.evaluate(with: barcode) + } +} + +// MARK: - Testing Support + +#if DEBUG +extension OpenFoodFactsService { + /// Create a mock service for testing that returns sample data + static func mock() -> OpenFoodFactsService { + let configuration = URLSessionConfiguration.ephemeral + configuration.protocolClasses = [MockURLProtocol.self] + let session = URLSession(configuration: configuration) + return OpenFoodFactsService(session: session) + } + + /// Configure mock responses for testing + static func configureMockResponses() { + MockURLProtocol.mockResponses = [ + "search": MockURLProtocol.createSearchResponse(), + "product": MockURLProtocol.createProductResponse() + ] + } +} + +/// Mock URL protocol for testing +class MockURLProtocol: URLProtocol { + static var mockResponses: [String: (Data, HTTPURLResponse)] = [:] + + override class func canInit(with request: URLRequest) -> Bool { + return true + } + + override class func canonicalRequest(for request: URLRequest) -> URLRequest { + return request + } + + override func startLoading() { + guard let url = request.url else { return } + + let key = url.path.contains("search") ? "search" : "product" + + if let (data, response) = MockURLProtocol.mockResponses[key] { + client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: .notAllowed) + client?.urlProtocol(self, didLoad: data) + } else { + let response = HTTPURLResponse(url: url, statusCode: 404, httpVersion: nil, headerFields: nil)! + client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: .notAllowed) + } + + client?.urlProtocolDidFinishLoading(self) + } + + override func stopLoading() {} + + static func createSearchResponse() -> (Data, HTTPURLResponse) { + let response = OpenFoodFactsSearchResponse( + products: [ + OpenFoodFactsProduct.sample(name: "Test Bread", carbs: 45.0), + OpenFoodFactsProduct.sample(name: "Test Pasta", carbs: 75.0) + ], + count: 2, + page: 1, + pageCount: 1, + pageSize: 20 + ) + + let data = try! JSONEncoder().encode(response) + let httpResponse = HTTPURLResponse( + url: URL(string: "https://world.openfoodfacts.org/cgi/search.pl")!, + statusCode: 200, + httpVersion: nil, + headerFields: ["Content-Type": "application/json"] + )! + + return (data, httpResponse) + } + + static func createProductResponse() -> (Data, HTTPURLResponse) { + let response = OpenFoodFactsProductResponse( + code: "1234567890123", + product: OpenFoodFactsProduct.sample(name: "Test Product", carbs: 30.0), + status: 1, + statusVerbose: "product found" + ) + + let data = try! JSONEncoder().encode(response) + let httpResponse = HTTPURLResponse( + url: URL(string: "https://world.openfoodfacts.org/api/v0/product/1234567890123.json")!, + statusCode: 200, + httpVersion: nil, + headerFields: ["Content-Type": "application/json"] + )! + + return (data, httpResponse) + } +} +#endif diff --git a/Loop/Services/FoodFinder/FoodFinder_ScannerService.swift b/Loop/Services/FoodFinder/FoodFinder_ScannerService.swift new file mode 100644 index 0000000000..0391ec7ea4 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_ScannerService.swift @@ -0,0 +1,1422 @@ +// +// BarcodeScannerService.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for Barcode Scanning Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import AVFoundation +import Vision +import Combine +import os.log +import UIKit + +/// Service for barcode scanning using the device camera and Vision framework +class BarcodeScannerService: NSObject, ObservableObject { + + // MARK: - Properties + + /// Published scan results + @Published var lastScanResult: BarcodeScanResult? + + /// Published scanning state + @Published var isScanning: Bool = false + + /// Published error state + @Published var scanError: BarcodeScanError? + + /// Camera authorization status + @Published var cameraAuthorizationStatus: AVAuthorizationStatus = .notDetermined + + // MARK: - Scanning State Management + + /// Tracks recently scanned barcodes to prevent duplicates + private var recentlyScannedBarcodes: Set = [] + + /// Timer to clear recently scanned barcodes + private var duplicatePreventionTimer: Timer? + + /// Flag to prevent multiple simultaneous scan processing + private var isProcessingScan: Bool = false + + /// Session health monitoring + private var lastValidFrameTime: Date = Date() + private var sessionHealthTimer: Timer? + + // Camera session components + private let captureSession = AVCaptureSession() + private var videoPreviewLayer: AVCaptureVideoPreviewLayer? + private let videoOutput = AVCaptureVideoDataOutput() + private let sessionQueue = DispatchQueue(label: "barcode.scanner.session", qos: .userInitiated) + + // Vision request for barcode detection + private lazy var barcodeRequest: VNDetectBarcodesRequest = { + let request = VNDetectBarcodesRequest(completionHandler: handleDetectedBarcodes) + request.symbologies = [ + .ean8, .ean13, .upce, .code128, .code39, .code93, + .dataMatrix, .qr, .pdf417, .aztec, .i2of5 + ] + return request + }() + + private let log = OSLog(category: "BarcodeScannerService") + + // MARK: - Public Interface + + /// Shared instance for app-wide use + static let shared = BarcodeScannerService() + + /// Focus the camera at a specific point + func focusAtPoint(_ point: CGPoint) { + sessionQueue.async { [weak self] in + self?.setFocusPoint(point) + } + } + + override init() { + super.init() + checkCameraAuthorization() + setupSessionNotifications() + } + + private func setupSessionNotifications() { + NotificationCenter.default.addObserver( + self, + selector: #selector(sessionWasInterrupted), + name: .AVCaptureSessionWasInterrupted, + object: captureSession + ) + + NotificationCenter.default.addObserver( + self, + selector: #selector(sessionInterruptionEnded), + name: .AVCaptureSessionInterruptionEnded, + object: captureSession + ) + + NotificationCenter.default.addObserver( + self, + selector: #selector(sessionRuntimeError), + name: .AVCaptureSessionRuntimeError, + object: captureSession + ) + } + + @objc private func sessionWasInterrupted(notification: NSNotification) { + print("🎥 ========== Session was interrupted ==========") + + if let userInfo = notification.userInfo, + let reasonValue = userInfo[AVCaptureSessionInterruptionReasonKey] as? Int, + let reason = AVCaptureSession.InterruptionReason(rawValue: reasonValue) { + print("🎥 Interruption reason: \(reason)") + + switch reason { + case .videoDeviceNotAvailableInBackground: + print("🎥 Interruption: App went to background") + case .audioDeviceInUseByAnotherClient: + print("🎥 Interruption: Audio device in use by another client") + case .videoDeviceInUseByAnotherClient: + print("🎥 Interruption: Video device in use by another client") + case .videoDeviceNotAvailableWithMultipleForegroundApps: + print("🎥 Interruption: Video device not available with multiple foreground apps") + case .videoDeviceNotAvailableDueToSystemPressure: + print("🎥 Interruption: Video device not available due to system pressure") + @unknown default: + print("🎥 Interruption: Unknown reason") + } + } + + DispatchQueue.main.async { + self.isScanning = false + // Don't immediately set an error - wait to see if interruption ends + } + } + + @objc private func sessionInterruptionEnded(notification: NSNotification) { + print("🎥 ========== Session interruption ended ==========") + + sessionQueue.async { + print("🎥 Attempting to restart session after interruption...") + + // Wait a bit before restarting + Thread.sleep(forTimeInterval: 0.5) + + if !self.captureSession.isRunning { + print("🎥 Session not running, starting...") + self.captureSession.startRunning() + + // Check if it actually started + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + if self.captureSession.isRunning { + print("🎥 ✅ Session successfully restarted after interruption") + self.isScanning = true + self.scanError = nil + } else { + print("🎥 ❌ Session failed to restart after interruption") + self.scanError = BarcodeScanError.sessionSetupFailed + self.isScanning = false + } + } + } else { + print("🎥 Session already running after interruption ended") + DispatchQueue.main.async { + self.isScanning = true + self.scanError = nil + } + } + } + } + + @objc private func sessionRuntimeError(notification: NSNotification) { + print("🎥 Session runtime error occurred") + if let error = notification.userInfo?[AVCaptureSessionErrorKey] as? AVError { + print("🎥 Runtime error: \(error.localizedDescription)") + + DispatchQueue.main.async { + self.scanError = BarcodeScanError.sessionSetupFailed + self.isScanning = false + } + } + } + + /// Start barcode scanning session + func startScanning() { + print("🎥 ========== BarcodeScannerService.startScanning() CALLED ==========") + print("🎥 Current thread: \(Thread.isMainThread ? "MAIN" : "BACKGROUND")") + print("🎥 Camera authorization status: \(cameraAuthorizationStatus)") + print("🎥 Current session state - isRunning: \(captureSession.isRunning)") + print("🎥 Current session inputs: \(captureSession.inputs.count)") + print("🎥 Current session outputs: \(captureSession.outputs.count)") + + // Check camera authorization fresh from the system + let freshStatus = AVCaptureDevice.authorizationStatus(for: .video) + print("🎥 Fresh authorization status from system: \(freshStatus)") + self.cameraAuthorizationStatus = freshStatus + + // Ensure we have camera permission before proceeding + guard freshStatus == .authorized else { + print("🎥 ERROR: Camera not authorized, status: \(freshStatus)") + DispatchQueue.main.async { + if freshStatus == .notDetermined { + // Try to request permission + print("🎥 Permission not determined, requesting...") + AVCaptureDevice.requestAccess(for: .video) { granted in + DispatchQueue.main.async { + if granted { + print("🎥 Permission granted, retrying scan setup...") + self.startScanning() + } else { + self.scanError = BarcodeScanError.cameraPermissionDenied + self.isScanning = false + } + } + } + } else { + self.scanError = BarcodeScanError.cameraPermissionDenied + self.isScanning = false + } + } + return + } + + // Do session setup on background queue + sessionQueue.async { [weak self] in + guard let self = self else { + print("🎥 ERROR: Self is nil in sessionQueue") + return + } + + print("🎥 Setting up session on background queue...") + + do { + try self.setupCaptureSession() + print("🎥 Session setup completed successfully") + + // Start session on background queue to avoid blocking main thread + print("🎥 Starting capture session...") + self.captureSession.startRunning() + print("🎥 startRunning() called, waiting for session to stabilize...") + + // Wait a moment for the session to start and stabilize + Thread.sleep(forTimeInterval: 0.3) + + // Check if the session is running and not interrupted + let isRunningNow = self.captureSession.isRunning + let isInterrupted = self.captureSession.isInterrupted + print("🎥 Session status after start: running=\(isRunningNow), interrupted=\(isInterrupted)") + + if isRunningNow && !isInterrupted { + // Session started successfully + DispatchQueue.main.async { + self.isScanning = true + self.scanError = nil + print("🎥 ✅ SUCCESS: Session running and not interrupted") + + // Start session health monitoring + self.startSessionHealthMonitoring() + } + + // Monitor for delayed interruption + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { + if !self.captureSession.isRunning || self.captureSession.isInterrupted { + print("🎥 ⚠️ DELAYED INTERRUPTION: Session was interrupted after starting") + // Don't set error immediately - interruption handler will deal with it + } else { + print("🎥 ✅ Session still running after 1 second - stable") + } + } + } else { + // Session failed to start or was immediately interrupted + print("🎥 ❌ Session failed to start properly") + DispatchQueue.main.async { + self.scanError = BarcodeScanError.sessionSetupFailed + self.isScanning = false + } + } + + os_log("Barcode scanning session setup completed", log: self.log, type: .info) + + } catch let error as BarcodeScanError { + print("🎥 ❌ BarcodeScanError caught during setup: \(error)") + print("🎥 Error description: \(error.localizedDescription)") + print("🎥 Recovery suggestion: \(error.recoverySuggestion ?? "none")") + DispatchQueue.main.async { + self.scanError = error + self.isScanning = false + } + } catch { + print("🎥 ❌ Unknown error caught during setup: \(error)") + print("🎥 Error description: \(error.localizedDescription)") + if let nsError = error as NSError? { + print("🎥 Error domain: \(nsError.domain)") + print("🎥 Error code: \(nsError.code)") + print("🎥 Error userInfo: \(nsError.userInfo)") + } + DispatchQueue.main.async { + self.scanError = BarcodeScanError.sessionSetupFailed + self.isScanning = false + } + } + } + } + + /// Stop barcode scanning session + func stopScanning() { + print("🎥 stopScanning() called") + + // Stop health monitoring + stopSessionHealthMonitoring() + + // Clear scanning state + DispatchQueue.main.async { + self.isScanning = false + self.lastScanResult = nil + self.isProcessingScan = false + self.recentlyScannedBarcodes.removeAll() + } + + // Stop timers + duplicatePreventionTimer?.invalidate() + duplicatePreventionTimer = nil + + sessionQueue.async { [weak self] in + guard let self = self else { return } + + print("🎥 Performing complete session cleanup...") + + // Stop the session if running + if self.captureSession.isRunning { + self.captureSession.stopRunning() + print("🎥 Session stopped") + } + + // Wait for session to fully stop + Thread.sleep(forTimeInterval: 0.3) + + // Clear all inputs and outputs to prepare for clean restart + self.captureSession.beginConfiguration() + + // Remove all inputs + for input in self.captureSession.inputs { + print("🎥 Removing input: \(type(of: input))") + self.captureSession.removeInput(input) + } + + // Remove all outputs + for output in self.captureSession.outputs { + print("🎥 Removing output: \(type(of: output))") + self.captureSession.removeOutput(output) + } + + self.captureSession.commitConfiguration() + print("🎥 Session completely cleaned - inputs: \(self.captureSession.inputs.count), outputs: \(self.captureSession.outputs.count)") + + os_log("Barcode scanning session stopped and cleaned", log: self.log, type: .info) + } + } + + deinit { + NotificationCenter.default.removeObserver(self) + stopScanning() + } + + /// Request camera permission + func requestCameraPermission() -> AnyPublisher { + print("🎥 ========== requestCameraPermission() CALLED ==========") + print("🎥 Current authorization status: \(cameraAuthorizationStatus)") + + return Future { [weak self] promise in + print("🎥 Requesting camera access...") + AVCaptureDevice.requestAccess(for: .video) { granted in + print("🎥 Camera access request result: \(granted)") + let newStatus = AVCaptureDevice.authorizationStatus(for: .video) + print("🎥 New authorization status: \(newStatus)") + + DispatchQueue.main.async { + self?.cameraAuthorizationStatus = newStatus + print("🎥 Updated service authorization status to: \(newStatus)") + promise(.success(granted)) + } + } + } + .eraseToAnyPublisher() + } + + /// Clear scan state to prepare for next scan + func clearScanState() { + print("🔍 Clearing scan state for next scan") + DispatchQueue.main.async { + // Don't clear lastScanResult immediately - other observers may need it + self.isProcessingScan = false + } + + // Clear recently scanned after a delay to allow for a fresh scan + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { + self.recentlyScannedBarcodes.removeAll() + print("🔍 Ready for next scan") + } + + // Clear scan result after a longer delay to allow all observers to process + DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { + self.lastScanResult = nil + print("🔍 Cleared lastScanResult after delay") + } + } + + /// Complete reset of the scanner service + func resetService() { + print("🎥 ========== resetService() CALLED ==========") + + // Stop everything first + stopScanning() + + // Wait for cleanup to complete + sessionQueue.async { [weak self] in + guard let self = self else { return } + + // Wait for session to be fully stopped and cleaned + Thread.sleep(forTimeInterval: 0.5) + + DispatchQueue.main.async { + // Reset all state + self.lastScanResult = nil + self.isProcessingScan = false + self.scanError = nil + self.recentlyScannedBarcodes.removeAll() + + // Reset session health monitoring + self.lastValidFrameTime = Date() + + print("🎥 ✅ Scanner service completely reset") + } + } + } + + /// Check if the session has existing configuration + var hasExistingSession: Bool { + return captureSession.inputs.count > 0 || captureSession.outputs.count > 0 + } + + /// Simple test function to verify basic camera access without full session setup + func testCameraAccess() { + print("🎥 ========== testCameraAccess() ==========") + + let status = AVCaptureDevice.authorizationStatus(for: .video) + print("🎥 Current authorization: \(status)") + + #if targetEnvironment(simulator) + print("🎥 Running in simulator - skipping device test") + return + #endif + + guard status == .authorized else { + print("🎥 Camera not authorized - status: \(status)") + return + } + + let devices = AVCaptureDevice.DiscoverySession( + deviceTypes: [.builtInWideAngleCamera, .builtInUltraWideCamera], + mediaType: .video, + position: .unspecified + ).devices + + print("🎥 Available devices: \(devices.count)") + for (index, device) in devices.enumerated() { + print("🎥 Device \(index): \(device.localizedName) (\(device.modelID))") + print("🎥 Position: \(device.position)") + print("🎥 Connected: \(device.isConnected)") + } + + if let defaultDevice = AVCaptureDevice.default(for: .video) { + print("🎥 Default device: \(defaultDevice.localizedName)") + + do { + let input = try AVCaptureDeviceInput(device: defaultDevice) + print("🎥 ✅ Successfully created device input") + + let testSession = AVCaptureSession() + if testSession.canAddInput(input) { + print("🎥 ✅ Session can add input") + } else { + print("🎥 ❌ Session cannot add input") + } + } catch { + print("🎥 ❌ Failed to create device input: \(error)") + } + } else { + print("🎥 ❌ No default video device available") + } + } + + /// Setup camera session without starting scanning (for preview layer) + func setupSession() { + sessionQueue.async { [weak self] in + guard let self = self else { return } + + do { + try self.setupCaptureSession() + + DispatchQueue.main.async { + self.scanError = nil + } + + os_log("Camera session setup completed", log: self.log, type: .info) + + } catch let error as BarcodeScanError { + DispatchQueue.main.async { + self.scanError = error + } + } catch { + DispatchQueue.main.async { + self.scanError = BarcodeScanError.sessionSetupFailed + } + } + } + } + + /// Reset and reinitialize the camera session + func resetSession() { + print("🎥 ========== resetSession() CALLED ==========") + + sessionQueue.async { [weak self] in + guard let self = self else { + print("🎥 ERROR: Self is nil in resetSession") + return + } + + print("🎥 Performing complete session reset...") + + // Stop current session + if self.captureSession.isRunning { + print("🎥 Stopping running session...") + self.captureSession.stopRunning() + Thread.sleep(forTimeInterval: 0.5) // Longer wait + } + + // Clear all inputs and outputs + print("🎥 Clearing session configuration...") + self.captureSession.beginConfiguration() + self.captureSession.inputs.forEach { + print("🎥 Removing input: \(type(of: $0))") + self.captureSession.removeInput($0) + } + self.captureSession.outputs.forEach { + print("🎥 Removing output: \(type(of: $0))") + self.captureSession.removeOutput($0) + } + self.captureSession.commitConfiguration() + print("🎥 Session cleared and committed") + + // Wait longer before attempting to rebuild + Thread.sleep(forTimeInterval: 0.5) + + print("🎥 Attempting to rebuild session...") + do { + try self.setupCaptureSession() + DispatchQueue.main.async { + self.scanError = nil + print("🎥 ✅ Session reset successful") + } + } catch { + print("🎥 ❌ Session reset failed: \(error)") + DispatchQueue.main.async { + self.scanError = BarcodeScanError.sessionSetupFailed + } + } + } + } + + /// Alternative simple session setup method + func simpleSetupSession() throws { + print("🎥 ========== simpleSetupSession() STARTING ==========") + + #if targetEnvironment(simulator) + throw BarcodeScanError.cameraNotAvailable + #endif + + guard cameraAuthorizationStatus == .authorized else { + throw BarcodeScanError.cameraPermissionDenied + } + + guard let device = AVCaptureDevice.default(for: .video) else { + throw BarcodeScanError.cameraNotAvailable + } + + print("🎥 Using device: \(device.localizedName)") + + // Create a completely new session + let newSession = AVCaptureSession() + newSession.sessionPreset = .high + + // Create input + let input = try AVCaptureDeviceInput(device: device) + guard newSession.canAddInput(input) else { + throw BarcodeScanError.sessionSetupFailed + } + + // Create output + let output = AVCaptureVideoDataOutput() + output.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_420YpCbCr8BiPlanarFullRange] + guard newSession.canAddOutput(output) else { + throw BarcodeScanError.sessionSetupFailed + } + + // Configure session + newSession.beginConfiguration() + newSession.addInput(input) + newSession.addOutput(output) + output.setSampleBufferDelegate(self, queue: sessionQueue) + newSession.commitConfiguration() + + // Replace the old session + if captureSession.isRunning { + captureSession.stopRunning() + } + + // This is not ideal but might be necessary + // We'll need to use reflection or recreate the session property + print("🎥 Simple session setup completed") + } + + /// Get video preview layer for UI integration + func getPreviewLayer() -> AVCaptureVideoPreviewLayer? { + // Always create a new preview layer to avoid conflicts + // Each view should have its own preview layer instance + let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) + previewLayer.videoGravity = .resizeAspectFill + print("🎥 Created preview layer for session: \(captureSession)") + print("🎥 Session running: \(captureSession.isRunning), inputs: \(captureSession.inputs.count), outputs: \(captureSession.outputs.count)") + return previewLayer + } + + // MARK: - Private Methods + + private func checkCameraAuthorization() { + cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video) + print("🎥 Camera authorization status: \(cameraAuthorizationStatus)") + + #if targetEnvironment(simulator) + print("🎥 WARNING: Running in iOS Simulator - camera functionality will be limited") + #endif + + switch cameraAuthorizationStatus { + case .notDetermined: + print("🎥 Camera permission not yet requested") + case .denied: + print("🎥 Camera permission denied by user") + case .restricted: + print("🎥 Camera access restricted by system") + case .authorized: + print("🎥 Camera permission granted") + @unknown default: + print("🎥 Unknown camera authorization status") + } + } + + private func setupCaptureSession() throws { + print("🎥 ========== setupCaptureSession() STARTING ==========") + print("🎥 Current thread: \(Thread.isMainThread ? "MAIN" : "BACKGROUND")") + print("🎥 Camera authorization status: \(cameraAuthorizationStatus)") + + // Check if running in simulator + #if targetEnvironment(simulator) + print("🎥 WARNING: Running in iOS Simulator - camera not available") + throw BarcodeScanError.cameraNotAvailable + #endif + + guard cameraAuthorizationStatus == .authorized else { + print("🎥 ERROR: Camera permission denied - status: \(cameraAuthorizationStatus)") + throw BarcodeScanError.cameraPermissionDenied + } + + print("🎥 Finding best available camera device...") + + // Try to get the best available camera (like AI camera does) + let discoverySession = AVCaptureDevice.DiscoverySession( + deviceTypes: [ + .builtInTripleCamera, // iPhone Pro models + .builtInDualWideCamera, // iPhone models with dual camera + .builtInWideAngleCamera, // Standard camera + .builtInUltraWideCamera // Ultra-wide as fallback + ], + mediaType: .video, + position: .back // Prefer back camera for scanning + ) + + guard let videoCaptureDevice = discoverySession.devices.first else { + print("🎥 ERROR: No video capture device available") + print("🎥 DEBUG: Available devices: \(discoverySession.devices.map { $0.modelID })") + throw BarcodeScanError.cameraNotAvailable + } + + print("🎥 ✅ Got video capture device: \(videoCaptureDevice.localizedName)") + print("🎥 Device model: \(videoCaptureDevice.modelID)") + print("🎥 Device position: \(videoCaptureDevice.position)") + print("🎥 Device available: \(videoCaptureDevice.isConnected)") + + // Enhanced camera configuration for optimal scanning (like AI camera) + do { + try videoCaptureDevice.lockForConfiguration() + + // Enhanced autofocus configuration + if videoCaptureDevice.isFocusModeSupported(.continuousAutoFocus) { + videoCaptureDevice.focusMode = .continuousAutoFocus + print("🎥 ✅ Enabled continuous autofocus") + } else if videoCaptureDevice.isFocusModeSupported(.autoFocus) { + videoCaptureDevice.focusMode = .autoFocus + print("🎥 ✅ Enabled autofocus") + } + + // Set focus point to center for optimal scanning + if videoCaptureDevice.isFocusPointOfInterestSupported { + videoCaptureDevice.focusPointOfInterest = CGPoint(x: 0.5, y: 0.5) + print("🎥 ✅ Set autofocus point to center") + } + + // Enhanced exposure settings for better barcode/QR code detection + if videoCaptureDevice.isExposureModeSupported(.continuousAutoExposure) { + videoCaptureDevice.exposureMode = .continuousAutoExposure + print("🎥 ✅ Enabled continuous auto exposure") + } else if videoCaptureDevice.isExposureModeSupported(.autoExpose) { + videoCaptureDevice.exposureMode = .autoExpose + print("🎥 ✅ Enabled auto exposure") + } + + // Set exposure point to center + if videoCaptureDevice.isExposurePointOfInterestSupported { + videoCaptureDevice.exposurePointOfInterest = CGPoint(x: 0.5, y: 0.5) + print("🎥 ✅ Set auto exposure point to center") + } + + // Configure for optimal performance + if videoCaptureDevice.isWhiteBalanceModeSupported(.continuousAutoWhiteBalance) { + videoCaptureDevice.whiteBalanceMode = .continuousAutoWhiteBalance + print("🎥 ✅ Enabled continuous auto white balance") + } + + // Set flash to auto for low light conditions + if videoCaptureDevice.hasFlash { + videoCaptureDevice.flashMode = .auto + print("🎥 ✅ Set flash mode to auto") + } + + videoCaptureDevice.unlockForConfiguration() + print("🎥 ✅ Enhanced camera configuration complete") + } catch { + print("🎥 ❌ Failed to configure camera: \(error)") + } + + // Stop session if running to avoid conflicts + if captureSession.isRunning { + print("🎥 Stopping existing session before reconfiguration") + captureSession.stopRunning() + + // Wait longer for the session to fully stop + Thread.sleep(forTimeInterval: 0.3) + print("🎥 Session stopped, waiting completed") + } + + // Clear existing inputs and outputs + print("🎥 Session state before cleanup:") + print("🎥 - Inputs: \(captureSession.inputs.count)") + print("🎥 - Outputs: \(captureSession.outputs.count)") + print("🎥 - Running: \(captureSession.isRunning)") + print("🎥 - Interrupted: \(captureSession.isInterrupted)") + + captureSession.beginConfiguration() + print("🎥 Session configuration began") + + // Remove existing connections + captureSession.inputs.forEach { + print("🎥 Removing input: \(type(of: $0))") + captureSession.removeInput($0) + } + captureSession.outputs.forEach { + print("🎥 Removing output: \(type(of: $0))") + captureSession.removeOutput($0) + } + + do { + print("🎥 Creating video input from device...") + let videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice) + print("🎥 ✅ Created video input successfully") + + // Set appropriate session preset for barcode scanning BEFORE adding inputs + print("🎥 Setting session preset...") + if captureSession.canSetSessionPreset(.high) { + captureSession.sessionPreset = .high + print("🎥 ✅ Set session preset to HIGH quality") + } else if captureSession.canSetSessionPreset(.medium) { + captureSession.sessionPreset = .medium + print("🎥 ✅ Set session preset to MEDIUM quality") + } else { + print("🎥 ⚠️ Could not set preset to high or medium, using: \(captureSession.sessionPreset)") + } + + print("🎥 Checking if session can add video input...") + if captureSession.canAddInput(videoInput) { + captureSession.addInput(videoInput) + print("🎥 ✅ Added video input to session successfully") + } else { + print("🎥 ❌ ERROR: Cannot add video input to session") + print("🎥 Session preset: \(captureSession.sessionPreset)") + print("🎥 Session interrupted: \(captureSession.isInterrupted)") + captureSession.commitConfiguration() + throw BarcodeScanError.sessionSetupFailed + } + + print("🎥 Setting up video output...") + videoOutput.videoSettings = [ + kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_420YpCbCr8BiPlanarFullRange + ] + + print("🎥 Checking if session can add video output...") + if captureSession.canAddOutput(videoOutput) { + captureSession.addOutput(videoOutput) + + // Set sample buffer delegate on the session queue + videoOutput.setSampleBufferDelegate(self, queue: sessionQueue) + print("🎥 ✅ Added video output to session successfully") + print("🎥 Video output settings: \(videoOutput.videoSettings ?? [:])") + } else { + print("🎥 ❌ ERROR: Cannot add video output to session") + captureSession.commitConfiguration() + throw BarcodeScanError.sessionSetupFailed + } + + print("🎥 Committing session configuration...") + captureSession.commitConfiguration() + print("🎥 ✅ Session configuration committed successfully") + + print("🎥 ========== FINAL SESSION STATE ==========") + print("🎥 Inputs: \(captureSession.inputs.count)") + print("🎥 Outputs: \(captureSession.outputs.count)") + print("🎥 Preset: \(captureSession.sessionPreset)") + print("🎥 Running: \(captureSession.isRunning)") + print("🎥 Interrupted: \(captureSession.isInterrupted)") + print("🎥 ========== SESSION SETUP COMPLETE ==========") + + } catch let error as BarcodeScanError { + print("🎥 ❌ BarcodeScanError during setup: \(error)") + captureSession.commitConfiguration() + throw error + } catch { + print("🎥 ❌ Failed to setup capture session with error: \(error)") + print("🎥 Error type: \(type(of: error))") + print("🎥 Error details: \(error.localizedDescription)") + + if let nsError = error as NSError? { + print("🎥 NSError domain: \(nsError.domain)") + print("🎥 NSError code: \(nsError.code)") + print("🎥 NSError userInfo: \(nsError.userInfo)") + } + + // Check for specific AVFoundation errors + if let avError = error as? AVError { + print("🎥 AVError code: \(avError.code.rawValue)") + print("🎥 AVError description: \(avError.localizedDescription)") + + switch avError.code { + case .deviceNotConnected: + print("🎥 SPECIFIC ERROR: Camera device not connected") + captureSession.commitConfiguration() + throw BarcodeScanError.cameraNotAvailable + case .deviceInUseByAnotherApplication: + print("🎥 SPECIFIC ERROR: Camera device in use by another application") + captureSession.commitConfiguration() + throw BarcodeScanError.sessionSetupFailed + case .deviceWasDisconnected: + print("🎥 SPECIFIC ERROR: Camera device was disconnected") + captureSession.commitConfiguration() + throw BarcodeScanError.cameraNotAvailable + case .mediaServicesWereReset: + print("🎥 SPECIFIC ERROR: Media services were reset") + captureSession.commitConfiguration() + throw BarcodeScanError.sessionSetupFailed + default: + print("🎥 OTHER AVERROR: \(avError.localizedDescription)") + } + } + + captureSession.commitConfiguration() + os_log("Failed to setup capture session: %{public}@", log: log, type: .error, error.localizedDescription) + throw BarcodeScanError.sessionSetupFailed + } + } + + private func handleDetectedBarcodes(request: VNRequest, error: Error?) { + // Update health monitoring + lastValidFrameTime = Date() + + guard let observations = request.results as? [VNBarcodeObservation] else { + if let error = error { + os_log("Barcode detection failed: %{public}@", log: log, type: .error, error.localizedDescription) + } + return + } + + // Prevent concurrent processing + guard !isProcessingScan else { + print("🔍 Skipping barcode processing - already processing another scan") + return + } + + // Find the best barcode detection with improved filtering + let validBarcodes = observations.compactMap { observation -> BarcodeScanResult? in + guard let barcodeString = observation.payloadStringValue, + !barcodeString.isEmpty, + observation.confidence > 0.5 else { // Lower confidence for QR codes + print("🔍 Filtered out barcode: '\(observation.payloadStringValue ?? "nil")' confidence: \(observation.confidence)") + return nil + } + + // Handle QR codes differently from traditional barcodes + if observation.symbology == .qr { + print("🔍 QR Code detected - Raw data: '\(barcodeString.prefix(100))...'") + + // For QR codes, try to extract product identifier + let processedBarcodeString = extractProductIdentifier(from: barcodeString) ?? barcodeString + print("🔍 QR Code processed ID: '\(processedBarcodeString)'") + + return BarcodeScanResult( + barcodeString: processedBarcodeString, + barcodeType: observation.symbology, + confidence: observation.confidence, + bounds: observation.boundingBox + ) + } else { + // Traditional barcode validation + guard barcodeString.count >= 8, + isValidBarcodeFormat(barcodeString) else { + print("🔍 Invalid traditional barcode format: '\(barcodeString)'") + return nil + } + + return BarcodeScanResult( + barcodeString: barcodeString, + barcodeType: observation.symbology, + confidence: observation.confidence, + bounds: observation.boundingBox + ) + } + } + + // Prioritize traditional barcodes over QR codes when both are present + let bestBarcode = selectBestBarcode(from: validBarcodes) + guard let selectedBarcode = bestBarcode else { + return + } + + // Enhanced validation - only proceed with high-confidence detections + let minimumConfidence: Float = selectedBarcode.barcodeType == .qr ? 0.6 : 0.8 + guard selectedBarcode.confidence >= minimumConfidence else { + print("🔍 Barcode confidence too low: \(selectedBarcode.confidence) < \(minimumConfidence)") + return + } + + // Ensure barcode string is valid and not empty + guard !selectedBarcode.barcodeString.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { + print("🔍 Empty or whitespace-only barcode string detected") + return + } + + // Check for duplicates + guard !recentlyScannedBarcodes.contains(selectedBarcode.barcodeString) else { + print("🔍 Skipping duplicate barcode: \(selectedBarcode.barcodeString)") + return + } + + // Mark as processing to prevent duplicates + isProcessingScan = true + + print("🔍 ✅ Valid barcode detected: \(selectedBarcode.barcodeString) (confidence: \(selectedBarcode.confidence), minimum: \(minimumConfidence))") + + // Add to recent scans to prevent duplicates + recentlyScannedBarcodes.insert(selectedBarcode.barcodeString) + + // Publish result on main queue + DispatchQueue.main.async { [weak self] in + self?.lastScanResult = selectedBarcode + + // Reset processing flag after a brief delay + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + self?.isProcessingScan = false + } + + // Clear recently scanned after a longer delay to allow for duplicate detection + self?.duplicatePreventionTimer?.invalidate() + self?.duplicatePreventionTimer = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false) { _ in + self?.recentlyScannedBarcodes.removeAll() + print("🔍 Cleared recently scanned barcodes cache") + } + + os_log("Barcode detected: %{public}@ (confidence: %.2f)", + log: self?.log ?? OSLog.disabled, + type: .info, + selectedBarcode.barcodeString, + selectedBarcode.confidence) + } + } + + /// Validates barcode format to filter out false positives + private func isValidBarcodeFormat(_ barcode: String) -> Bool { + // Check for common barcode patterns + let numericPattern = "^[0-9]+$" + let alphanumericPattern = "^[A-Z0-9]+$" + + // EAN-13, UPC-A: 12-13 digits + if barcode.count == 12 || barcode.count == 13 { + return barcode.range(of: numericPattern, options: .regularExpression) != nil + } + + // EAN-8, UPC-E: 8 digits + if barcode.count == 8 { + return barcode.range(of: numericPattern, options: .regularExpression) != nil + } + + // Code 128, Code 39: Variable length alphanumeric + if barcode.count >= 8 && barcode.count <= 40 { + return barcode.range(of: alphanumericPattern, options: .regularExpression) != nil + } + + // QR codes: Handle various data formats + if barcode.count >= 10 { + return isValidQRCodeData(barcode) + } + + return false + } + + /// Validates QR code data and extracts product identifiers if present + private func isValidQRCodeData(_ qrData: String) -> Bool { + // URL format QR codes (common for food products) + if qrData.hasPrefix("http://") || qrData.hasPrefix("https://") { + return URL(string: qrData) != nil + } + + // JSON format QR codes + if qrData.hasPrefix("{") && qrData.hasSuffix("}") { + // Try to parse as JSON to validate structure + if let data = qrData.data(using: .utf8), + let _ = try? JSONSerialization.jsonObject(with: data) { + return true + } + } + + // Product identifier formats (various standards) + // GTIN format: (01)12345678901234 + if qrData.contains("(01)") { + return true + } + + // UPC/EAN codes within QR data + let numericOnlyPattern = "^[0-9]+$" + if qrData.range(of: numericOnlyPattern, options: .regularExpression) != nil { + return qrData.count >= 8 && qrData.count <= 14 + } + + // Allow other structured data formats + if qrData.count <= 500 { // Reasonable size limit for food product QR codes + return true + } + + return false + } + + /// Select the best barcode from detected options, prioritizing traditional barcodes over QR codes + private func selectBestBarcode(from barcodes: [BarcodeScanResult]) -> BarcodeScanResult? { + guard !barcodes.isEmpty else { return nil } + + // Separate traditional barcodes from QR codes + let traditionalBarcodes = barcodes.filter { result in + result.barcodeType != .qr && result.barcodeType != .dataMatrix + } + let qrCodes = barcodes.filter { result in + result.barcodeType == .qr || result.barcodeType == .dataMatrix + } + + // If we have traditional barcodes, pick the one with highest confidence + if !traditionalBarcodes.isEmpty { + let bestTraditional = traditionalBarcodes.max { $0.confidence < $1.confidence }! + print("🔍 Prioritizing traditional barcode: \(bestTraditional.barcodeString) (confidence: \(bestTraditional.confidence))") + return bestTraditional + } + + // Only use QR codes if no traditional barcodes are present + if !qrCodes.isEmpty { + let bestQR = qrCodes.max { $0.confidence < $1.confidence }! + print("🔍 Using QR code (no traditional barcode found): \(bestQR.barcodeString) (confidence: \(bestQR.confidence))") + + // Check if QR code is actually food-related + if isNonFoodQRCode(bestQR.barcodeString) { + print("🔍 Rejecting non-food QR code") + // We could show a specific error here, but for now we'll just return nil + DispatchQueue.main.async { + self.scanError = BarcodeScanError.scanningFailed("This QR code is not a food product code and cannot be scanned") + } + return nil + } + + return bestQR + } + + return nil + } + + /// Check if a QR code is a non-food QR code (e.g., pointing to a website) + private func isNonFoodQRCode(_ qrData: String) -> Bool { + // Check if it's just a URL without any product identifier + if qrData.hasPrefix("http://") || qrData.hasPrefix("https://") { + // If we can't extract a product identifier from the URL, it's likely non-food + return extractProductIdentifier(from: qrData) == nil + } + + // Check for common non-food QR code patterns + let nonFoodPatterns = [ + "mailto:", + "tel:", + "sms:", + "wifi:", + "geo:", + "contact:", + "vcard:", + "youtube.com", + "instagram.com", + "facebook.com", + "twitter.com", + "linkedin.com" + ] + + let lowerQRData = qrData.lowercased() + for pattern in nonFoodPatterns { + if lowerQRData.contains(pattern) { + return true + } + } + + return false + } + + /// Extracts a usable product identifier from QR code data + private func extractProductIdentifier(from qrData: String) -> String? { + print("🔍 Extracting product ID from QR data: '\(qrData.prefix(200))'") + + // If it's already a simple barcode, return as-is + let numericPattern = "^[0-9]+$" + if qrData.range(of: numericPattern, options: .regularExpression) != nil, + qrData.count >= 8 && qrData.count <= 14 { + print("🔍 Found direct numeric barcode: '\(qrData)'") + return qrData + } + + // Extract from GTIN format: (01)12345678901234 + if qrData.contains("(01)") { + let gtinPattern = "\\(01\\)([0-9]{12,14})" + if let regex = try? NSRegularExpression(pattern: gtinPattern), + let match = regex.firstMatch(in: qrData, range: NSRange(qrData.startIndex..., in: qrData)), + let gtinRange = Range(match.range(at: 1), in: qrData) { + let gtin = String(qrData[gtinRange]) + print("🔍 Extracted GTIN: '\(gtin)'") + return gtin + } + } + + // Extract from URL path (e.g., https://example.com/product/1234567890123) + if let url = URL(string: qrData) { + print("🔍 Processing URL: '\(url.absoluteString)'") + let pathComponents = url.pathComponents + for component in pathComponents.reversed() { + if component.range(of: numericPattern, options: .regularExpression) != nil, + component.count >= 8 && component.count <= 14 { + print("🔍 Extracted from URL path: '\(component)'") + return component + } + } + + // Check URL query parameters for product IDs + if let components = URLComponents(url: url, resolvingAgainstBaseURL: false), + let queryItems = components.queryItems { + let productIdKeys = ["id", "product_id", "gtin", "upc", "ean", "barcode"] + for queryItem in queryItems { + if productIdKeys.contains(queryItem.name.lowercased()), + let value = queryItem.value, + value.range(of: numericPattern, options: .regularExpression) != nil, + value.count >= 8 && value.count <= 14 { + print("🔍 Extracted from URL query: '\(value)'") + return value + } + } + } + } + + // Extract from JSON (look for common product ID fields) + if qrData.hasPrefix("{") && qrData.hasSuffix("}"), + let data = qrData.data(using: .utf8), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] { + + print("🔍 Processing JSON QR code") + // Common field names for product identifiers + let idFields = ["gtin", "upc", "ean", "barcode", "product_id", "id", "code", "productId"] + for field in idFields { + if let value = json[field] as? String, + value.range(of: numericPattern, options: .regularExpression) != nil, + value.count >= 8 && value.count <= 14 { + print("🔍 Extracted from JSON field '\(field)': '\(value)'") + return value + } + // Also check for numeric values + if let numValue = json[field] as? NSNumber { + let stringValue = numValue.stringValue + if stringValue.count >= 8 && stringValue.count <= 14 { + print("🔍 Extracted from JSON numeric field '\(field)': '\(stringValue)'") + return stringValue + } + } + } + } + + // Look for embedded barcodes in any text (more flexible extraction) + let embeddedBarcodePattern = "([0-9]{8,14})" + if let regex = try? NSRegularExpression(pattern: embeddedBarcodePattern), + let match = regex.firstMatch(in: qrData, range: NSRange(qrData.startIndex..., in: qrData)), + let barcodeRange = Range(match.range(at: 1), in: qrData) { + let extractedBarcode = String(qrData[barcodeRange]) + print("🔍 Found embedded barcode: '\(extractedBarcode)'") + return extractedBarcode + } + + // If QR code is short enough, try using it directly as a product identifier + if qrData.count <= 50 && !qrData.contains(" ") && !qrData.contains("http") { + print("🔍 Using short QR data directly: '\(qrData)'") + return qrData + } + + print("🔍 No product identifier found, returning nil") + return nil + } + + // MARK: - Session Health Monitoring + + /// Set focus point for the camera + private func setFocusPoint(_ point: CGPoint) { + guard let device = captureSession.inputs.first as? AVCaptureDeviceInput else { + print("🔍 No camera device available for focus") + return + } + + let cameraDevice = device.device + + do { + try cameraDevice.lockForConfiguration() + + // Set focus point if supported + if cameraDevice.isFocusPointOfInterestSupported { + cameraDevice.focusPointOfInterest = point + print("🔍 Set focus point to: \(point)") + } + + // Set autofocus mode + if cameraDevice.isFocusModeSupported(.autoFocus) { + cameraDevice.focusMode = .autoFocus + print("🔍 Triggered autofocus at point: \(point)") + } + + // Set exposure point if supported + if cameraDevice.isExposurePointOfInterestSupported { + cameraDevice.exposurePointOfInterest = point + print("🔍 Set exposure point to: \(point)") + } + + // Set exposure mode + if cameraDevice.isExposureModeSupported(.autoExpose) { + cameraDevice.exposureMode = .autoExpose + print("🔍 Set auto exposure at point: \(point)") + } + + cameraDevice.unlockForConfiguration() + + } catch { + print("🔍 Error setting focus point: \(error)") + } + } + + /// Start monitoring session health + private func startSessionHealthMonitoring() { + print("🎥 Starting session health monitoring") + lastValidFrameTime = Date() + + sessionHealthTimer?.invalidate() + sessionHealthTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { [weak self] _ in + self?.checkSessionHealth() + } + } + + /// Stop session health monitoring + private func stopSessionHealthMonitoring() { + print("🎥 Stopping session health monitoring") + sessionHealthTimer?.invalidate() + sessionHealthTimer = nil + } + + /// Check if the session is healthy + private func checkSessionHealth() { + let timeSinceLastFrame = Date().timeIntervalSince(lastValidFrameTime) + + print("🎥 Health check - seconds since last frame: \(timeSinceLastFrame)") + + // If no frames for more than 10 seconds, session may be stalled + if timeSinceLastFrame > 10.0 && captureSession.isRunning && isScanning { + print("🎥 ⚠️ Session appears stalled - no frames for \(timeSinceLastFrame) seconds") + + // Attempt to restart the session + sessionQueue.async { [weak self] in + guard let self = self else { return } + + print("🎥 Attempting session restart due to stall...") + + // Stop and restart + self.captureSession.stopRunning() + Thread.sleep(forTimeInterval: 0.5) + + if !self.captureSession.isInterrupted { + self.captureSession.startRunning() + self.lastValidFrameTime = Date() + print("🎥 Session restarted after stall") + } else { + print("🎥 Cannot restart - session is interrupted") + } + } + } + + // Check session state + if !captureSession.isRunning && isScanning { + print("🎥 ⚠️ Session stopped but still marked as scanning") + DispatchQueue.main.async { + self.isScanning = false + self.scanError = BarcodeScanError.sessionSetupFailed + } + } + } +} + +// MARK: - AVCaptureVideoDataOutputSampleBufferDelegate + +extension BarcodeScannerService: AVCaptureVideoDataOutputSampleBufferDelegate { + func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { + // Skip processing if already processing a scan or not actively scanning + guard isScanning && !isProcessingScan else { return } + + guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { + print("🔍 Failed to get pixel buffer from sample") + return + } + + // Throttle processing to improve performance - process every 3rd frame + guard arc4random_uniform(3) == 0 else { return } + + // Update frame time for health monitoring + lastValidFrameTime = Date() + + // Determine image orientation based on device orientation + let deviceOrientation = UIDevice.current.orientation + let imageOrientation: CGImagePropertyOrientation + + switch deviceOrientation { + case .portrait: + imageOrientation = .right + case .portraitUpsideDown: + imageOrientation = .left + case .landscapeLeft: + imageOrientation = .up + case .landscapeRight: + imageOrientation = .down + default: + imageOrientation = .right + } + + let imageRequestHandler = VNImageRequestHandler( + cvPixelBuffer: pixelBuffer, + orientation: imageOrientation, + options: [:] + ) + + do { + try imageRequestHandler.perform([barcodeRequest]) + } catch { + os_log("Vision request failed: %{public}@", log: log, type: .error, error.localizedDescription) + print("🔍 Vision request error: \(error.localizedDescription)") + } + } +} + +// MARK: - Testing Support + +#if DEBUG +extension BarcodeScannerService { + /// Create a mock scanner for testing + static func mock() -> BarcodeScannerService { + let scanner = BarcodeScannerService() + scanner.cameraAuthorizationStatus = .authorized + return scanner + } + + /// Simulate a successful barcode scan for testing + func simulateScan(barcode: String) { + let result = BarcodeScanResult.sample(barcode: barcode) + DispatchQueue.main.async { + self.lastScanResult = result + self.isScanning = false + } + } + + /// Simulate a scan error for testing + func simulateError(_ error: BarcodeScanError) { + DispatchQueue.main.async { + self.scanError = error + self.isScanning = false + } + } +} +#endif diff --git a/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift b/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift new file mode 100644 index 0000000000..25586dc7de --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift @@ -0,0 +1,219 @@ +// +// FoodSearchRouter.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import UIKit +import Foundation +import os.log + +/// Service that routes different types of food searches to the appropriate configured provider +class FoodSearchRouter { + + // MARK: - Singleton + + static let shared = FoodSearchRouter() + + private init() {} + + // MARK: - Properties + + private let log = OSLog(category: "FoodSearchRouter") + private let aiService = ConfigurableAIService.shared + private let openFoodFactsService = OpenFoodFactsService() // Uses optimized configuration by default + + // MARK: - Text/Voice Search Routing + + /// Perform text-based food search using the configured provider + func searchFoodsByText(_ query: String) async throws -> [OpenFoodFactsProduct] { + let provider = aiService.getProviderForSearchType(.textSearch) + + log.info("🔍 Routing text search '%{public}@' to provider: %{public}@", query, provider.rawValue) + + switch provider { + case .openFoodFacts: + return try await openFoodFactsService.searchProducts(query: query, pageSize: 15) + + case .usdaFoodData: + do { + return try await USDAFoodDataService.shared.searchProducts(query: query, pageSize: 15) + } catch { + log.error("❌ USDA search failed: %{public}@ — falling back to OpenFoodFacts", error.localizedDescription) + return try await openFoodFactsService.searchProducts(query: query, pageSize: 15) + } + + case .claude, .googleGemini, .openAI: + // Unify prompts: AI prompts live in AIFoodAnalysis.swift and are for image analysis only. + // For text search, stick to structured databases for reliability. + log.info("ℹ️ AI providers are not used for text search; using USDA with OFF fallback") + do { + return try await USDAFoodDataService.shared.searchProducts(query: query, pageSize: 15) + } catch { + return try await openFoodFactsService.searchProducts(query: query, pageSize: 15) + } + case .bringYourOwn: + // BYO is not supported for text search; fall back to OpenFoodFacts + log.info("⚠️ Bring Your Own is not available for text search; using OpenFoodFacts") + return try await openFoodFactsService.searchProducts(query: query, pageSize: 15) + } + } + + // MARK: - Barcode Search Routing + + /// Perform barcode-based food search using the configured provider + func searchFoodsByBarcode(_ barcode: String) async throws -> OpenFoodFactsProduct? { + let provider = aiService.getProviderForSearchType(.barcodeSearch) + + log.info("📱 Routing barcode search '%{public}@' to provider: %{public}@", barcode, provider.rawValue) + + switch provider { + case .openFoodFacts: + return try await openFoodFactsService.fetchProduct(barcode: barcode) + + + + case .claude, .openAI, .usdaFoodData, .googleGemini, .bringYourOwn: + // These providers don't support barcode search, fall back to OpenFoodFacts + log.info("⚠️ %{public}@ doesn't support barcode search, falling back to OpenFoodFacts", provider.rawValue) + return try await openFoodFactsService.fetchProduct(barcode: barcode) + } + } + + // MARK: - AI Image Search Routing + + /// Perform AI image analysis using the configured provider + func analyzeFood(image: UIImage) async throws -> AIFoodAnalysisResult { + let provider = aiService.getProviderForSearchType(.aiImageSearch) + + log.info("🤖 Routing AI image analysis to provider: %{public}@", provider.rawValue) + + switch provider { + case .claude: + let key = aiService.getAPIKey(for: .claude) ?? "" + let query = "" // Always use centralized prompts from AIFoodAnalysis.swift + guard !key.isEmpty else { + throw AIFoodAnalysisError.noApiKey + } + return try await ClaudeFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query) + + case .openAI: + let key = aiService.getAPIKey(for: .openAI) ?? "" + let query = "" // Always use centralized prompts from AIFoodAnalysis.swift + guard !key.isEmpty else { + throw AIFoodAnalysisError.noApiKey + } + return try await OpenAIFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query) + + + + case .googleGemini: + let key = UserDefaults.standard.googleGeminiAPIKey + let query = "" // Always use centralized prompts from AIFoodAnalysis.swift + guard !key.isEmpty else { + throw AIFoodAnalysisError.noApiKey + } + return try await GoogleGeminiFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query) + + + + case .bringYourOwn: + // Use OpenAI-compatible custom endpoint for image analysis + // Prefer temporary BYO test override if enabled (DEBUG), else UserDefaults. + let key: String + let base: String + let model: String? + let version: String? + let org: String? + + if BYOTestConfig.enabled { + os_log("🧪 Using BYO test override configuration", log: log, type: .info) + key = BYOTestConfig.apiKey + base = BYOTestConfig.baseURL + model = BYOTestConfig.model + version = BYOTestConfig.apiVersion + org = BYOTestConfig.organizationID + } else { + key = UserDefaults.standard.customAIAPIKey + base = UserDefaults.standard.customAIBaseURL + let m = UserDefaults.standard.customAIModel + let v = UserDefaults.standard.customAIAPIVersion + let o = UserDefaults.standard.customAIOrganization + model = m.isEmpty ? nil : m + version = v.isEmpty ? nil : v + org = o.isEmpty ? nil : o + } + + guard !key.isEmpty, !base.isEmpty else { + throw AIFoodAnalysisError.noApiKey + } + + return try await OpenAIFoodAnalysisService.shared.analyzeFoodImage( + image, + apiKey: key, + query: "", // rely on internal optimized prompt + baseURL: base, + model: model, + apiVersion: version, + organizationID: org, + customPath: { + let path = UserDefaults.standard.customAIEndpointPath.trimmingCharacters(in: .whitespacesAndNewlines) + return path.isEmpty ? nil : path + }(), + telemetryCallback: nil + ) + + case .openFoodFacts, .usdaFoodData: + // OpenFoodFacts and USDA don't support AI image analysis, fall back to Google Gemini + log.info("⚠️ %{public}@ doesn't support AI image analysis, falling back to Google Gemini", provider.rawValue) + let key = UserDefaults.standard.googleGeminiAPIKey + let query = UserDefaults.standard.googleGeminiQuery + guard !key.isEmpty else { + throw AIFoodAnalysisError.noApiKey + } + return try await GoogleGeminiFoodAnalysisService.shared.analyzeFoodImage(image, apiKey: key, query: query) + } + } + + // Removed AI-based text search implementations. Text search now uses OFF/USDA only. + + + + // MARK: Barcode Search Implementations + + + + // MARK: - Helper Methods + + /// Creates a small placeholder image for text-based Gemini queries + private func createPlaceholderImage() -> UIImage { + let size = CGSize(width: 100, height: 100) + UIGraphicsBeginImageContextWithOptions(size, false, 0) + + // Create a simple gradient background + let context = UIGraphicsGetCurrentContext()! + let colors = [UIColor.systemBlue.cgColor, UIColor.systemGreen.cgColor] + let gradient = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: colors as CFArray, locations: nil)! + + context.drawLinearGradient(gradient, start: CGPoint.zero, end: CGPoint(x: size.width, y: size.height), options: []) + + // Add a food icon in the center + let iconSize: CGFloat = 40 + let iconFrame = CGRect( + x: (size.width - iconSize) / 2, + y: (size.height - iconSize) / 2, + width: iconSize, + height: iconSize + ) + + context.setFillColor(UIColor.white.cgColor) + context.fillEllipse(in: iconFrame) + + let image = UIGraphicsGetImageFromCurrentImageContext() ?? UIImage() + UIGraphicsEndImageContext() + + return image + } +} diff --git a/Loop/Services/FoodFinder/FoodFinder_VoiceService.swift b/Loop/Services/FoodFinder/FoodFinder_VoiceService.swift new file mode 100644 index 0000000000..9847553137 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_VoiceService.swift @@ -0,0 +1,361 @@ +// +// VoiceSearchService.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for Voice Search Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import Foundation +import Speech +import AVFoundation +import Combine +import os.log + +/// Service for voice-to-text search functionality using Speech framework +class VoiceSearchService: NSObject, ObservableObject { + + // MARK: - Properties + + /// Published voice search results + @Published var lastSearchResult: VoiceSearchResult? + + /// Published recording state + @Published var isRecording: Bool = false + + /// Published error state + @Published var searchError: VoiceSearchError? + + /// Authorization status for voice search + @Published var authorizationStatus: VoiceSearchAuthorizationStatus = .notDetermined + + // Speech recognition components + private let speechRecognizer: SFSpeechRecognizer? + private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? + private var recognitionTask: SFSpeechRecognitionTask? + private let audioEngine = AVAudioEngine() + + // Timer for recording timeout + private var recordingTimer: Timer? + private let maxRecordingDuration: TimeInterval = 10.0 // 10 seconds max + + private let log = OSLog(category: "VoiceSearchService") + + // Cancellables for subscription management + private var cancellables = Set() + + // MARK: - Public Interface + + /// Shared instance for app-wide use + static let shared = VoiceSearchService() + + override init() { + // Initialize speech recognizer for current locale + self.speechRecognizer = SFSpeechRecognizer(locale: Locale.current) + + super.init() + + // Check initial authorization status + updateAuthorizationStatus() + + // Set speech recognizer delegate + speechRecognizer?.delegate = self + } + + /// Start voice search recording + /// - Returns: Publisher that emits search results + func startVoiceSearch() -> AnyPublisher { + return Future { [weak self] promise in + guard let self = self else { return } + + // Check authorization first + self.requestPermissions() + .sink { [weak self] authorized in + if authorized { + self?.beginRecording(promise: promise) + } else { + let error: VoiceSearchError + if AVAudioSession.sharedInstance().recordPermission == .denied { + error = .microphonePermissionDenied + } else { + error = .speechRecognitionPermissionDenied + } + + DispatchQueue.main.async { + self?.searchError = error + } + promise(.failure(error)) + } + } + .store(in: &cancellables) + } + .eraseToAnyPublisher() + } + + /// Stop voice search recording + func stopVoiceSearch() { + stopRecording() + } + + /// Request necessary permissions for voice search + func requestPermissions() -> AnyPublisher { + return Publishers.CombineLatest( + requestSpeechRecognitionPermission(), + requestMicrophonePermission() + ) + .map { speechGranted, microphoneGranted in + return speechGranted && microphoneGranted + } + .handleEvents(receiveOutput: { [weak self] _ in + self?.updateAuthorizationStatus() + }) + .eraseToAnyPublisher() + } + + // MARK: - Private Methods + + private func updateAuthorizationStatus() { + let speechStatus = SFSpeechRecognizer.authorizationStatus() + let microphoneStatus = AVAudioSession.sharedInstance().recordPermission + authorizationStatus = VoiceSearchAuthorizationStatus( + speechStatus: speechStatus, + microphoneStatus: microphoneStatus + ) + } + + private func requestSpeechRecognitionPermission() -> AnyPublisher { + return Future { promise in + SFSpeechRecognizer.requestAuthorization { status in + DispatchQueue.main.async { + promise(.success(status == .authorized)) + } + } + } + .eraseToAnyPublisher() + } + + private func requestMicrophonePermission() -> AnyPublisher { + return Future { promise in + AVAudioSession.sharedInstance().requestRecordPermission { granted in + DispatchQueue.main.async { + promise(.success(granted)) + } + } + } + .eraseToAnyPublisher() + } + + private func beginRecording(promise: @escaping (Result) -> Void) { + // Cancel any previous task + recognitionTask?.cancel() + recognitionTask = nil + + // Setup audio session + do { + try setupAudioSession() + } catch { + let searchError = VoiceSearchError.audioSessionSetupFailed + DispatchQueue.main.async { + self.searchError = searchError + } + promise(.failure(searchError)) + return + } + + // Create recognition request + recognitionRequest = SFSpeechAudioBufferRecognitionRequest() + + guard let recognitionRequest = recognitionRequest else { + let searchError = VoiceSearchError.recognitionFailed("Failed to create recognition request") + DispatchQueue.main.async { + self.searchError = searchError + } + promise(.failure(searchError)) + return + } + + recognitionRequest.shouldReportPartialResults = true + + // Get the input node from the audio engine + let inputNode = audioEngine.inputNode + + // Create and start the recognition task + guard let speechRecognizer = speechRecognizer else { + let searchError = VoiceSearchError.speechRecognitionNotAvailable + DispatchQueue.main.async { + self.searchError = searchError + } + promise(.failure(searchError)) + return + } + + recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { [weak self] result, error in + self?.handleRecognitionResult(result: result, error: error, promise: promise) + } + + // Configure the microphone input + let recordingFormat = inputNode.outputFormat(forBus: 0) + inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in + recognitionRequest.append(buffer) + } + + // Start the audio engine + do { + try audioEngine.start() + + DispatchQueue.main.async { + self.isRecording = true + self.searchError = nil + } + + // Start recording timeout timer + recordingTimer = Timer.scheduledTimer(withTimeInterval: maxRecordingDuration, repeats: false) { [weak self] _ in + self?.stopRecording() + } + + os_log("Voice search recording started", log: log, type: .info) + + } catch { + let searchError = VoiceSearchError.audioSessionSetupFailed + DispatchQueue.main.async { + self.searchError = searchError + } + promise(.failure(searchError)) + } + } + + private func setupAudioSession() throws { + let audioSession = AVAudioSession.sharedInstance() + try audioSession.setCategory(.record, mode: .measurement, options: .duckOthers) + try audioSession.setActive(true, options: .notifyOthersOnDeactivation) + } + + private func handleRecognitionResult( + result: SFSpeechRecognitionResult?, + error: Error?, + promise: @escaping (Result) -> Void + ) { + if let error = error { + os_log("Speech recognition error: %{public}@", log: log, type: .error, error.localizedDescription) + + let searchError = VoiceSearchError.recognitionFailed(error.localizedDescription) + DispatchQueue.main.async { + self.searchError = searchError + self.isRecording = false + } + + stopRecording() + return + } + + guard let result = result else { return } + + let transcribedText = result.bestTranscription.formattedString + let confidence = result.bestTranscription.segments.map(\.confidence).average() + let alternatives = Array(result.transcriptions.prefix(3).map(\.formattedString)) + + let searchResult = VoiceSearchResult( + transcribedText: transcribedText, + confidence: confidence, + isFinal: result.isFinal, + alternatives: alternatives + ) + + DispatchQueue.main.async { + self.lastSearchResult = searchResult + } + + os_log("Voice search result: '%{public}@' (confidence: %.2f, final: %{public}@)", + log: log, type: .info, + transcribedText, confidence, result.isFinal ? "YES" : "NO") + + // If final result or high confidence, complete the promise + if result.isFinal || confidence > 0.8 { + DispatchQueue.main.async { + self.isRecording = false + } + stopRecording() + } + } + + private func stopRecording() { + // Stop audio engine + audioEngine.stop() + audioEngine.inputNode.removeTap(onBus: 0) + + // Stop recognition + recognitionRequest?.endAudio() + recognitionRequest = nil + recognitionTask?.cancel() + recognitionTask = nil + + // Cancel timer + recordingTimer?.invalidate() + recordingTimer = nil + + // Reset audio session + do { + try AVAudioSession.sharedInstance().setActive(false) + } catch { + os_log("Failed to deactivate audio session: %{public}@", log: log, type: .error, error.localizedDescription) + } + + DispatchQueue.main.async { + self.isRecording = false + } + + os_log("Voice search recording stopped", log: log, type: .info) + } +} + +// MARK: - SFSpeechRecognizerDelegate + +extension VoiceSearchService: SFSpeechRecognizerDelegate { + func speechRecognizer(_ speechRecognizer: SFSpeechRecognizer, availabilityDidChange available: Bool) { + DispatchQueue.main.async { + if !available { + self.searchError = .speechRecognitionNotAvailable + self.stopVoiceSearch() + } + } + } +} + +// MARK: - Helper Extensions + +private extension Array where Element == Float { + func average() -> Float { + guard !isEmpty else { return 0.0 } + return reduce(0, +) / Float(count) + } +} + +// MARK: - Testing Support + +#if DEBUG +extension VoiceSearchService { + /// Create a mock voice search service for testing + static func mock() -> VoiceSearchService { + let service = VoiceSearchService() + service.authorizationStatus = .authorized + return service + } + + /// Simulate a successful voice search for testing + func simulateVoiceSearch(text: String) { + let result = VoiceSearchResult.sample(text: text) + DispatchQueue.main.async { + self.lastSearchResult = result + self.isRecording = false + } + } + + /// Simulate a voice search error for testing + func simulateError(_ error: VoiceSearchError) { + DispatchQueue.main.async { + self.searchError = error + self.isRecording = false + } + } +} +#endif diff --git a/Loop/View Models/FoodFinder/FoodFinder_FavoritesViewModel.swift b/Loop/View Models/FoodFinder/FoodFinder_FavoritesViewModel.swift new file mode 100644 index 0000000000..82ce9caf82 --- /dev/null +++ b/Loop/View Models/FoodFinder/FoodFinder_FavoritesViewModel.swift @@ -0,0 +1,118 @@ +// +// FoodFinder_FavoritesViewModel.swift +// Loop +// +// FoodFinder — helper that encapsulates the FoodFinder-specific +// emoji/thumbnail logic originally added to FavoriteFoodsViewModel +// and AddEditFavoriteFoodViewModel. +// +// Call sites in the host ViewModels delegate to these static methods +// so that all FoodFinder behaviour can be toggled from one place. +// + +import Foundation +import UIKit +import LoopKit + +// MARK: - FoodFinder_FavoritesViewModel + +enum FoodFinder_FavoritesViewModel { + + // MARK: Name Processing (from FavoriteFoodsViewModel) + + /// Truncates `name` to the first five whitespace-separated words. + /// Copied verbatim from `FavoriteFoodsViewModel.firstFiveWords(of:)`. + static func processNameForSave(_ name: String) -> String { + let words = name.split { $0.isWhitespace } + if words.count <= 5 { return name.trimmingCharacters(in: .whitespacesAndNewlines) } + return words.prefix(5).joined(separator: " ") + } + + // MARK: Emoji / Food-Type Resolution (from FavoriteFoodsViewModel.onFoodSave) + + /// Given the food name and its current `foodType`, resolves the food type to + /// a single emoji when the name or food type matches a known simple food. + /// Mirrors the candidate-lookup block inside `onFoodSave`. + static func resolveFoodType(name: String, foodType: String) -> String { + let candidateNames = [name, foodType].compactMap { $0 } + let matchedNameForEmoji = candidateNames.first { EmojiThumbnailProvider.emoji(for: $0) != nil } + let resolvedEmoji: String? = matchedNameForEmoji.flatMap { EmojiThumbnailProvider.emoji(for: $0) } + let finalFoodType = resolvedEmoji ?? foodType + return finalFoodType + } + + // MARK: Thumbnail Persistence (from FavoriteFoodsViewModel.onFoodSave) + + /// Saves an emoji-based thumbnail for `food` when one of the `candidateNames` + /// matches a known simple food. Updates `UserDefaults.favoriteFoodImageIDs`. + /// Copied from both the "add" and "edit" branches of `onFoodSave`. + static func saveThumbnailIfNeeded(for food: StoredFavoriteFood, candidateNames: [String]) { + let matchedNameForEmoji = candidateNames.first { EmojiThumbnailProvider.emoji(for: $0) != nil } + if let match = matchedNameForEmoji, let image = EmojiThumbnailProvider.image(for: match) { + if let id = FavoriteFoodImageStore.saveThumbnail(from: image) { + var map = UserDefaults.standard.favoriteFoodImageIDs + map[food.id] = id + UserDefaults.standard.favoriteFoodImageIDs = map + } + } + } + + // MARK: Thumbnail Deletion (from FavoriteFoodsViewModel.onFoodDelete) + + /// Removes the stored thumbnail for `food` and cleans up the image-ID map. + /// Copied from `onFoodDelete`. + static func deleteThumbnail(for food: StoredFavoriteFood) { + var map = UserDefaults.standard.favoriteFoodImageIDs + if let id = map[food.id] { + FavoriteFoodImageStore.deleteThumbnail(id: id) + map.removeValue(forKey: food.id) + UserDefaults.standard.favoriteFoodImageIDs = map + } + } + + // MARK: Thumbnail Loading + + /// Loads the thumbnail `UIImage` previously saved for `food`, if any. + static func thumbnailForFood(_ food: StoredFavoriteFood) -> UIImage? { + let map = UserDefaults.standard.favoriteFoodImageIDs + guard let id = map[food.id] else { return nil } + return FavoriteFoodImageStore.loadThumbnail(id: id) + } + + // MARK: - AddEditFavoriteFoodViewModel Helpers + + /// Maximum character length for a favourite-food name. + /// Copied from `AddEditFavoriteFoodViewModel.maxNameLength`. + static let maxNameLength = 30 + + /// Truncates `raw` to `maxNameLength` characters after trimming whitespace. + /// Copied verbatim from `AddEditFavoriteFoodViewModel.truncatedName(_:)`. + static func truncatedName(_ raw: String) -> String { + let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines) + let clean = trimmed + guard clean.count > maxNameLength else { return clean } + let endIndex = clean.index(clean.startIndex, offsetBy: maxNameLength) + return String(clean[.. String { + let trimmedInitial = initial.trimmingCharacters(in: .whitespacesAndNewlines) + let extraCandidates = additionalCandidates.compactMap { $0?.trimmingCharacters(in: .whitespacesAndNewlines) } + let nonEmptyExtras = extraCandidates.filter { !$0.isEmpty } + + // Prefer any mapped emoji for known simple foods using the provided candidates. + let lookupCandidates = ([trimmedInitial] + nonEmptyExtras).filter { !$0.isEmpty } + if let emoji = lookupCandidates.compactMap({ EmojiThumbnailProvider.emoji(for: $0) }).first { + return emoji + } + + // If no emoji mapping, fall back to the first non-empty candidate (initial or provided name). + if !trimmedInitial.isEmpty { + return trimmedInitial + } + return nonEmptyExtras.first ?? trimmedInitial + } +} diff --git a/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift b/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift new file mode 100644 index 0000000000..597a408ca1 --- /dev/null +++ b/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift @@ -0,0 +1,1587 @@ +// +// FoodFinder_SearchViewModel.swift +// Loop +// +// Extracted from CarbEntryViewModel.swift — all FoodFinder food-search +// state and logic now lives in this self-contained ViewModel. +// +// Created by Taylor Patterson. Coded by Claude Code. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKit +import HealthKit +import Combine +import os.log +import ObjectiveC +import UIKit + +// MARK: - Timeout Utilities + +/// Error thrown when an operation times out +struct FoodFinder_TimeoutError: Error { + let duration: TimeInterval + + var localizedDescription: String { + return "Operation timed out after \(duration) seconds" + } +} + +/// Execute an async operation with a timeout +/// - Parameters: +/// - seconds: Timeout duration in seconds +/// - operation: The async operation to execute +/// - Throws: FoodFinder_TimeoutError if the operation doesn't complete within the timeout +func foodFinder_withTimeout(seconds: TimeInterval, operation: @escaping () async throws -> T) async throws -> T { + try await withThrowingTaskGroup(of: T.self) { group in + // Add the main operation + group.addTask { + try await operation() + } + + // Add the timeout task + group.addTask { + try await Task.sleep(nanoseconds: UInt64(seconds * 1_000_000_000)) + throw FoodFinder_TimeoutError(duration: seconds) + } + + // Return the first result and cancel the other task + let result = try await group.next()! + group.cancelAll() + return result + } +} + +// MARK: - Nutrition Result Tuple + +/// The payload delivered to the host (CarbEntryView / CarbEntryViewModel) +/// when the user confirms a food selection or AI analysis. +struct FoodFinder_NutritionResult { + let carbs: Double + let foodType: String + let absorptionTime: TimeInterval + let absorptionTimeWasAIGenerated: Bool +} + +// MARK: - Search ViewModel + +final class FoodFinder_SearchViewModel: ObservableObject { + + // MARK: - Callback to Host + + /// The host sets this closure so it can receive nutrition updates + /// when the user selects a food product or AI analysis completes. + var onNutritionApplied: ((FoodFinder_NutritionResult) -> Void)? + + /// Callback when the selected food is cleared so the host can reset its fields. + var onFoodCleared: (() -> Void)? + + // MARK: - Food Search Published Properties + + /// Current search text for food lookup + @Published var foodSearchText: String = "" + + /// Results from food search + @Published var foodSearchResults: [OpenFoodFactsProduct] = [] + + /// Currently selected food product + @Published var selectedFoodProduct: OpenFoodFactsProduct? = nil + + /// Serving size context for selected food product + @Published var selectedFoodServingSize: String? = nil + + /// Number of servings for the selected food product + @Published var numberOfServings: Double = 1.0 + + /// Whether a food search is currently in progress + @Published var isFoodSearching: Bool = false + + /// Error message from food search operations + @Published var foodSearchError: String? = nil + + /// Whether the food search UI is visible + @Published var showingFoodSearch: Bool = false + + /// Store the last AI analysis result for detailed UI display + @Published var lastAIAnalysisResult: AIFoodAnalysisResult? = nil + + /// Indices of AI-detected items excluded by the user (soft delete) + @Published var excludedAIItemIndices: Set = [] + + /// Store the captured AI image for display + @Published var capturedAIImage: UIImage? = nil + + // MARK: - Internal / Private State + + /// Track the last barcode we searched for to prevent duplicates + private var lastBarcodeSearched: String? = nil + + /// Flag to track if food search observers have been set up + private var observersSetUp = false + + /// Search result cache for improved performance + private var searchCache: [String: CachedSearchResult] = [:] + + /// Cache entry with timestamp for expiration + private struct CachedSearchResult { + let results: [OpenFoodFactsProduct] + let timestamp: Date + + var isExpired: Bool { + Date().timeIntervalSince(timestamp) > 300 // 5 minutes cache + } + } + + /// OpenFoodFacts service for food search + private let openFoodFactsService = OpenFoodFactsService() + + /// AI service for provider routing + private let aiService = ConfigurableAIService.shared + + /// Combine subscriptions + private lazy var cancellables = Set() + + // MARK: - Absorption Time Context + // These are passed from the host so this ViewModel can compute + // absorption-time adjustments without depending on CarbEntryViewModel. + + let defaultAbsorptionTimes: CarbStore.DefaultAbsorptionTimes + + /// The absorption time currently shown in the host's UI. + /// Updated via the callback – we keep a local copy so deletion / + /// recalculation logic can reference it. + @Published var absorptionTime: TimeInterval + + /// Whether the absorption time was set by AI analysis + @Published var absorptionTimeWasAIGenerated: Bool = false + + /// Internal flag so programmatic absorption-time writes don't flip + /// ``absorptionTimeWasEdited`` in the host. + internal var absorptionEditIsProgrammatic = false + + // MARK: - Associated-Object Storage for Task + + /// Task for debounced search operations + private var foodSearchTask: Task? { + get { objc_getAssociatedObject(self, &AssociatedKeys.foodSearchTask) as? Task } + set { objc_setAssociatedObject(self, &AssociatedKeys.foodSearchTask, newValue, .OBJC_ASSOCIATION_RETAIN) } + } + + private struct AssociatedKeys { + static var foodSearchTask: UInt8 = 0 + } + + // MARK: - Init + + /// - Parameters: + /// - defaultAbsorptionTimes: The fast / medium / slow absorption times from the CarbStore. + /// - initialAbsorptionTime: Current absorption time from the host (usually `medium`). + init(defaultAbsorptionTimes: CarbStore.DefaultAbsorptionTimes, + initialAbsorptionTime: TimeInterval) { + self.defaultAbsorptionTimes = defaultAbsorptionTimes + self.absorptionTime = initialAbsorptionTime + } + + // MARK: - Observer Setup + + /// Call once after init (typically from the hosting view's onAppear or + /// the parent ViewModel's init). + func setupObservers() { + setupFoodSearchObservers() + observeNumberOfServingsChange() + observeAIExclusionsChange() + } + + /// Setup food search observers + func setupFoodSearchObservers() { + guard !observersSetUp else { + return + } + + observersSetUp = true + + // Debounce search text changes + $foodSearchText + .dropFirst() + .debounce(for: .milliseconds(300), scheduler: DispatchQueue.main) + .sink { [weak self] searchText in + self?.performFoodSearch(query: searchText) + } + .store(in: &cancellables) + + // Listen for barcode scan results with deduplication + BarcodeScannerService.shared.$lastScanResult + .compactMap { $0 } + .removeDuplicates { $0.barcodeString == $1.barcodeString } + .throttle(for: .milliseconds(800), scheduler: DispatchQueue.main, latest: false) + .sink { [weak self] result in + print("🔍 ========== BARCODE RECEIVED IN VIEWMODEL ==========") + print("🔍 FoodFinder_SearchViewModel received barcode from BarcodeScannerService: \(result.barcodeString)") + print("🔍 Barcode confidence: \(result.confidence)") + print("🔍 Calling searchFoodProductByBarcode...") + self?.searchFoodProductByBarcode(result.barcodeString) + } + .store(in: &cancellables) + } + + // MARK: - Servings / AI Exclusion Observers + + private func observeNumberOfServingsChange() { + $numberOfServings + .receive(on: RunLoop.main) + .dropFirst() + .sink { [weak self] servings in + print("🥄 numberOfServings changed to: \(servings), recalculating nutrition...") + self?.recalculateCarbsForServings(servings) + self?.recomputeAIAdjustments() + } + .store(in: &cancellables) + } + + private func observeAIExclusionsChange() { + $excludedAIItemIndices + .receive(on: RunLoop.main) + .sink { [weak self] _ in + self?.recomputeAIAdjustments() + } + .store(in: &cancellables) + $lastAIAnalysisResult + .receive(on: RunLoop.main) + .sink { [weak self] _ in + self?.recomputeAIAdjustments() + } + .store(in: &cancellables) + } + + // MARK: - AI Adjustment Recomputation + + /// Recompute carbs and absorption time based on included AI items + func recomputeAIAdjustments() { + guard let ai = lastAIAnalysisResult else { return } + let included = ai.foodItemsDetailed.enumerated() + .filter { !excludedAIItemIndices.contains($0.offset) } + .map { $0.element } + // Carbs + let baseCarbs = included.reduce(0.0) { $0 + $1.carbohydrates } + let scale = ai.originalServings > 0 ? (numberOfServings / ai.originalServings) : 1.0 + let newCarbs = baseCarbs * scale + + // Absorption time: use overall AI time if present (per-item times not available) + var newAbsorptionTime = absorptionTime + var aiGenerated = absorptionTimeWasAIGenerated + if let hours = ai.absorptionTimeHours, hours > 0 { + newAbsorptionTime = TimeInterval(hours * 3600) + aiGenerated = true + } + + // Determine food type from the AI result + let foodType: String = { + let names = included.map { $0.name } + if names.count == 1 { + return names[0] + } else if !names.isEmpty { + let joined = names.joined(separator: ", ") + if joined.count > 20 { + return String(joined.prefix(19)) + "…" + } + return joined + } + return ai.overallDescription ?? "AI Analysis" + }() + + // Notify host + absorptionEditIsProgrammatic = true + absorptionTime = newAbsorptionTime + absorptionTimeWasAIGenerated = aiGenerated + + onNutritionApplied?(FoodFinder_NutritionResult( + carbs: newCarbs, + foodType: foodType, + absorptionTime: newAbsorptionTime, + absorptionTimeWasAIGenerated: aiGenerated + )) + } + + // MARK: - Food Search Methods + + /// Perform food search with given query + /// - Parameter query: Search term for food lookup + func performFoodSearch(query: String) { + + // Cancel previous search + foodSearchTask?.cancel() + + let trimmedQuery = query.trimmingCharacters(in: .whitespacesAndNewlines) + + // Clear results if query is empty + guard !trimmedQuery.isEmpty else { + foodSearchResults = [] + foodSearchError = nil + showingFoodSearch = false + return + } + + print("🔍 Starting search for: '\(trimmedQuery)'") + + // Show search UI, clear previous results and error + showingFoodSearch = true + foodSearchResults = [] // Clear previous results to show searching state + foodSearchError = nil + isFoodSearching = true + + + // Perform new search immediately but ensure minimum search time for UX + foodSearchTask = Task { [weak self] in + guard let self = self else { return } + + do { + await self.searchFoodProducts(query: trimmedQuery) + } catch { + print("🔍 Food search error: \(error)") + await MainActor.run { + self.foodSearchError = error.localizedDescription + self.isFoodSearching = false + } + } + } + } + + /// Search for food products using OpenFoodFacts API + /// - Parameter query: Search query string + @MainActor + private func searchFoodProducts(query: String) async { + print("🔍 searchFoodProducts starting for: '\(query)'") + foodSearchError = nil + + let trimmedQuery = query.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + + // Check cache first for instant results + if let cachedResult = searchCache[trimmedQuery], !cachedResult.isExpired { + print("🔍 Using cached results for: '\(trimmedQuery)'") + foodSearchResults = cachedResult.results + isFoodSearching = false + return + } + + // Show skeleton loading state immediately + foodSearchResults = createSkeletonResults() + + let searchStartTime = Date() + let minimumSearchDuration: TimeInterval = 0.3 // Reduced from 1.2s for better responsiveness + + do { + print("🔍 Performing text search with configured provider...") + let products = try await performTextSearch(query: query) + + // Cache the results for future use + searchCache[trimmedQuery] = CachedSearchResult(results: products, timestamp: Date()) + print("🔍 Cached results for: '\(trimmedQuery)' (\(products.count) items)") + + // Periodically clean up expired cache entries + if searchCache.count > 20 { + cleanupExpiredCache() + } + + // Ensure minimum search duration for smooth animations + let elapsedTime = Date().timeIntervalSince(searchStartTime) + if elapsedTime < minimumSearchDuration { + let remainingTime = minimumSearchDuration - elapsedTime + print("🔍 Adding \(remainingTime)s delay to reach minimum search duration") + do { + try await Task.sleep(nanoseconds: UInt64(remainingTime * 1_000_000_000)) + } catch { + // Task.sleep can throw CancellationError, which is fine to ignore for timing + print("🔍 Task.sleep cancelled during search timing (expected)") + } + } + + foodSearchResults = products + + print("🔍 Search completed! Found \(products.count) products") + + os_log("Food search for '%{public}@' returned %d results", + log: OSLog(category: "FoodSearch"), + type: .info, + query, + products.count) + + } catch { + print("🔍 Search failed with error: \(error)") + + // Don't show cancellation errors to the user - they're expected during rapid typing + if error is CancellationError { + print("🔍 Search was cancelled (expected behavior)") + // Clear any previous error when cancelled + foodSearchError = nil + isFoodSearching = false + return + } + + // Check for URLError cancellation as well + if let urlError = error as? URLError, urlError.code == .cancelled { + print("🔍 URLSession request was cancelled (expected behavior)") + // Clear any previous error when cancelled + foodSearchError = nil + isFoodSearching = false + return + } + + // Check for OpenFoodFactsError wrapping a URLError cancellation + if let openFoodFactsError = error as? OpenFoodFactsError, + case .networkError(let underlyingError) = openFoodFactsError, + let urlError = underlyingError as? URLError, + urlError.code == .cancelled { + print("🔍 OpenFoodFacts wrapped URLSession request was cancelled (expected behavior)") + // Clear any previous error when cancelled + foodSearchError = nil + isFoodSearching = false + return + } + + // For real errors, ensure minimum search duration before showing error + let elapsedTime = Date().timeIntervalSince(searchStartTime) + if elapsedTime < minimumSearchDuration { + let remainingTime = minimumSearchDuration - elapsedTime + print("🔍 Adding \(remainingTime)s delay before showing error") + do { + try await Task.sleep(nanoseconds: UInt64(remainingTime * 1_000_000_000)) + } catch { + // Task.sleep can throw CancellationError, which is fine to ignore for timing + print("🔍 Task.sleep cancelled during error timing (expected)") + } + } + + foodSearchError = error.localizedDescription + foodSearchResults = [] + + os_log("Food search failed: %{public}@", + log: OSLog(category: "FoodSearch"), + type: .error, + error.localizedDescription) + } + + // Always set isFoodSearching to false at the end + isFoodSearching = false + print("🔍 searchFoodProducts finished, isFoodSearching = false") + } + + // MARK: - Barcode Search + + /// Search for a specific product by barcode + /// - Parameter barcode: Product barcode + + func searchFoodProductByBarcode(_ barcode: String) { + print("🔍 ========== BARCODE SEARCH STARTED ==========") + print("🔍 searchFoodProductByBarcode called with barcode: \(barcode)") + print("🔍 Current thread: \(Thread.isMainThread ? "MAIN" : "BACKGROUND")") + print("🔍 lastBarcodeSearched: \(lastBarcodeSearched ?? "nil")") + + // Prevent duplicate searches for the same barcode + if let lastBarcode = lastBarcodeSearched, lastBarcode == barcode { + print("🔍 ⚠️ Ignoring duplicate barcode search for: \(barcode)") + return + } + + // Always cancel any existing task to prevent stalling + if let existingTask = foodSearchTask, !existingTask.isCancelled { + print("🔍 Cancelling existing search task") + existingTask.cancel() + } + + lastBarcodeSearched = barcode + + foodSearchTask = Task { [weak self] in + guard let self = self else { return } + + do { + print("🔍 Starting barcode lookup task for: \(barcode)") + + // Add timeout wrapper to prevent infinite stalling + try await foodFinder_withTimeout(seconds: 45) { + await self.lookupProductByBarcode(barcode) + } + + // Clear the last barcode after successful completion + await MainActor.run { + self.lastBarcodeSearched = nil + } + } catch { + print("🔍 Barcode search error: \(error)") + + await MainActor.run { + // If it's a timeout, create fallback product + if error is FoodFinder_TimeoutError { + print("🔍 Barcode search timed out, creating fallback product") + self.createManualEntryPlaceholder(for: barcode) + self.lastBarcodeSearched = nil + return + } + + self.foodSearchError = error.localizedDescription + self.isFoodSearching = false + + // Clear the last barcode after error + self.lastBarcodeSearched = nil + } + } + } + } + + /// Look up a product by barcode + /// - Parameter barcode: Product barcode + @MainActor + private func lookupProductByBarcode(_ barcode: String) async { + print("🔍 lookupProductByBarcode starting for: \(barcode)") + + // Clear previous results to show searching state + foodSearchResults = [] + isFoodSearching = true + foodSearchError = nil + + defer { + print("🔍 lookupProductByBarcode finished, setting isFoodSearching = false") + isFoodSearching = false + } + + // Quick network connectivity check - if we can't reach the API quickly, show clear error + do { + print("🔍 Testing OpenFoodFacts connectivity...") + let testUrl = URL(string: "https://world.openfoodfacts.net/api/v2/product/test.json")! + var testRequest = URLRequest(url: testUrl) + testRequest.timeoutInterval = 3.0 // Very short timeout for connectivity test + testRequest.httpMethod = "HEAD" // Just check if server responds + + let (_, response) = try await URLSession.shared.data(for: testRequest) + if let httpResponse = response as? HTTPURLResponse { + print("🔍 OpenFoodFacts connectivity test: HTTP \(httpResponse.statusCode)") + if httpResponse.statusCode >= 500 { + throw URLError(.badServerResponse) + } + } + } catch { + print("🔍 OpenFoodFacts not reachable: \(error)") + // Offer to create a manual entry placeholder + createManualEntryPlaceholder(for: barcode) + return + } + + do { + print("🔍 Calling performBarcodeSearch for: \(barcode)") + if let product = try await performBarcodeSearch(barcode: barcode) { + // Add to search results and select it + if !foodSearchResults.contains(product) { + foodSearchResults.insert(product, at: 0) + } + selectFoodProduct(product) + + os_log("Barcode lookup successful for %{public}@: %{public}@", + log: OSLog(category: "FoodSearch"), + type: .info, + barcode, + product.displayName) + } else { + print("🔍 No product found, creating manual entry placeholder") + createManualEntryPlaceholder(for: barcode) + } + + } catch { + // Don't show cancellation errors to the user - just return without doing anything + if error is CancellationError { + print("🔍 Barcode lookup was cancelled (expected behavior)") + foodSearchError = nil + return + } + + if let urlError = error as? URLError, urlError.code == .cancelled { + print("🔍 Barcode lookup URLSession request was cancelled (expected behavior)") + foodSearchError = nil + return + } + + // Check for OpenFoodFactsError wrapping a URLError cancellation + if let openFoodFactsError = error as? OpenFoodFactsError, + case .networkError(let underlyingError) = openFoodFactsError, + let urlError = underlyingError as? URLError, + urlError.code == .cancelled { + print("🔍 Barcode lookup OpenFoodFacts wrapped URLSession request was cancelled (expected behavior)") + foodSearchError = nil + return + } + + // For any other error (network issues, product not found, etc.), create manual entry placeholder + print("🔍 Barcode lookup failed with error: \(error), creating manual entry placeholder") + createManualEntryPlaceholder(for: barcode) + + os_log("Barcode lookup failed for %{public}@: %{public}@, created manual entry placeholder", + log: OSLog(category: "FoodSearch"), + type: .info, + barcode, + error.localizedDescription) + } + } + + /// Create a manual entry placeholder when network requests fail + /// - Parameter barcode: The scanned barcode + private func createManualEntryPlaceholder(for barcode: String) { + print("🔍 ========== CREATING MANUAL ENTRY PLACEHOLDER ==========") + print("🔍 Creating manual entry placeholder for barcode: \(barcode)") + print("🔍 Current thread: \(Thread.isMainThread ? "MAIN" : "BACKGROUND")") + print("🔍 ⚠️ WARNING: This is NOT real product data - requires manual entry") + + // Create a placeholder product that requires manual nutrition entry + let fallbackProduct = OpenFoodFactsProduct( + id: "fallback_\(barcode)", + productName: "Product \(barcode)", + brands: "Database Unavailable", + categories: "⚠️ NUTRITION DATA UNAVAILABLE - ENTER MANUALLY", + nutriments: Nutriments( + carbohydrates: 0.0, // Force user to enter real values + proteins: 0.0, + fat: 0.0, + calories: 0.0, + sugars: nil, + fiber: nil + ), + servingSize: "Enter serving size", + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: barcode, + dataSource: .barcodeScan + ) + + // Add to search results and select it + if !foodSearchResults.contains(fallbackProduct) { + foodSearchResults.insert(fallbackProduct, at: 0) + } + + selectFoodProduct(fallbackProduct) + + // Store the selected food information for UI display + selectedFoodServingSize = fallbackProduct.servingSize + numberOfServings = 1.0 + + // Clear any error since we successfully created a fallback + foodSearchError = nil + + print("🔍 ✅ Manual entry placeholder created for barcode: \(barcode)") + print("🔍 foodSearchResults.count: \(foodSearchResults.count)") + print("🔍 selectedFoodProduct: \(selectedFoodProduct?.displayName ?? "nil")") + print("🔍 ========== MANUAL ENTRY PLACEHOLDER COMPLETE ==========") + } + + // MARK: - Select Food Product + + /// Select a food product and populate carb entry fields + /// - Parameter product: The selected food product + func selectFoodProduct(_ product: OpenFoodFactsProduct) { + print("🔄 ========== SELECTING FOOD PRODUCT ==========") + print("🔄 Product: \(product.displayName)") + print("🔄 Product ID: \(product.id)") + print("🔄 Data source: \(product.dataSource)") + print("🔄 Current absorptionTime BEFORE selecting: \(absorptionTime)") + + selectedFoodProduct = product + + // Populate food type (truncate to 20 chars to fit RowEmojiTextField maxLength) + let maxFoodTypeLength = 20 + let foodType: String + if product.displayName.count > maxFoodTypeLength { + let truncatedName = String(product.displayName.prefix(maxFoodTypeLength - 1)) + "…" + foodType = truncatedName + } else { + foodType = product.displayName + } + + // Store serving size context for display + selectedFoodServingSize = product.servingSizeDisplay + + // Start with 1 serving (user can adjust) + numberOfServings = 1.0 + + // Calculate carbs - but only for real products with valid data + let carbsQuantity: Double? + if product.id.hasPrefix("fallback_") { + // This is a fallback product - don't auto-populate any nutrition data + carbsQuantity = nil // Force user to enter manually + print("🔍 ⚠️ Fallback product selected - carbs must be entered manually") + } else if let carbsPerServing = product.carbsPerServing { + carbsQuantity = carbsPerServing * numberOfServings + } else if product.nutriments.carbohydrates > 0 { + // Use carbs per 100g as base, user can adjust + carbsQuantity = product.nutriments.carbohydrates * numberOfServings + } else { + // No carb data available + carbsQuantity = nil + } + + print("🔄 Current absorptionTime AFTER all processing: \(absorptionTime)") + print("🔄 ========== FOOD PRODUCT SELECTION COMPLETE ==========") + + // Clear search UI but keep selected product + foodSearchText = "" + foodSearchResults = [] + foodSearchError = nil + showingFoodSearch = false + foodSearchTask?.cancel() + + // Clear AI-specific state when selecting a non-AI product + // This ensures AI results don't persist when switching to text/barcode search + if !product.id.hasPrefix("ai_") { + lastAIAnalysisResult = nil + capturedAIImage = nil + absorptionTimeWasAIGenerated = false // Clear AI absorption time flag for non-AI products + os_log("🔄 Cleared AI analysis state when selecting non-AI product: %{public}@", + log: OSLog(category: "FoodSearch"), + type: .info, + product.id) + } + + os_log("Selected food product: %{public}@ with %{public}g carbs per %{public}@ for %{public}.1f servings", + log: OSLog(category: "FoodSearch"), + type: .info, + product.displayName, + carbsQuantity ?? 0, + selectedFoodServingSize ?? "serving", + numberOfServings) + + // Notify the host about the selection + onNutritionApplied?(FoodFinder_NutritionResult( + carbs: carbsQuantity ?? 0, + foodType: foodType, + absorptionTime: absorptionTime, + absorptionTimeWasAIGenerated: absorptionTimeWasAIGenerated + )) + } + + // MARK: - Recalculate Carbs for Servings + + /// Recalculate carbohydrates based on number of servings + /// - Parameter servings: Number of servings + private func recalculateCarbsForServings(_ servings: Double) { + guard let selectedFood = selectedFoodProduct else { + print("🥄 recalculateCarbsForServings: No selected food product") + return + } + + print("🥄 recalculateCarbsForServings: servings=\(servings), selectedFood=\(selectedFood.displayName)") + + // Calculate carbs based on servings - prefer per serving, fallback to per 100g + let newCarbsQuantity: Double + if let carbsPerServing = selectedFood.carbsPerServing { + newCarbsQuantity = carbsPerServing * servings + print("🥄 Using carbsPerServing: \(carbsPerServing) * \(servings) = \(newCarbsQuantity)") + } else { + newCarbsQuantity = selectedFood.nutriments.carbohydrates * servings + print("🥄 Using nutriments.carbohydrates: \(selectedFood.nutriments.carbohydrates) * \(servings) = \(newCarbsQuantity)") + } + + print("🥄 Final carbsQuantity set to: \(newCarbsQuantity)") + + // Determine food type from the selected product + let maxFoodTypeLength = 20 + let foodType: String + if selectedFood.displayName.count > maxFoodTypeLength { + foodType = String(selectedFood.displayName.prefix(maxFoodTypeLength - 1)) + "…" + } else { + foodType = selectedFood.displayName + } + + // Notify host of the updated carbs + onNutritionApplied?(FoodFinder_NutritionResult( + carbs: newCarbsQuantity, + foodType: foodType, + absorptionTime: absorptionTime, + absorptionTimeWasAIGenerated: absorptionTimeWasAIGenerated + )) + + os_log("Recalculated carbs for %{public}.1f servings: %{public}g", + log: OSLog(category: "FoodSearch"), + type: .info, + servings, + newCarbsQuantity) + } + + // MARK: - Skeleton Loading + + /// Create skeleton loading results for immediate feedback + private func createSkeletonResults() -> [OpenFoodFactsProduct] { + return (0..<3).map { index in + var product = OpenFoodFactsProduct( + id: "skeleton_\(index)", + productName: "Loading...", + brands: "Loading...", + categories: nil, + nutriments: Nutriments.empty(), + servingSize: nil, + servingQuantity: nil, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .unknown, + isSkeleton: false + ) + product.isSkeleton = true // Set skeleton flag + return product + } + } + + // MARK: - Clear / Toggle Helpers + + /// Clear food search state + func clearFoodSearch() { + foodSearchText = "" + foodSearchResults = [] + selectedFoodProduct = nil + selectedFoodServingSize = nil + foodSearchError = nil + showingFoodSearch = false + foodSearchTask?.cancel() + lastBarcodeSearched = nil // Allow re-scanning the same barcode + } + + /// Clean up expired cache entries + private func cleanupExpiredCache() { + let expiredKeys = searchCache.compactMap { key, value in + value.isExpired ? key : nil + } + + for key in expiredKeys { + searchCache.removeValue(forKey: key) + } + + if !expiredKeys.isEmpty { + print("🔍 Cleaned up \(expiredKeys.count) expired cache entries") + } + } + + /// Clear search cache manually + func clearSearchCache() { + searchCache.removeAll() + print("🔍 Search cache cleared") + } + + /// Toggle food search visibility + func toggleFoodSearch() { + showingFoodSearch.toggle() + + if !showingFoodSearch { + clearFoodSearch() + } + } + + /// Clear selected food product and its context + func clearSelectedFood() { + selectedFoodProduct = nil + selectedFoodServingSize = nil + numberOfServings = 1.0 + lastAIAnalysisResult = nil + capturedAIImage = nil + absorptionTimeWasAIGenerated = false // Clear AI absorption time flag + lastBarcodeSearched = nil // Allow re-scanning the same barcode + + os_log("Cleared selected food product", + log: OSLog(category: "FoodSearch"), + type: .info) + + // Notify host that food was cleared + onFoodCleared?() + } + + // MARK: - Provider Routing Methods + + /// Perform text search using configured provider + private func performTextSearch(query: String) async throws -> [OpenFoodFactsProduct] { + // Centralize text search routing and fallbacks in FoodSearchRouter + return try await FoodSearchRouter.shared.searchFoodsByText(query) + } + + /// Perform barcode search using configured provider + private func performBarcodeSearch(barcode: String) async throws -> OpenFoodFactsProduct? { + let provider = aiService.getProviderForSearchType(.barcodeSearch) + + + switch provider { + case .openFoodFacts: + if let product = try await openFoodFactsService.fetchProduct(barcode: barcode) { + // Create a new product with the correct dataSource + return OpenFoodFactsProduct( + id: product.id, + productName: product.productName, + brands: product.brands, + categories: product.categories, + nutriments: product.nutriments, + servingSize: product.servingSize, + servingQuantity: product.servingQuantity, + imageURL: product.imageURL, + imageFrontURL: product.imageFrontURL, + code: product.code, + dataSource: .barcodeScan + ) + } + return nil + + case .claude, .usdaFoodData, .googleGemini, .openAI: + // These providers don't support barcode search, fall back to OpenFoodFacts + if let product = try await openFoodFactsService.fetchProduct(barcode: barcode) { + // Create a new product with the correct dataSource + return OpenFoodFactsProduct( + id: product.id, + productName: product.productName, + brands: product.brands, + categories: product.categories, + nutriments: product.nutriments, + servingSize: product.servingSize, + servingQuantity: product.servingQuantity, + imageURL: product.imageURL, + imageFrontURL: product.imageFrontURL, + code: product.code, + dataSource: .barcodeScan + ) + } + return nil + case .bringYourOwn: + // BYO is not supported for barcode search; fall back via router + return try await FoodSearchRouter.shared.searchFoodsByBarcode(barcode) + } + } + + /// Search using Google Gemini for text queries + private func searchWithGoogleGemini(query: String) async throws -> [OpenFoodFactsProduct] { + let key = UserDefaults.standard.foodFinder_googleGeminiAPIKey + guard !key.isEmpty else { + print("🔑 Google Gemini API key not configured, falling back to USDA") + let products = try await USDAFoodDataService.shared.searchProducts(query: query, pageSize: 15) + return products.map { product in + OpenFoodFactsProduct( + id: product.id, + productName: product.productName, + brands: product.brands, + categories: product.categories, + nutriments: product.nutriments, + servingSize: product.servingSize, + servingQuantity: product.servingQuantity, + imageURL: product.imageURL, + imageFrontURL: product.imageFrontURL, + code: product.code, + dataSource: .textSearch + ) + } + } + + print("🍱 Using Google Gemini for text-based nutrition search: \(query)") + + do { + // Use the Gemini text-only API for nutrition queries + let result = try await performGeminiTextQuery(query: query, apiKey: key) + + // Convert AI result to OpenFoodFactsProduct + let geminiProduct = OpenFoodFactsProduct( + id: "gemini_text_\(UUID().uuidString.prefix(8))", + productName: result.foodItems.first ?? query.capitalized, + brands: "Google Gemini AI", + categories: nil, + nutriments: Nutriments( + carbohydrates: result.carbohydrates, + proteins: result.protein, + fat: result.fat, + calories: result.calories, + sugars: nil, + fiber: result.totalFiber + ), + servingSize: result.portionSize.isEmpty ? "1 serving" : result.portionSize, + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + + print("✅ Google Gemini text search completed for: \(query) -> carbs: \(result.carbohydrates)g") + + // Create multiple serving size options so user has choices + var products = [geminiProduct] + + // Add variations for common serving sizes if the main result doesn't specify + if !result.portionSize.contains("cup") && !result.portionSize.contains("slice") { + // Create a smaller serving option + let smallProduct = OpenFoodFactsProduct( + id: "gemini_text_small_\(UUID().uuidString.prefix(8))", + productName: "\(result.foodItems.first ?? query.capitalized) (Small)", + brands: "Google Gemini AI", + categories: nil, + nutriments: Nutriments( + carbohydrates: result.carbohydrates * 0.6, + proteins: (result.protein ?? 0) * 0.6, + fat: (result.fat ?? 0) * 0.6, + calories: (result.calories ?? 0) * 0.6, + sugars: nil, + fiber: (result.totalFiber ?? 0) * 0.6 > 0 ? (result.totalFiber ?? 0) * 0.6 : nil + ), + servingSize: "Small \(result.portionSize.isEmpty ? "serving" : result.portionSize.lowercased())", + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + + // Create a larger serving option + let largeProduct = OpenFoodFactsProduct( + id: "gemini_text_large_\(UUID().uuidString.prefix(8))", + productName: "\(result.foodItems.first ?? query.capitalized) (Large)", + brands: "Google Gemini AI", + categories: nil, + nutriments: Nutriments( + carbohydrates: result.carbohydrates * 1.5, + proteins: (result.protein ?? 0) * 1.5, + fat: (result.fat ?? 0) * 1.5, + calories: (result.calories ?? 0) * 1.5, + sugars: nil, + fiber: (result.totalFiber ?? 0) * 1.5 > 0 ? (result.totalFiber ?? 0) * 1.5 : nil + ), + servingSize: "Large \(result.portionSize.isEmpty ? "serving" : result.portionSize.lowercased())", + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + + products = [smallProduct, geminiProduct, largeProduct] + } + + return products + + } catch { + print("❌ Google Gemini text search failed: \(error.localizedDescription), falling back to USDA") + let products = try await USDAFoodDataService.shared.searchProducts(query: query, pageSize: 15) + return products.map { product in + OpenFoodFactsProduct( + id: product.id, + productName: product.productName, + brands: product.brands, + categories: product.categories, + nutriments: product.nutriments, + servingSize: product.servingSize, + servingQuantity: product.servingQuantity, + imageURL: product.imageURL, + imageFrontURL: product.imageFrontURL, + code: product.code, + dataSource: .textSearch + ) + } + } + } + + /// Search using Claude for text queries + private func searchWithClaude(query: String) async throws -> [OpenFoodFactsProduct] { + let key = UserDefaults.standard.foodFinder_claudeAPIKey + guard !key.isEmpty else { + print("🔑 Claude API key not configured, falling back to USDA") + let products = try await USDAFoodDataService.shared.searchProducts(query: query, pageSize: 15) + return products.map { product in + OpenFoodFactsProduct( + id: product.id, + productName: product.productName, + brands: product.brands, + categories: product.categories, + nutriments: product.nutriments, + servingSize: product.servingSize, + servingQuantity: product.servingQuantity, + imageURL: product.imageURL, + imageFrontURL: product.imageFrontURL, + code: product.code, + dataSource: .textSearch + ) + } + } + + print("🧠 Using Claude for text-based nutrition search: \(query)") + + do { + // Use Claude for nutrition queries with a placeholder image + let placeholderImage = createPlaceholderImage() + let nutritionQuery = """ + Provide detailed nutrition information for "\(query)". Return data as JSON: + { + "food_items": ["\(query)"], + "total_carbohydrates": number (grams), + "total_protein": number (grams), + "total_fat": number (grams), + "total_calories": number (calories), + "portion_size": "typical serving size" + } + + Focus on accurate carbohydrate estimation for diabetes management. + """ + + let result = try await ClaudeFoodAnalysisService.shared.analyzeFoodImage( + placeholderImage, + apiKey: key, + query: nutritionQuery + ) + + // Convert Claude result to OpenFoodFactsProduct + let claudeProduct = OpenFoodFactsProduct( + id: "claude_text_\(UUID().uuidString.prefix(8))", + productName: result.foodItems.first ?? query.capitalized, + brands: "Claude AI Analysis", + categories: nil, + nutriments: Nutriments( + carbohydrates: result.totalCarbohydrates, + proteins: result.totalProtein, + fat: result.totalFat, + calories: result.totalCalories, + sugars: nil, + fiber: result.totalFiber + ), + servingSize: result.foodItemsDetailed.first?.portionEstimate ?? "1 serving", + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + + print("✅ Claude text search completed for: \(query) -> carbs: \(result.totalCarbohydrates)g") + + // Create multiple serving size options + var products = [claudeProduct] + + // Add variations for different serving sizes + let smallProduct = OpenFoodFactsProduct( + id: "claude_text_small_\(UUID().uuidString.prefix(8))", + productName: "\(result.foodItems.first ?? query.capitalized) (Small)", + brands: "Claude AI Analysis", + categories: nil, + nutriments: Nutriments( + carbohydrates: result.totalCarbohydrates * 0.6, + proteins: (result.totalProtein ?? 0) * 0.6, + fat: (result.totalFat ?? 0) * 0.6, + calories: (result.totalCalories ?? 0) * 0.6, + sugars: nil, + fiber: (result.totalFiber ?? 0) * 0.6 > 0 ? (result.totalFiber ?? 0) * 0.6 : nil + ), + servingSize: "Small serving", + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + + let largeProduct = OpenFoodFactsProduct( + id: "claude_text_large_\(UUID().uuidString.prefix(8))", + productName: "\(result.foodItems.first ?? query.capitalized) (Large)", + brands: "Claude AI Analysis", + categories: nil, + nutriments: Nutriments( + carbohydrates: result.totalCarbohydrates * 1.5, + proteins: (result.totalProtein ?? 0) * 1.5, + fat: (result.totalFat ?? 0) * 1.5, + calories: (result.totalCalories ?? 0) * 1.5, + sugars: nil, + fiber: (result.totalFiber ?? 0) * 1.5 > 0 ? (result.totalFiber ?? 0) * 1.5 : nil + ), + servingSize: "Large serving", + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + + products = [smallProduct, claudeProduct, largeProduct] + return products + + } catch { + print("❌ Claude text search failed: \(error.localizedDescription), falling back to USDA") + let products = try await USDAFoodDataService.shared.searchProducts(query: query, pageSize: 15) + return products.map { product in + OpenFoodFactsProduct( + id: product.id, + productName: product.productName, + brands: product.brands, + categories: product.categories, + nutriments: product.nutriments, + servingSize: product.servingSize, + servingQuantity: product.servingQuantity, + imageURL: product.imageURL, + imageFrontURL: product.imageFrontURL, + code: product.code, + dataSource: .textSearch + ) + } + } + } + + /// Perform a text-only query to Google Gemini API + private func performGeminiTextQuery(query: String, apiKey: String) async throws -> AIFoodAnalysisResult { + let baseURL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent" + + guard let url = URL(string: "\(baseURL)?key=\(apiKey)") else { + throw AIFoodAnalysisError.invalidResponse + } + + // Create a detailed nutrition query + let nutritionPrompt = """ + Provide accurate nutrition information for "\(query)". Return only a JSON response with this exact format: + { + "food_name": "exact name of the food", + "serving_size": "typical serving size (e.g., '1 medium', '1 cup', '100g')", + "carbohydrates": actual_number_in_grams, + "protein": actual_number_in_grams, + "fat": actual_number_in_grams, + "calories": actual_number_in_calories, + "confidence": 0.9 + } + + Use real nutrition data. For example: + - Orange: ~15g carbs, 1g protein, 0g fat, 65 calories per medium orange + - Apple: ~25g carbs, 0g protein, 0g fat, 95 calories per medium apple + - Banana: ~27g carbs, 1g protein, 0g fat, 105 calories per medium banana + + Be accurate and specific. Do not return 0 values unless the food truly has no macronutrients. + """ + + // Create request payload for text-only query + let payload: [String: Any] = [ + "contents": [ + [ + "parts": [ + [ + "text": nutritionPrompt + ] + ] + ] + ], + "generationConfig": [ + "temperature": 0.1, + "topP": 0.8, + "topK": 40, + "maxOutputTokens": 1024 + ] + ] + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + do { + request.httpBody = try JSONSerialization.data(withJSONObject: payload) + } catch { + throw AIFoodAnalysisError.requestCreationFailed + } + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw AIFoodAnalysisError.invalidResponse + } + + guard httpResponse.statusCode == 200 else { + print("🚨 Gemini API error: \(httpResponse.statusCode)") + if let errorData = String(data: data, encoding: .utf8) { + print("🚨 Error response: \(errorData)") + } + throw AIFoodAnalysisError.apiError(httpResponse.statusCode) + } + + // Parse Gemini response + guard let jsonResponse = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let candidates = jsonResponse["candidates"] as? [[String: Any]], + let firstCandidate = candidates.first, + let content = firstCandidate["content"] as? [String: Any], + let parts = content["parts"] as? [[String: Any]], + let firstPart = parts.first, + let text = firstPart["text"] as? String else { + throw AIFoodAnalysisError.responseParsingFailed + } + + print("🍱 Gemini response: \(text)") + + // Parse the JSON content from Gemini's response + let cleanedText = text.trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "```json", with: "") + .replacingOccurrences(of: "```", with: "") + + guard let jsonData = cleanedText.data(using: .utf8), + let nutritionData = try JSONSerialization.jsonObject(with: jsonData) as? [String: Any] else { + throw AIFoodAnalysisError.responseParsingFailed + } + + // Extract nutrition values + let foodName = nutritionData["food_name"] as? String ?? query.capitalized + let servingSize = nutritionData["serving_size"] as? String ?? "1 serving" + let carbs = nutritionData["carbohydrates"] as? Double ?? 0.0 + let protein = nutritionData["protein"] as? Double ?? 0.0 + let fat = nutritionData["fat"] as? Double ?? 0.0 + let calories = nutritionData["calories"] as? Double ?? 0.0 + let confidence = nutritionData["confidence"] as? Double ?? 0.8 + + let confidenceLevel: AIConfidenceLevel = confidence >= 0.8 ? .high : (confidence >= 0.5 ? .medium : .low) + + // Create food item analysis for the text-based query + let foodItem = FoodItemAnalysis( + name: foodName, + portionEstimate: servingSize, + usdaServingSize: nil, + servingMultiplier: 1.0, + preparationMethod: nil, + visualCues: nil, + carbohydrates: carbs, + calories: calories, + fat: fat, + fiber: nil, + protein: protein, + assessmentNotes: "Text-based nutrition lookup using Google Gemini", + absorptionTimeHours: nil + ) + + return AIFoodAnalysisResult( + imageType: .foodPhoto, // Text search assumes standard food analysis + foodItemsDetailed: [foodItem], + overallDescription: "Text-based nutrition analysis for \(foodName)", + confidence: confidenceLevel, + numericConfidence: confidence, + totalFoodPortions: 1, + totalUsdaServings: 1.0, + totalCarbohydrates: carbs, + totalProtein: protein, + totalFat: fat, + totalFiber: nil, + totalCalories: calories, + portionAssessmentMethod: "Standard serving size estimate based on food name", + diabetesConsiderations: "Values estimated from food name - verify portion size for accurate insulin dosing", + visualAssessmentDetails: nil, + notes: "Google Gemini nutrition analysis from text query", + originalServings: 1.0, + fatProteinUnits: nil, + netCarbsAdjustment: nil, + insulinTimingRecommendations: nil, + fpuDosingGuidance: nil, + exerciseConsiderations: nil, + absorptionTimeHours: nil, + absorptionTimeReasoning: nil, + mealSizeImpact: nil, + individualizationFactors: nil, + safetyAlerts: nil + ) + } + + /// Creates a small placeholder image for text-based Gemini queries + private func createPlaceholderImage() -> UIImage { + let size = CGSize(width: 100, height: 100) + UIGraphicsBeginImageContextWithOptions(size, false, 0) + + // Create a simple gradient background + let context = UIGraphicsGetCurrentContext()! + let colors = [UIColor.systemBlue.cgColor, UIColor.systemGreen.cgColor] + let gradient = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: colors as CFArray, locations: nil)! + + context.drawLinearGradient(gradient, start: CGPoint.zero, end: CGPoint(x: size.width, y: size.height), options: []) + + // Add a food icon in the center + let iconSize: CGFloat = 40 + let iconFrame = CGRect( + x: (size.width - iconSize) / 2, + y: (size.height - iconSize) / 2, + width: iconSize, + height: iconSize + ) + + context.setFillColor(UIColor.white.cgColor) + context.fillEllipse(in: iconFrame) + + let image = UIGraphicsGetImageFromCurrentImageContext() ?? UIImage() + UIGraphicsEndImageContext() + + return image + } + + // MARK: - Food Item Management + + func deleteFoodItem(at index: Int) { + guard var currentResult = lastAIAnalysisResult, + index >= 0 && index < currentResult.foodItemsDetailed.count else { + print("⚠️ Cannot delete food item: invalid index \(index) or no AI analysis result") + return + } + + print("🗑️ Deleting food item at index \(index): \(currentResult.foodItemsDetailed[index].name)") + + // Remove the item from the array (now possible since foodItemsDetailed is var) + currentResult.foodItemsDetailed.remove(at: index) + + // Recalculate totals from remaining items + let newTotalCarbs = currentResult.foodItemsDetailed.reduce(0) { $0 + $1.carbohydrates } + let newTotalProtein = currentResult.foodItemsDetailed.compactMap { $0.protein }.reduce(0, +) + let newTotalFat = currentResult.foodItemsDetailed.compactMap { $0.fat }.reduce(0, +) + let newTotalFiber = currentResult.foodItemsDetailed.compactMap { $0.fiber }.reduce(0, +) + let newTotalCalories = currentResult.foodItemsDetailed.compactMap { $0.calories }.reduce(0, +) + + // Update the totals in the current result + currentResult.totalCarbohydrates = newTotalCarbs + currentResult.totalProtein = newTotalProtein > 0 ? newTotalProtein : nil + currentResult.totalFat = newTotalFat > 0 ? newTotalFat : nil + currentResult.totalFiber = newTotalFiber > 0 ? newTotalFiber : nil + currentResult.totalCalories = newTotalCalories > 0 ? newTotalCalories : nil + + // Recalculate absorption time if advanced dosing is enabled + if UserDefaults.standard.foodFinder_advancedDosingRecommendationsEnabled { + let (newAbsorptionHours, newReasoning) = recalculateAbsorptionTime( + carbs: newTotalCarbs, + protein: newTotalProtein, + fat: newTotalFat, + fiber: newTotalFiber, + calories: newTotalCalories, + remainingItems: currentResult.foodItemsDetailed, + context: "Adjusted after removing an item" + ) + + currentResult.absorptionTimeHours = newAbsorptionHours + currentResult.absorptionTimeReasoning = newReasoning + + // Update the UI absorption time if it was previously AI-generated + if absorptionTimeWasAIGenerated { + let newAbsorptionTimeInterval = TimeInterval(newAbsorptionHours * 3600) + absorptionEditIsProgrammatic = true + absorptionTime = newAbsorptionTimeInterval + + print("🤖 Updated AI absorption time after deletion: \(newAbsorptionHours) hours") + } + } + + // Update the stored result + lastAIAnalysisResult = currentResult + + // Determine food type + let foodNames = currentResult.foodItemsDetailed.map { $0.name } + let foodType: String + if foodNames.count == 1 { + foodType = foodNames[0] + } else if !foodNames.isEmpty { + let joined = foodNames.joined(separator: ", ") + foodType = joined.count > 20 ? String(joined.prefix(19)) + "…" : joined + } else { + foodType = currentResult.overallDescription ?? "AI Analysis" + } + + // Notify host + onNutritionApplied?(FoodFinder_NutritionResult( + carbs: newTotalCarbs, + foodType: foodType, + absorptionTime: absorptionTime, + absorptionTimeWasAIGenerated: absorptionTimeWasAIGenerated + )) + + print("✅ Food item deleted. New total carbs: \(newTotalCarbs)g") + } + + /// Ensures we have an absorption time even if the AI response omitted it. + func ensureAbsorptionTimeForInitialResult(_ result: inout AIFoodAnalysisResult) { + if let hours = result.absorptionTimeHours, hours > 0 { return } + + let carbs = result.totalCarbohydrates + let protein = result.totalProtein ?? result.foodItemsDetailed.compactMap { $0.protein }.reduce(0, +) + let fat = result.totalFat ?? result.foodItemsDetailed.compactMap { $0.fat }.reduce(0, +) + let fiber = result.totalFiber ?? result.foodItemsDetailed.compactMap { $0.fiber }.reduce(0, +) + let calories = result.totalCalories ?? result.foodItemsDetailed.compactMap { $0.calories }.reduce(0, +) + + let (hours, reasoning) = recalculateAbsorptionTime( + carbs: carbs, + protein: protein, + fat: fat, + fiber: fiber, + calories: calories, + remainingItems: result.foodItemsDetailed, + context: "Estimated from meal composition" + ) + + let defaultHours = defaultAbsorptionTimes.medium / 3600 + if abs(hours - defaultHours) < 0.75 { + return + } + + result.absorptionTimeHours = hours + result.absorptionTimeReasoning = reasoning + } + + // MARK: - Absorption Time Recalculation + + /// Recalculates absorption time based on remaining meal composition using AI dosing logic + private func recalculateAbsorptionTime( + carbs: Double, + protein: Double, + fat: Double, + fiber: Double, + calories: Double, + remainingItems: [FoodItemAnalysis], + context: String + ) -> (hours: Double, reasoning: String) { + + // Base absorption time based on carb complexity + let baselineHours: Double = carbs <= 15 ? 2.5 : 3.0 + + // Calculate Fat/Protein Units (FPUs) + let fpuValue = (fat + protein) / 10.0 + let fpuAdjustment: Double + let fpuDescription: String + + if fpuValue < 2.0 { + fpuAdjustment = 1.0 + fpuDescription = "Low FPU (\(String(format: "%.1f", fpuValue))) - minimal extension" + } else if fpuValue < 4.0 { + fpuAdjustment = 2.5 + fpuDescription = "Medium FPU (\(String(format: "%.1f", fpuValue))) - moderate extension" + } else { + fpuAdjustment = 4.0 + fpuDescription = "High FPU (\(String(format: "%.1f", fpuValue))) - significant extension" + } + + // Fiber impact on absorption + let fiberAdjustment: Double + let fiberDescription: String + + if fiber > 8.0 { + fiberAdjustment = 2.0 + fiberDescription = "High fiber (\(String(format: "%.1f", fiber))g) - significantly slows absorption" + } else if fiber > 5.0 { + fiberAdjustment = 1.0 + fiberDescription = "Moderate fiber (\(String(format: "%.1f", fiber))g) - moderately slows absorption" + } else { + fiberAdjustment = 0.0 + fiberDescription = "Low fiber (\(String(format: "%.1f", fiber))g) - minimal impact" + } + + // Meal size impact + let mealSizeAdjustment: Double + let mealSizeDescription: String + + if calories > 800 { + mealSizeAdjustment = 2.0 + mealSizeDescription = "Large meal (\(String(format: "%.0f", calories)) cal) - delayed gastric emptying" + } else if calories > 400 { + mealSizeAdjustment = 1.0 + mealSizeDescription = "Medium meal (\(String(format: "%.0f", calories)) cal) - moderate impact" + } else { + mealSizeAdjustment = 0.0 + mealSizeDescription = "Small meal (\(String(format: "%.0f", calories)) cal) - minimal impact" + } + + // Calculate total absorption time (capped at reasonable limits) + let totalHours = min(max(baselineHours + fpuAdjustment + fiberAdjustment + mealSizeAdjustment, 2.0), 8.0) + + // Generate detailed reasoning + let reasoning = "\(context): " + + "BASELINE: \(String(format: "%.1f", baselineHours)) hours for \(String(format: "%.1f", carbs))g carbs. " + + "FPU IMPACT: \(fpuDescription) (+\(String(format: "%.1f", fpuAdjustment)) hours). " + + "FIBER EFFECT: \(fiberDescription) (+\(String(format: "%.1f", fiberAdjustment)) hours). " + + "MEAL SIZE: \(mealSizeDescription) (+\(String(format: "%.1f", mealSizeAdjustment)) hours). " + + "TOTAL: \(String(format: "%.1f", totalHours)) hours for remaining meal composition." + + return (totalHours, reasoning) + } +} diff --git a/Loop/Views/CarbEntryView.swift b/Loop/Views/CarbEntryView.swift index 5831836fd6..4dfa3f8211 100644 --- a/Loop/Views/CarbEntryView.swift +++ b/Loop/Views/CarbEntryView.swift @@ -72,7 +72,18 @@ struct CarbEntryView: View, HorizontalSizeClassOverride { .padding(.top, 8) continueActionButton - + + // FoodFinder integration — single insertion point + if isNewEntry, FoodFinder_FeatureFlags.isEnabled { + FoodFinder_EntryPoint( + carbsQuantity: $viewModel.carbsQuantity, + foodType: $viewModel.foodType, + absorptionTime: $viewModel.absorptionTime, + absorptionTimeWasEdited: viewModel.absorptionTimeWasEdited, + defaultAbsorptionTimes: viewModel.defaultAbsorptionTimes + ) + } + if isNewEntry, FeatureFlags.allowExperimentalFeatures { favoriteFoodsCard } diff --git a/Loop/Views/FavoriteFoodDetailView.swift b/Loop/Views/FavoriteFoodDetailView.swift index 8c76e1fe8f..8401ecf7c6 100644 --- a/Loop/Views/FavoriteFoodDetailView.swift +++ b/Loop/Views/FavoriteFoodDetailView.swift @@ -32,6 +32,11 @@ public struct FavoriteFoodDetailView: View { public var body: some View { if let food { List { + // FoodFinder integration — thumbnail display + if FoodFinder_FeatureFlags.isEnabled { + FoodFinder_FavoriteThumbnail(food: food) + } + Section("Information") { VStack(spacing: 16) { let rows: [(field: String, value: String)] = [ diff --git a/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift b/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift new file mode 100644 index 0000000000..71fb8dfaac --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift @@ -0,0 +1,610 @@ +// +// AICameraView.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for AI Food Analysis Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import UIKit + +/// Camera view for AI-powered food analysis +struct AICameraView: View { + let onFoodAnalyzed: (AIFoodAnalysisResult, UIImage?) -> Void + let onCancel: () -> Void + + @State private var capturedImage: UIImage? + @State private var showingImagePicker = false + @State private var isAnalyzing = false + @State private var analysisError: String? + @State private var showingErrorAlert = false + @State private var imageSourceType: UIImagePickerController.SourceType = .camera + @State private var telemetryLogs: [String] = [] + @State private var showTelemetry = false + @State private var showingTips = false + + var body: some View { + NavigationView { + ZStack { + // Auto-launch camera interface + if capturedImage == nil { + VStack(spacing: 20) { + Spacer() + + // Simple launch message + VStack(spacing: 16) { + Image(systemName: "camera.viewfinder") + .font(.system(size: 64)) + .foregroundColor(.accentColor) + + VStack(alignment: .leading, spacing: 6) { + Text("Better photos = better estimates") + .font(.subheadline) + .fontWeight(.medium) + Spacer() + VStack(alignment: .leading, spacing: 8) { + CameraTipRow(icon: "sun.max.fill", title: "Use bright, even light", detail: "Harsh shadows confuse the AI and dim light can hide textures.") + CameraTipRow(icon: "arrow.2.circlepath", title: "Clear the area", detail: "Remove napkins, lids, or packaging that may be misidentified as food.") + CameraTipRow(icon: "square.dashed", title: "Frame the full meal", detail: "Make sure every food item is in the frame.") + CameraTipRow(icon: "ruler", title: "Add a size reference", detail: "Forks, cups, or hands help AI calculate realistic portions.") + CameraTipRow(icon: "camera.metering.spot", title: "Shoot from slightly above", detail: "Keep the camera level to reduce distortion and keep portions proportional.") + } + } + .padding() + .background(Color(.systemGray6)) + .clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous)) + } + + Spacer() + + // Quick action buttons + VStack(spacing: 12) { + Button(action: { + imageSourceType = .camera + showingImagePicker = true + }) { + HStack { + Image(systemName: "sparkles") + .font(.system(size: 14)) + Text("Take a Photo") + } + .frame(maxWidth: .infinity) + .padding() + .background(Color.purple) + .foregroundColor(.white) + .cornerRadius(12) + } + + Button(action: { + // Allow selecting from photo library + imageSourceType = .photoLibrary + showingImagePicker = true + }) { + HStack { + Image(systemName: "photo.fill") + Text("Choose from Library") + } + .frame(maxWidth: .infinity) + .padding() + .background(Color.secondary.opacity(0.1)) + .foregroundColor(.primary) + .cornerRadius(12) + } + } + .padding(.horizontal) + .padding(.bottom, 30) + } + + } else { + // Show captured image and auto-start analysis + VStack(spacing: 20) { + // Captured image + Image(uiImage: capturedImage!) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxHeight: 300) + .cornerRadius(12) + .padding(.horizontal) + + // Analysis in progress (auto-started) + VStack(spacing: 16) { + ProgressView() + .scaleEffect(1.2) + + Text("Analyzing food with AI...") + .font(.body) + .foregroundColor(.secondary) + + Text("Use Cancel to retake photo") + .font(.caption) + .foregroundColor(.secondary) + + // Telemetry window + if showTelemetry && !telemetryLogs.isEmpty { + TelemetryWindow(logs: telemetryLogs) + .transition(.opacity.combined(with: .scale)) + } + } + .padding() + + Spacer() + } + .padding(.top) + .onAppear { + // Auto-start analysis when image appears + if !isAnalyzing && analysisError == nil { + analyzeImage() + } + } + } + } + .navigationTitle("AI Food Analysis") + .navigationBarTitleDisplayMode(.inline) + .navigationBarBackButtonHidden(true) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button("Cancel") { + onCancel() + } + } + } + } + .navigationViewStyle(StackNavigationViewStyle()) + .sheet(isPresented: $showingImagePicker) { + ImagePicker(image: $capturedImage, sourceType: $imageSourceType) + } + .alert("Analysis Error", isPresented: $showingErrorAlert) { + // Credit/quota exhaustion errors - provide direct guidance + if analysisError?.contains("credits exhausted") == true || analysisError?.contains("quota exceeded") == true { + Button("Check Account") { + // This could open settings or provider website in future enhancement + analysisError = nil + } + Button("Try Different Provider") { + ConfigurableAIService.shared.resetToDefault() + analysisError = nil + analyzeImage() + } + Button("Retake Photo") { + capturedImage = nil + analysisError = nil + } + Button("Cancel", role: .cancel) { + analysisError = nil + } + } + // Rate limit errors - suggest waiting + else if analysisError?.contains("rate limit") == true { + Button("Wait and Retry") { + Task { + try? await Task.sleep(nanoseconds: 3_000_000_000) // 3 seconds + analyzeImage() + } + } + Button("Try Different Provider") { + ConfigurableAIService.shared.resetToDefault() + analysisError = nil + analyzeImage() + } + Button("Retake Photo") { + capturedImage = nil + analysisError = nil + } + Button("Cancel", role: .cancel) { + analysisError = nil + } + } + // General errors - provide standard options + else { + Button("Retry Analysis") { + analyzeImage() + } + Button("Retake Photo") { + capturedImage = nil + analysisError = nil + } + if analysisError?.contains("404") == true || analysisError?.contains("service error") == true { + Button("Reset to Default") { + ConfigurableAIService.shared.resetToDefault() + analysisError = nil + analyzeImage() + } + } + Button("Cancel", role: .cancel) { + analysisError = nil + } + } + } message: { + if analysisError?.contains("credits exhausted") == true { + Text("Your AI provider has run out of credits. Please check your account billing or try a different provider.") + } else if analysisError?.contains("quota exceeded") == true { + Text("Your AI provider quota has been exceeded. Please check your usage limits or try a different provider.") + } else if analysisError?.contains("rate limit") == true { + Text("Too many requests sent to your AI provider. Please wait a moment before trying again.") + } else { + Text(analysisError ?? "Unknown error occurred") + } + } + } + + private func analyzeImage() { + guard let image = capturedImage else { return } + + // Check if AI service is configured + let aiService = ConfigurableAIService.shared + guard aiService.isConfigured else { + analysisError = "AI service not configured. Please check settings." + showingErrorAlert = true + return + } + + isAnalyzing = true + analysisError = nil + telemetryLogs = [] + showTelemetry = true + + // Start telemetry logging with progressive steps + addTelemetryLog("🔍 Initializing AI food analysis...") + + Task { + do { + // Step 1: Image preparation + await MainActor.run { + addTelemetryLog("📱 Processing image data...") + } + try await Task.sleep(nanoseconds: 300_000_000) // 0.3 seconds + + await MainActor.run { + addTelemetryLog("💼 Optimizing image quality...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + // Step 2: AI connection + await MainActor.run { + addTelemetryLog("🧠 Connecting to AI provider...") + } + try await Task.sleep(nanoseconds: 300_000_000) // 0.3 seconds + + await MainActor.run { + addTelemetryLog("📡 Uploading image for analysis...") + } + try await Task.sleep(nanoseconds: 250_000_000) // 0.25 seconds + + // Step 3: Analysis stages + await MainActor.run { + addTelemetryLog("📊 Analyzing nutritional content...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + await MainActor.run { + addTelemetryLog("🔬 Identifying food portions...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + await MainActor.run { + addTelemetryLog("📏 Calculating serving sizes...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + await MainActor.run { + addTelemetryLog("⚖️ Comparing to USDA standards...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + // Step 4: AI processing (actual call) + await MainActor.run { + addTelemetryLog("🤖 Running AI vision analysis...") + } + + let result = try await aiService.analyzeFoodImage(image) { telemetryMessage in + Task { @MainActor in + addTelemetryLog(telemetryMessage) + } + } + + // Step 5: Results processing + await MainActor.run { + addTelemetryLog("📊 Processing analysis results...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + await MainActor.run { + addTelemetryLog("🍽️ Generating nutrition summary...") + } + try await Task.sleep(nanoseconds: 200_000_000) // 0.2 seconds + + await MainActor.run { + addTelemetryLog("✅ Analysis complete!") + + // Hide telemetry after a brief moment + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { + showTelemetry = false + isAnalyzing = false + onFoodAnalyzed(result, capturedImage) + } + } + } catch { + await MainActor.run { + addTelemetryLog("⚠️ Connection interrupted...") + } + try? await Task.sleep(nanoseconds: 300_000_000) // 0.3 seconds + + await MainActor.run { + addTelemetryLog("❌ Analysis failed") + + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { + showTelemetry = false + isAnalyzing = false + analysisError = error.localizedDescription + showingErrorAlert = true + } + } + } + } + } + + private func addTelemetryLog(_ message: String) { + telemetryLogs.append(message) + + // Keep only the last 10 messages to prevent overflow + if telemetryLogs.count > 10 { + telemetryLogs.removeFirst() + } + } +} + +private struct CameraTipRow: View { + let icon: String + let title: String + let detail: String + + var body: some View { + HStack(alignment: .top, spacing: 12) { + Image(systemName: icon) + .foregroundColor(.orange) + .font(.system(size: 20, weight: .semibold)) + VStack(alignment: .leading, spacing: 4) { + Text(title) + .font(.subheadline) + .fontWeight(.semibold) + Text(detail) + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.leading) + .fixedSize(horizontal: false, vertical: true) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + } +} + +// MARK: - Image Picker + +struct ImagePicker: UIViewControllerRepresentable { + @Binding var image: UIImage? + @Binding var sourceType: UIImagePickerController.SourceType + @Environment(\.presentationMode) var presentationMode + + func makeUIViewController(context: Context) -> UIImagePickerController { + let picker = UIImagePickerController() + picker.delegate = context.coordinator + applyBaseAppearance(to: picker) + configurePicker(picker, for: sourceType) + return picker + } + + private func applyBaseAppearance(to picker: UIImagePickerController) { + if let navigationBar = picker.navigationBar as UINavigationBar? { + navigationBar.tintColor = UIColor.systemBlue + navigationBar.titleTextAttributes = [ + .foregroundColor: UIColor.systemBlue, + .font: UIFont.boldSystemFont(ofSize: 17) + ] + } + + picker.navigationBar.tintColor = UIColor.systemBlue + picker.view.tintColor = UIColor.systemBlue + picker.toolbar?.tintColor = UIColor.systemBlue + picker.toolbar?.barTintColor = UIColor.systemBlue.withAlphaComponent(0.1) + + UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = UIColor.systemBlue + UIButton.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = UIColor.systemBlue + UILabel.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = UIColor.systemBlue + UIToolbar.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = UIColor.systemBlue + UIToolbar.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).barTintColor = UIColor.systemBlue.withAlphaComponent(0.1) + + setupCameraButtonStyling(picker) + } + + private func configurePicker(_ picker: UIImagePickerController, for desiredType: UIImagePickerController.SourceType) { + guard UIImagePickerController.isSourceTypeAvailable(desiredType) else { + return + } + + let wasCamera = picker.sourceType == .camera + + // When leaving camera mode, clear overlays before we switch types (camera only API) + if wasCamera && desiredType != .camera { + picker.cameraOverlayView = nil + } + + if picker.sourceType != desiredType { + picker.sourceType = desiredType + } + + picker.allowsEditing = false + + if desiredType == .camera { + picker.cameraOverlayView = nil + setupCameraButtonStyling(picker) + } + } + + private func setupCameraButtonStyling(_ picker: UIImagePickerController) { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { + self.applyBasicBlueStyling(to: picker.view) + } + } + + private func applyBasicBlueStyling(to view: UIView) { + for subview in view.subviews { + if let toolbar = subview as? UIToolbar { + toolbar.tintColor = UIColor.systemBlue + toolbar.barTintColor = UIColor.systemBlue.withAlphaComponent(0.1) + toolbar.items?.forEach { item in + item.tintColor = UIColor.systemBlue + } + } + + if let navBar = subview as? UINavigationBar { + navBar.tintColor = UIColor.systemBlue + navBar.titleTextAttributes = [.foregroundColor: UIColor.systemBlue] + } + + applyBasicBlueStyling(to: subview) + } + } + + func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) { + configurePicker(uiViewController, for: sourceType) + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.applyBasicBlueStyling(to: uiViewController.view) + } + } + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { + let parent: ImagePicker + + init(_ parent: ImagePicker) { + self.parent = parent + } + + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { + if let uiImage = info[.editedImage] as? UIImage { + parent.image = uiImage + } else if let uiImage = info[.originalImage] as? UIImage { + parent.image = uiImage + } + parent.presentationMode.wrappedValue.dismiss() + } + + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + parent.presentationMode.wrappedValue.dismiss() + } + } +} + +// MARK: - Telemetry Window + +struct TelemetryWindow: View { + let logs: [String] + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + // Header + HStack { + Spacer() + Image(systemName: "antenna.radiowaves.left.and.right") + .foregroundColor(.green) + .font(.caption2) + Text("Analysis Status") + .font(.caption2) + .fontWeight(.medium) + .foregroundColor(.secondary) + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(Color(.systemGray6)) + + // Scrolling logs + ScrollView { + ScrollViewReader { proxy in + LazyVStack(alignment: .leading, spacing: 4) { + ForEach(Array(logs.enumerated()), id: \.offset) { index, log in + HStack { + Text(log) + .font(.system(.caption2, design: .monospaced)) + .foregroundColor(.primary) + .multilineTextAlignment(.leading) + Spacer() + } + .padding(.horizontal, 12) + .padding(.vertical, 2) + .id(index) + } + + // Add bottom padding to prevent cutoff + Color.clear + .frame(height: 56) + } + .onAppear { + // Auto-scroll to latest log + if !logs.isEmpty { + withAnimation(.easeInOut(duration: 0.3)) { + proxy.scrollTo(logs.count - 1, anchor: .bottom) + } + } + } + .onChange(of: logs.count) { _ in + // Auto-scroll to latest log when new ones are added + if !logs.isEmpty { + withAnimation(.easeInOut(duration: 0.3)) { + proxy.scrollTo(logs.count - 1, anchor: .bottom) + } + } + } + } + } + .padding(.bottom, 14) + .frame(height: 320) + .background(Color(.systemBackground)) + } + .background(Color(.systemGray6)) + .cornerRadius(12) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(Color(.systemGray4), lineWidth: 1) + ) + .padding(.top, 8) + } +} + +// MARK: - Preview + +#if DEBUG +struct AICameraView_Previews: PreviewProvider { + static var previews: some View { + AICameraView( + onFoodAnalyzed: { result, image in + print("Food analyzed: \(result)") + }, + onCancel: { + print("Cancelled") + } + ) + } +} + +struct TelemetryWindow_Previews: PreviewProvider { + static var previews: some View { + VStack { + TelemetryWindow(logs: [ + "🔍 Initializing AI food analysis...", + "📱 Processing image data...", + "🧠 Connecting to AI provider...", + "📊 Analyzing nutritional content...", + "✅ Analysis complete!" + ]) + Spacer() + } + .padding() + .background(Color(.systemGroupedBackground)) + } +} +#endif diff --git a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift new file mode 100644 index 0000000000..e8599fab91 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift @@ -0,0 +1,1987 @@ +// +// FoodFinder_EntryPoint.swift +// Loop +// +// The single integration view that encapsulates ALL FoodFinder UI. +// CarbEntryView embeds this with ~5 lines instead of 1000+ lines inline. +// +// Extracted from CarbEntryView.swift — faithful, complete copy of every +// FoodFinder section, helper struct, and computation function. +// +// Created by Taylor Patterson. Coded by Claude Code. +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKit +import LoopKitUI +import HealthKit +import UIKit +import os.log + +// MARK: - FoodFinder Entry Point + +struct FoodFinder_EntryPoint: View { + + // MARK: - Host Bindings + + /// Carbs quantity in the host's CarbEntryViewModel + @Binding var carbsQuantity: Double? + + /// Food type string in the host + @Binding var foodType: String + + /// Absorption time in the host + @Binding var absorptionTime: TimeInterval + + /// Whether the host's absorption time was manually edited + var absorptionTimeWasEdited: Bool + + /// Default absorption times from CarbStore + var defaultAbsorptionTimes: CarbStore.DefaultAbsorptionTimes + + /// Optional callback when the user saves a favorite food + var onFavoriteFoodSave: ((NewFavoriteFood) -> Void)? + + /// Optional binding so the host can observe the currently selected product + var selectedFoodProduct: Binding? + + // MARK: - Internal State + + @StateObject private var searchVM: FoodFinder_SearchViewModel + + @State private var showingAICamera = false + @State private var showingAISettings = false + @State private var isFoodSearchEnabled: Bool + @State private var showAbsorptionReasoning = false + @State private var isAdvancedAnalysisExpanded = false + @State private var expandedRow: Row? + + /// Favorite foods loaded from UserDefaults for quick-favorite toggling. + /// Kept lightweight — only names are needed for the heart-button check. + @State private var favoriteFoods: [StoredFavoriteFood] = [] + + enum Row: Hashable { + case detailedFoodBreakdown, advancedAnalysis + } + + // MARK: - Preferred Carb Unit (for favorite food save) + + private let preferredCarbUnit: HKUnit + + // MARK: - Init + + init( + carbsQuantity: Binding, + foodType: Binding, + absorptionTime: Binding, + absorptionTimeWasEdited: Bool, + defaultAbsorptionTimes: CarbStore.DefaultAbsorptionTimes, + preferredCarbUnit: HKUnit = .gram(), + onFavoriteFoodSave: ((NewFavoriteFood) -> Void)? = nil, + selectedFoodProduct: Binding? = nil + ) { + self._carbsQuantity = carbsQuantity + self._foodType = foodType + self._absorptionTime = absorptionTime + self.absorptionTimeWasEdited = absorptionTimeWasEdited + self.defaultAbsorptionTimes = defaultAbsorptionTimes + self.preferredCarbUnit = preferredCarbUnit + self.onFavoriteFoodSave = onFavoriteFoodSave + self.selectedFoodProduct = selectedFoodProduct + + let initialEnabled = UserDefaults.standard.foodFinderEnabled + self._isFoodSearchEnabled = State(initialValue: initialEnabled) + + self._searchVM = StateObject(wrappedValue: FoodFinder_SearchViewModel( + defaultAbsorptionTimes: defaultAbsorptionTimes, + initialAbsorptionTime: absorptionTime.wrappedValue + )) + } + + // MARK: - Body + + var body: some View { + VStack(spacing: 10) { + // Food search section (search bar, results, settings gear) + if isFoodSearchEnabled { + CardSectionDivider() + + foodSearchSection + + CardSectionDivider() + } + + // Servings + product info + nutrition circles + AI notes + if isFoodSearchEnabled { + ServingsDisplayRow( + servings: $searchVM.numberOfServings, + servingSize: searchVM.selectedFoodServingSize, + selectedFoodProduct: searchVM.selectedFoodProduct + ) + .id("servings-\(searchVM.selectedFoodServingSize ?? "none")") + .onChange(of: searchVM.numberOfServings) { newServings in + if let selectedFood = searchVM.selectedFoodProduct { + let expectedCarbs = (selectedFood.carbsPerServing ?? selectedFood.nutriments.carbohydrates) * newServings + if abs((carbsQuantity ?? 0) - expectedCarbs) > 0.01 { + carbsQuantity = expectedCarbs + } + } + } + + // Product info card + nutrition circles + AI notes + if let selectedFood = searchVM.selectedFoodProduct { + productInfoCard(selectedFood: selectedFood) + nutritionCirclesSection(selectedFood: selectedFood) + + // AI analysis notes + if let aiResult = searchVM.lastAIAnalysisResult { + aiAnalysisNotesSection(aiResult: aiResult) + } + } + } + + // Absorption time reasoning (AI) + if let reasoning = searchVM.lastAIAnalysisResult?.absorptionTimeReasoning?.trimmingCharacters(in: .whitespacesAndNewlines), + !reasoning.isEmpty, + searchVM.absorptionTimeWasAIGenerated { + let hoursString = String(format: "%.1f", absorptionTime / 3600) + DisclosureGroup(isExpanded: $showAbsorptionReasoning) { + Text(reasoning) + .font(.caption) + .foregroundColor(.primary) + .padding(.top, 4) + .frame(maxWidth: .infinity, alignment: .leading) + } label: { + HStack(spacing: 6) { + Image(systemName: "hourglass.bottomhalf.fill") + .foregroundColor(.indigo) + Text("Why \(hoursString) hours?") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.indigo) + } + } + .padding(8) + .background(Color(.systemIndigo).opacity(0.08)) + .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous)) + } + + // Food Search enable row (only when disabled) + if !isFoodSearchEnabled { + CardSectionDivider() + + FoodSearchEnableRow(isFoodSearchEnabled: $isFoodSearchEnabled) + .padding(.bottom, 2) + } + } + .onAppear { + isFoodSearchEnabled = UserDefaults.standard.foodFinderEnabled + loadFavoriteFoods() + wireSearchVMCallbacks() + searchVM.setupObservers() + } + .onReceive(NotificationCenter.default.publisher(for: UserDefaults.didChangeNotification)) { _ in + let currentSetting = UserDefaults.standard.foodFinderEnabled + if currentSetting != isFoodSearchEnabled { + isFoodSearchEnabled = currentSetting + } + } + .sheet(isPresented: $showingAICamera) { + AICameraView( + onFoodAnalyzed: { result, capturedImage in + Task { @MainActor in + handleAIFoodAnalysis(result) + searchVM.capturedAIImage = capturedImage + showingAICamera = false + } + }, + onCancel: { + showingAICamera = false + } + ) + } + .sheet(isPresented: $showingAISettings) { + AISettingsView() + } + } + + // MARK: - Wire ViewModel Callbacks + + private func wireSearchVMCallbacks() { + searchVM.onNutritionApplied = { result in + carbsQuantity = result.carbs + foodType = result.foodType + absorptionTime = result.absorptionTime + // Mirror selected product to host if binding provided + selectedFoodProduct?.wrappedValue = searchVM.selectedFoodProduct + } + searchVM.onFoodCleared = { + selectedFoodProduct?.wrappedValue = nil + } + } + + // MARK: - Load Favorite Foods + + private func loadFavoriteFoods() { + if let data = UserDefaults.standard.data(forKey: "com.loopkit.Loop.favoriteFoods"), + let foods = try? JSONDecoder().decode([StoredFavoriteFood].self, from: data) { + favoriteFoods = foods + } + } +} + +// MARK: - Food Search Section + +extension FoodFinder_EntryPoint { + + private var foodSearchSection: some View { + VStack(spacing: 16) { + // Section header + HStack { + Text("Search for Food") + .font(.headline) + .foregroundColor(.primary) + + Spacer() + + // AI Settings button + Button(action: { + showingAISettings = true + }) { + Image(systemName: "gear") + .foregroundColor(.secondary) + .font(.system(size: 24)) + } + .accessibilityLabel("AI Settings") + } + + // Search bar with barcode and AI camera buttons + FoodSearchBar( + searchText: $searchVM.foodSearchText, + onBarcodeScanTapped: { + // Barcode scanning is handled by FoodSearchBar's sheet presentation + }, + onAICameraTapped: { + showingAICamera = true + } + ) + + // Search results + if searchVM.isFoodSearching || searchVM.showingFoodSearch || !searchVM.foodSearchResults.isEmpty { + FoodSearchResultsView( + searchResults: searchVM.foodSearchResults, + isSearching: searchVM.isFoodSearching, + errorMessage: searchVM.foodSearchError, + onProductSelected: { product in + searchVM.selectFoodProduct(product) + } + ) + } + } + .onAppear { + searchVM.setupFoodSearchObservers() + } + } +} + +// MARK: - Product Info Card + +extension FoodFinder_EntryPoint { + + @ViewBuilder + private func productInfoCard(selectedFood: OpenFoodFactsProduct) -> some View { + VStack(spacing: 12) { + // Product image at the top (works for both barcode and AI scanned images) + if let capturedImage = searchVM.capturedAIImage { + // Show AI captured image + Image(uiImage: capturedImage) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 120, height: 90) + .clipped() + .cornerRadius(12) + } else if let imageURL = selectedFood.imageFrontURL ?? selectedFood.imageURL, !imageURL.isEmpty { + // Show barcode product image from URL + AsyncImage(url: URL(string: imageURL)) { image in + image + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: 120, height: 90) + .clipped() + .cornerRadius(12) + } placeholder: { + RoundedRectangle(cornerRadius: 12) + .fill(Color(.systemGray6)) + .frame(width: 120, height: 90) + .overlay( + VStack(spacing: 4) { + ProgressView() + .scaleEffect(0.8) + Text("Loading...") + .font(.caption2) + .foregroundColor(.secondary) + } + ) + } + } + + // Product name with favorite heart (centered as a unit) + ZStack { + // Centered content + HStack(spacing: 8) { + Text(shortenedTitle(selectedFood.displayName)) + .font(.headline) + .fontWeight(.medium) + .foregroundColor(.primary) + .lineLimit(1) + .truncationMode(.tail) + Button(action: { toggleQuickFavorite(for: selectedFood) }) { + Image(systemName: isQuickFavorited(selectedFood) ? "heart.fill" : "heart") + .foregroundColor(isQuickFavorited(selectedFood) ? .red : Color(UIColor.tertiaryLabel)) + } + .buttonStyle(.plain) + } + .frame(maxWidth: .infinity, alignment: .center) + + // Invisible spacers to balance left/right so ZStack centers correctly + HStack { + Color.clear.frame(width: 1) + Spacer() + Color.clear.frame(width: 1) + } + } + + // Package serving size (only show "Package Serving Size:" prefix for barcode scans) + Text(selectedFood.dataSource == .barcodeScan ? "Package Serving Size: \(selectedFood.servingSizeDisplay)" : selectedFood.servingSizeDisplay) + .font(.subheadline) + .foregroundColor(.primary) + } + .padding(.vertical, 16) + .padding(.horizontal, 8) + .background(Color(.systemGray6)) + .cornerRadius(12) + .padding(.horizontal) + .padding(.top, 8) + } +} + +// MARK: - Nutrition Circles Section + +extension FoodFinder_EntryPoint { + + @ViewBuilder + private func nutritionCirclesSection(selectedFood: OpenFoodFactsProduct) -> some View { + VStack(spacing: 8) { + // Horizontal scrollable nutrition indicators + HStack(alignment: .center) { + Spacer() + HStack(alignment: .center, spacing: 12) { + let aiResult = searchVM.lastAIAnalysisResult + + let valuesTuple = computeDisplayedMacros( + selectedFood: selectedFood, + aiResult: aiResult, + numberOfServings: searchVM.numberOfServings, + excluded: searchVM.excludedAIItemIndices + ) + let carbsValue = valuesTuple.carbs + let caloriesValue = valuesTuple.calories + let fatValue = valuesTuple.fat + let fiberValue = valuesTuple.fiber + let proteinValue = valuesTuple.protein + + let fallbackCalories = (proteinValue ?? 0) * 4 + (fatValue ?? 0) * 9 + carbsValue * 4 + let caloriesForTargets: Double? = { + if let caloriesValue, caloriesValue > 0 { + return caloriesValue + } + return fallbackCalories > 0 ? fallbackCalories : nil + }() + let balancedTargets = computeBalancedTargets( + carbs: carbsValue, + protein: proteinValue, + fat: fatValue, + calories: caloriesForTargets + ) + + let carbTarget = max(balancedTargets?.carbs ?? max(carbsValue, 1), 1) + + // Carbohydrates (first) + NutritionCircle( + value: carbsValue, + unit: "g", + label: "Carbs", + color: Color(red: 0.4, green: 0.7, blue: 1.0), + maxValue: carbTarget + ) + + // Calories (second) + let caloriesAmount = caloriesValue ?? balancedTargets?.calories ?? 0 + if caloriesAmount > 0 { + let calorieTarget = max(balancedTargets?.calories ?? max(caloriesAmount, 1), 1) + NutritionCircle( + value: caloriesAmount, + unit: "cal", + label: "Calories", + color: Color(red: 0.5, green: 0.8, blue: 0.4), + maxValue: calorieTarget + ) + } + + // Fat (third) + if let fatTarget = balancedTargets?.fat, fatTarget > 0 { + let fatAmount = max(fatValue ?? 0, 0) + NutritionCircle( + value: fatAmount, + unit: "g", + label: "Fat", + color: Color(red: 1.0, green: 0.8, blue: 0.2), + maxValue: max(fatTarget, 1) + ) + } else if let fat = fatValue, fat > 0 { + NutritionCircle( + value: fat, + unit: "g", + label: "Fat", + color: Color(red: 1.0, green: 0.8, blue: 0.2), + maxValue: 20.0 + ) + } + + // Fiber (fourth) + if let fiberTarget = balancedTargets?.fiber, fiberTarget > 0 { + let fiberAmount = max(fiberValue ?? 0, 0) + NutritionCircle( + value: fiberAmount, + unit: "g", + label: "Fiber", + color: Color(red: 0.6, green: 0.4, blue: 0.8), + maxValue: max(fiberTarget, 1) + ) + } else if let fiber = fiberValue, fiber > 0 { + NutritionCircle( + value: fiber, + unit: "g", + label: "Fiber", + color: Color(red: 0.6, green: 0.4, blue: 0.8), + maxValue: 10.0 + ) + } + + // Protein (fifth) + if let proteinTarget = balancedTargets?.protein, proteinTarget > 0 { + let proteinAmount = max(proteinValue ?? 0, 0) + NutritionCircle( + value: proteinAmount, + unit: "g", + label: "Protein", + color: Color(red: 1.0, green: 0.4, blue: 0.4), + maxValue: max(proteinTarget, 1) + ) + } else if let protein = proteinValue, protein > 0 { + NutritionCircle( + value: protein, + unit: "g", + label: "Protein", + color: Color(red: 1.0, green: 0.4, blue: 0.4), + maxValue: 30.0 + ) + } + } + Spacer() + } + .frame(height: 90) + .id("nutrition-circles-\(searchVM.numberOfServings)") + + // Confidence line (AI only) + Group { + if let ai = searchVM.lastAIAnalysisResult { + let pct = computeConfidencePercent(from: ai, servings: searchVM.numberOfServings) + HStack(spacing: 6) { + Text("Confidence:") + .font(.caption) + .foregroundStyle(.secondary) + Text("\(pct)%") + .font(.caption) + .fontWeight(.semibold) + .padding(.horizontal, 8) + .padding(.vertical, 2) + .background(confidenceBadgeColor(pct)) + .foregroundColor(confidenceColor(pct)) + .clipShape(Capsule()) + } + .padding(.top, 2) + } + } + } + .padding(.vertical, 8) + .padding(.horizontal, 8) + .background(Color(.systemGray6)) + .cornerRadius(12) + .padding(.horizontal, 4) + .padding(.top, 8) + } +} + +// MARK: - AI Analysis Notes Section + +extension FoodFinder_EntryPoint { + + @ViewBuilder + private func aiAnalysisNotesSection(aiResult: AIFoodAnalysisResult) -> some View { + VStack(spacing: 8) { + // Detailed Food Breakdown (expandable) + if !aiResult.foodItemsDetailed.isEmpty { + detailedFoodBreakdownSection(aiResult: aiResult) + } + + // Portion estimation method (expandable) + let trimmedPortion = aiResult.portionAssessmentMethod?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + let portionSummary = trimmedPortion.isEmpty ? fallbackPortionSummary(aiResult: aiResult) : trimmedPortion + if !portionSummary.isEmpty { + let pct = computeConfidencePercent(from: aiResult, servings: searchVM.numberOfServings) + let confidenceLine = pct < 60 ? "Confidence: \(pct)% -- treat as estimate" : "Confidence: \(pct)%" + let noteContent = portionSummary + "\n\n" + confidenceLine + ExpandableNoteView( + icon: "ruler", + iconColor: .blue, + title: "Portions & Servings:", + content: noteContent, + backgroundColor: Color(.systemBlue).opacity(0.08) + ) + } + + // Diabetes considerations (expandable) + if let diabetesNotes = aiResult.diabetesConsiderations, !diabetesNotes.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + ExpandableNoteView( + icon: "drop.fill", + iconColor: .red, + title: "Diabetes Note:", + content: diabetesNotes, + backgroundColor: Color(.systemRed).opacity(0.08) + ) + } + + // Advanced dosing information (conditional on settings) + if UserDefaults.standard.foodFinder_advancedDosingRecommendationsEnabled { + advancedAnalysisSection(aiResult: aiResult) + } + } + .padding(.horizontal, 8) + .padding(.vertical, 8) + } +} + +// MARK: - Detailed Food Breakdown + +extension FoodFinder_EntryPoint { + + @ViewBuilder + private func detailedFoodBreakdownSection(aiResult: AIFoodAnalysisResult) -> some View { + VStack(spacing: 0) { + // Expandable header + HStack { + Image(systemName: "list.bullet.rectangle.fill") + .foregroundColor(.orange) + .font(.system(size: 16, weight: .medium)) + + Text("Food Details") + .font(.caption) + .foregroundColor(.secondary) + + Spacer() + + let excludedCount = searchVM.excludedAIItemIndices.count + let includedCount = max(0, aiResult.foodItemsDetailed.count - excludedCount) + Text("(\(includedCount) of \(aiResult.foodItemsDetailed.count) items)") + .font(.caption) + .foregroundColor(.secondary) + + Image(systemName: expandedRow == .detailedFoodBreakdown ? "chevron.up" : "chevron.down") + .font(.caption2) + .foregroundColor(.secondary) + } + .padding(.horizontal, 8) + .padding(.vertical, 12) + .background(Color(.systemOrange).opacity(0.08)) + .cornerRadius(12) + .onTapGesture { + withAnimation(.easeInOut(duration: 0.3)) { + expandedRow = expandedRow == .detailedFoodBreakdown ? nil : .detailedFoodBreakdown + } + } + + // Expandable content + if expandedRow == .detailedFoodBreakdown { + VStack(spacing: 12) { + ForEach(Array(aiResult.foodItemsDetailed.enumerated()), id: \.offset) { index, foodItem in + VStack { renderAIItemRow(index: index, item: foodItem) } + .padding(12) + .background(Color(.systemGray6)) + .clipShape(RoundedRectangle(cornerRadius: 12)) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(Color(.separator).opacity(0.5), lineWidth: 1) + ) + } + } + .padding(.horizontal, 8) + .padding(.vertical, 12) + .background(Color(.systemBackground)) + .cornerRadius(12) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(Color(.systemOrange).opacity(0.3), lineWidth: 1) + ) + .padding(.top, 4) + } + } + } + + @ViewBuilder + private func renderAIItemRow(index: Int, item: FoodItemAnalysis) -> some View { + let isExcluded = searchVM.excludedAIItemIndices.contains(index) + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .center, spacing: 8) { + Text("\(index + 1).") + .font(.subheadline) + .foregroundColor(.secondary) + Text(item.name) + .font(.headline) + .fontWeight(.semibold) + .foregroundColor(isExcluded ? .secondary : .primary) + .strikethrough(isExcluded, color: .secondary) + Spacer() + // Carbs with subtle gray background for contrast + Text("\(String(format: "%.1f", item.carbohydrates)) g carbs") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(isExcluded ? .secondary : .blue) + .strikethrough(isExcluded, color: .secondary) + .padding(.vertical, 4) + .padding(.horizontal, 8) + .background(Color(.systemGray5)) + .clipShape(RoundedRectangle(cornerRadius: 8)) + Button(action: { + if isExcluded { searchVM.excludedAIItemIndices.remove(index) } + else { searchVM.excludedAIItemIndices.insert(index) } + searchVM.recomputeAIAdjustments() + }) { + Image(systemName: isExcluded ? "plus.circle.fill" : "xmark.circle.fill") + .foregroundColor(isExcluded ? .green : .red) + .font(.system(size: 18, weight: .medium)) + } + .buttonStyle(.plain) + } + VStack(alignment: .leading, spacing: 4) { + let trimmedUSDA = item.usdaServingSize?.trimmingCharacters(in: .whitespacesAndNewlines) + let baseMultiplier = item.servingMultiplier + let usdaDisplay: String = { + if let text = trimmedUSDA, !text.isEmpty { return text } + if baseMultiplier > 0.01 { + return String(format: "Derived USDA portion (pictured is x%.2f)", baseMultiplier) + } + return "Standard USDA portion" + }() + + FoodFinder_LinePair(label: "Normal USDA Serving:", value: usdaDisplay) + FoodFinder_LinePair(label: "Portion That I See:", value: item.portionEstimate.isEmpty ? "Unknown portion" : item.portionEstimate) + + if item.portionEstimate.uppercased().contains("CANNOT DETERMINE") { + Text("Estimated from menu text") + .font(.caption2) + .fontWeight(.semibold) + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(Color(.systemYellow).opacity(0.3)) + .foregroundColor(.orange) + .clipShape(Capsule()) + } + + if baseMultiplier > 0.01 && abs(baseMultiplier - 1.0) > 0.01 { + HStack(spacing: 6) { + Text("Difference:") + .font(.caption2) + .fontWeight(.medium) + .foregroundColor(.secondary) + Text("x\(String(format: "%.2f", baseMultiplier)) for this item") + .font(.caption) + .foregroundColor(.orange) + } + } + + if searchVM.numberOfServings > 0, + let ai = searchVM.lastAIAnalysisResult, + ai.originalServings > 0 { + let mult = searchVM.numberOfServings / ai.originalServings + if abs(mult - 1.0) > 0.01 { + HStack(spacing: 6) { + Text("Adjusted Servings:") + .font(.caption2) + .fontWeight(.medium) + .foregroundColor(.secondary) + Text("x\(String(format: "%.1f", mult)) applied to totals") + .font(.caption) + .foregroundColor(.orange) + } + } + } + } + .foregroundColor(isExcluded ? .secondary : .primary) + .opacity(isExcluded ? 0.7 : 1.0) + + HStack(spacing: 18) { + VStack(spacing: 0) { Text("\(Int(round(item.calories ?? 0)))").foregroundColor(.green); Text("cal").font(.caption).foregroundColor(.secondary) } + VStack(spacing: 0) { Text(String(format: "%.1f", item.fat ?? 0)).foregroundColor(Color.orange); Text("fat").font(.caption).foregroundColor(.secondary) } + VStack(spacing: 0) { Text(String(format: "%.1f", item.fiber ?? 0)).foregroundColor(Color.purple); Text("fiber").font(.caption).foregroundColor(.secondary) } + VStack(spacing: 0) { Text(String(format: "%.1f", item.protein ?? 0)).foregroundColor(.red); Text("protein").font(.caption).foregroundColor(.secondary) } + } + .frame(maxWidth: .infinity, alignment: .trailing) + .opacity(isExcluded ? 0.25 : 1.0) + } + } +} + +// MARK: - Advanced Analysis Section + +extension FoodFinder_EntryPoint { + + @ViewBuilder + private func advancedAnalysisSection(aiResult: AIFoodAnalysisResult) -> some View { + VStack(spacing: 0) { + let hasAdvancedContent = hasAdvancedAnalysisContent(aiResult: aiResult) + + if hasAdvancedContent { + // Expandable header for Advanced Analysis + HStack { + Image(systemName: "brain.head.profile") + .foregroundColor(.purple) + .font(.system(size: 16, weight: .medium)) + + Text("Advanced Analysis") + .font(.caption) + .foregroundColor(.secondary) + + Spacer() + + Text("(\(countAdvancedSections(aiResult: aiResult)) items)") + .font(.caption) + .foregroundColor(.secondary) + + Image(systemName: isAdvancedAnalysisExpanded ? "chevron.up" : "chevron.down") + .font(.caption2) + .foregroundColor(.secondary) + } + .padding(.horizontal, 8) + .padding(.vertical, 12) + .background(Color(.systemIndigo).opacity(0.08)) + .cornerRadius(12) + .onTapGesture { + withAnimation(.easeInOut(duration: 0.3)) { + isAdvancedAnalysisExpanded.toggle() + } + } + + // Expandable content with all the advanced sections + if isAdvancedAnalysisExpanded { + VStack(spacing: 12) { + // Fat/Protein Units (FPU) Analysis + if let fpuInfo = aiResult.fatProteinUnits, !fpuInfo.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + ExpandableNoteView( + icon: "chart.pie.fill", + iconColor: .orange, + title: "Fat/Protein Units (FPU):", + content: fpuInfo, + backgroundColor: Color(.systemOrange).opacity(0.08) + ) + } + + // FPU Dosing Guidance + if let fpuDosing = aiResult.fpuDosingGuidance, !fpuDosing.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + ExpandableNoteView( + icon: "syringe.fill", + iconColor: .blue, + title: "Extended Dosing:", + content: fpuDosing, + backgroundColor: Color(.systemBlue).opacity(0.08) + ) + } + + // Net Carbs Adjustment (Fiber Impact) + if isUsefulAdvancedText(aiResult.netCarbsAdjustment) { + let netCarbs = aiResult.netCarbsAdjustment!.trimmingCharacters(in: .whitespacesAndNewlines) + ExpandableNoteView( + icon: "leaf.fill", + iconColor: .green, + title: "Fiber Impact (Net Carbs):", + content: netCarbs, + backgroundColor: Color(.systemGreen).opacity(0.08) + ) + } + + // Insulin Timing Recommendations + if isUsefulAdvancedText(aiResult.insulinTimingRecommendations) { + let timingInfo = aiResult.insulinTimingRecommendations!.trimmingCharacters(in: .whitespacesAndNewlines) + ExpandableNoteView( + icon: "clock.fill", + iconColor: .purple, + title: "Insulin Timing:", + content: timingInfo, + backgroundColor: Color(.systemPurple).opacity(0.08) + ) + } + + // Exercise Considerations + if isUsefulAdvancedText(aiResult.exerciseConsiderations) { + let exerciseInfo = aiResult.exerciseConsiderations!.trimmingCharacters(in: .whitespacesAndNewlines) + ExpandableNoteView( + icon: "figure.run", + iconColor: .mint, + title: "Exercise Impact:", + content: exerciseInfo, + backgroundColor: Color(.systemMint).opacity(0.08) + ) + } + + // Absorption Time Reasoning (when different from default) + if isUsefulAdvancedText(aiResult.absorptionTimeReasoning) { + let absorptionReasoning = aiResult.absorptionTimeReasoning!.trimmingCharacters(in: .whitespacesAndNewlines) + ExpandableNoteView( + icon: "hourglass.bottomhalf.fill", + iconColor: .indigo, + title: "Absorption Time Analysis:", + content: absorptionReasoning, + backgroundColor: Color(.systemIndigo).opacity(0.08) + ) + } + + // Meal Size Impact + if isUsefulAdvancedText(aiResult.mealSizeImpact) { + let mealSizeInfo = aiResult.mealSizeImpact!.trimmingCharacters(in: .whitespacesAndNewlines) + ExpandableNoteView( + icon: "scalemass.fill", + iconColor: .brown, + title: "Meal Size Impact:", + content: mealSizeInfo, + backgroundColor: Color(.systemBrown).opacity(0.08) + ) + } + + // Safety Alerts (if different from main diabetes note) + if isUsefulAdvancedText(aiResult.safetyAlerts) { + let safetyInfo = aiResult.safetyAlerts!.trimmingCharacters(in: .whitespacesAndNewlines) + ExpandableNoteView( + icon: "exclamationmark.triangle.fill", + iconColor: .red, + title: "Safety Alerts:", + content: safetyInfo, + backgroundColor: Color(.systemRed).opacity(0.12) + ) + } + } + .padding(.horizontal, 8) + .padding(.vertical, 12) + .background(Color(.systemBackground)) + .cornerRadius(12) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(Color(.systemIndigo).opacity(0.3), lineWidth: 1) + ) + .padding(.top, 4) + + // Scope readout + HStack(spacing: 6) { + Image(systemName: "info.circle") + .font(.caption) + .foregroundColor(.secondary) + let servingText = searchVM.selectedFoodServingSize?.lowercased() ?? "serving" + if servingText.contains("medium") { + Text("Carbs shown for \(String(format: "%.2f", searchVM.numberOfServings)) x 1 medium item") + .font(.caption) + .foregroundColor(.secondary) + } else { + Text("Carbs shown are for pictured portion") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + } + } + } + + private func hasAdvancedAnalysisContent(aiResult: AIFoodAnalysisResult) -> Bool { + return isUsefulAdvancedText(aiResult.fatProteinUnits) || + isUsefulAdvancedText(aiResult.netCarbsAdjustment) || + isUsefulAdvancedText(aiResult.insulinTimingRecommendations) || + isUsefulAdvancedText(aiResult.fpuDosingGuidance) || + isUsefulAdvancedText(aiResult.exerciseConsiderations) || + isUsefulAdvancedText(aiResult.absorptionTimeReasoning) || + isUsefulAdvancedText(aiResult.mealSizeImpact) || + isUsefulAdvancedText(aiResult.individualizationFactors) || + isUsefulAdvancedText(aiResult.safetyAlerts) + } + + private func countAdvancedSections(aiResult: AIFoodAnalysisResult) -> Int { + var count = 0 + if isUsefulAdvancedText(aiResult.fatProteinUnits) { count += 1 } + if isUsefulAdvancedText(aiResult.netCarbsAdjustment) { count += 1 } + if isUsefulAdvancedText(aiResult.insulinTimingRecommendations) { count += 1 } + if isUsefulAdvancedText(aiResult.fpuDosingGuidance) { count += 1 } + if isUsefulAdvancedText(aiResult.exerciseConsiderations) { count += 1 } + if isUsefulAdvancedText(aiResult.absorptionTimeReasoning) { count += 1 } + if isUsefulAdvancedText(aiResult.mealSizeImpact) { count += 1 } + if isUsefulAdvancedText(aiResult.individualizationFactors) { count += 1 } + if isUsefulAdvancedText(aiResult.safetyAlerts) { count += 1 } + return count + } + + private func isUsefulAdvancedText(_ text: String?) -> Bool { + guard var s = text?.trimmingCharacters(in: .whitespacesAndNewlines) else { return false } + if s.isEmpty { return false } + s = s.trimmingCharacters(in: CharacterSet(charactersIn: ".! ")).lowercased() + if s.isEmpty { return false } + let junk: Set = [ + "none", "none needed", "no", "n/a", "na", "not applicable", + "no alerts", "no safety alerts", "no alert", "none required", + "no change", "no changes", "no recommendation", "no recommendations" + ] + if junk.contains(s) { return false } + if s.count <= 3 { return false } + return true + } +} + +// MARK: - AI Food Analysis Handler + +extension FoodFinder_EntryPoint { + + /// Handle AI food analysis results by converting to food product format + @MainActor + private func handleAIFoodAnalysis(_ result: AIFoodAnalysisResult) { + var enrichedResult = result + searchVM.ensureAbsorptionTimeForInitialResult(&enrichedResult) + showAbsorptionReasoning = false + + // Store the detailed AI result for UI display + searchVM.lastAIAnalysisResult = enrichedResult + + // Convert AI result to OpenFoodFactsProduct format for consistency + let aiProduct = convertAIResultToFoodProduct(enrichedResult) + + // Use existing food selection workflow + searchVM.selectFoodProduct(aiProduct) + + // Set servings carefully to avoid double-scaling + if enrichedResult.servings > 0 && enrichedResult.servings < 0.95 { + if enrichedResult.servingSizeDescription.localizedCaseInsensitiveContains("medium") { + searchVM.numberOfServings = enrichedResult.servings + } else { + searchVM.numberOfServings = 1.0 + } + } else if enrichedResult.servings >= 0.95 { + searchVM.numberOfServings = enrichedResult.servings + } else { + searchVM.numberOfServings = 1.0 + } + + // Set dynamic absorption time from AI analysis + print("AI ABSORPTION TIME DEBUG:") + print("Advanced Dosing Enabled: \(UserDefaults.standard.foodFinder_advancedDosingRecommendationsEnabled)") + print("AI Absorption Hours: \(enrichedResult.absorptionTimeHours ?? 0)") + print("Current Absorption Time: \(absorptionTime)") + + if let absorptionHours = enrichedResult.absorptionTimeHours, + absorptionHours > 0 { + let absorptionTimeInterval = TimeInterval(absorptionHours * 3600) + + print("Setting AI absorption time: \(absorptionHours) hours = \(absorptionTimeInterval) seconds") + + searchVM.absorptionEditIsProgrammatic = true + absorptionTime = absorptionTimeInterval + searchVM.absorptionTime = absorptionTimeInterval + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + searchVM.absorptionTimeWasAIGenerated = true + print("AI absorption time flag set. Flag: \(searchVM.absorptionTimeWasAIGenerated)") + } + } else { + print("AI absorption time conditions not met - not setting absorption time") + } + + // Soft clamp for obvious slice-based overestimates (initialization only) + if enrichedResult.servingSizeDescription.localizedCaseInsensitiveContains("medium") { + let portionText = (enrichedResult.analysisNotes ?? enrichedResult.servingSizeDescription).lowercased() + if portionText.contains("slice") || portionText.contains("slices") { + if let match = portionText.range(of: "\\b(1|2|3|4)\\b", options: .regularExpression) { + let count = Int(portionText[match]) ?? 0 + var cap: Double = 0 + switch count { + case 1: cap = 0.25 + case 2: cap = 0.35 + case 3, 4: cap = 0.50 + default: break + } + if cap > 0 { + let aiServings = enrichedResult.servings + if aiServings > cap { + print("Applying slice-based soft cap: AI=\(aiServings) -> cap=\(cap) for \(count) slice(s)") + searchVM.numberOfServings = cap + } + } + } + } + } + } + + /// Convert AI analysis result to OpenFoodFactsProduct for integration with existing workflow + private func convertAIResultToFoodProduct(_ result: AIFoodAnalysisResult) -> OpenFoodFactsProduct { + let aiId = "ai_\(UUID().uuidString.prefix(8))" + let displayName = extractFoodNameFromAIResult(result) + + let aiServings = result.servings + let useTotalsAsServing = aiServings > 0 && aiServings < 0.95 + #if DEBUG + print("AI scaling: servings=\(aiServings), useTotalsAsServing=\(useTotalsAsServing)") + #endif + let baseDivisor = useTotalsAsServing ? 1.0 : max(1.0, aiServings) + let carbsPerServing = result.carbohydrates / baseDivisor + let proteinPerServing = (result.protein ?? 0) / baseDivisor + let fatPerServing = (result.fat ?? 0) / baseDivisor + let caloriesPerServing = (result.calories ?? 0) / baseDivisor + let fiberPerServing = (result.fiber ?? 0) / baseDivisor + + let nutriments = Nutriments( + carbohydrates: carbsPerServing, + proteins: proteinPerServing > 0 ? proteinPerServing : nil, + fat: fatPerServing > 0 ? fatPerServing : nil, + calories: caloriesPerServing > 0 ? caloriesPerServing : nil, + sugars: nil, + fiber: fiberPerServing > 0 ? fiberPerServing : nil + ) + + let servingSizeDisplay = result.servingSizeDescription + + var adjustedNutriments = nutriments + var adjustedServings = result.servings + if result.servings > 0, result.servings < 0.95, servingSizeDisplay.localizedCaseInsensitiveContains("medium") { + let divisor = max(result.servings, 0.01) + let baseCarbs = result.carbohydrates / divisor + let baseProtein = (result.protein ?? 0) / divisor + let baseFat = (result.fat ?? 0) / divisor + let baseCalories = (result.calories ?? 0) / divisor + let baseFiber = (result.fiber ?? 0) / divisor + adjustedNutriments = Nutriments( + carbohydrates: baseCarbs, + proteins: baseProtein > 0 ? baseProtein : nil, + fat: baseFat > 0 ? baseFat : nil, + calories: baseCalories > 0 ? baseCalories : nil, + sugars: nil, + fiber: baseFiber > 0 ? baseFiber : nil + ) + adjustedServings = result.servings + #if DEBUG + print("Base-serving mode: totals => base (div \(divisor)) => carbs=\(baseCarbs), multiplier=\(adjustedServings)") + #endif + } + + let analysisInfo = result.analysisNotes ?? "AI food recognition analysis" + + return OpenFoodFactsProduct( + id: aiId, + productName: displayName.isEmpty ? "AI Analyzed Food" : displayName, + brands: "AI Analysis", + categories: analysisInfo, + nutriments: adjustedNutriments, + servingSize: servingSizeDisplay, + servingQuantity: 100.0, + imageURL: nil, + imageFrontURL: nil, + code: nil, + dataSource: .aiAnalysis + ) + } + + /// Extract clean food name from AI analysis result for Food Type field + private func extractFoodNameFromAIResult(_ result: AIFoodAnalysisResult) -> String { + if let firstName = result.foodItemsDetailed.first?.name, !firstName.isEmpty { + return cleanFoodNameForDisplay(firstName) + } + if let firstFood = result.foodItems.first, !firstFood.isEmpty { + return cleanFoodNameForDisplay(firstFood) + } + if let overallDesc = result.overallDescription, !overallDesc.isEmpty { + return cleanFoodNameForDisplay(overallDesc) + } + return "AI Analyzed Food" + } + + /// Clean up food name for display in Food Type field + private func cleanFoodNameForDisplay(_ name: String) -> String { + var cleaned = name + + let wordsToRemove = [ + "Approximately", "About", "Around", "Roughly", "Nearly", + "ounces", "ounce", "oz", "grams", "gram", "g", "pounds", "pound", "lbs", "lb", + "cups", "cup", "tablespoons", "tablespoon", "tbsp", "teaspoons", "teaspoon", "tsp", + "slices", "slice", "pieces", "piece", "servings", "serving", "portions", "portion" + ] + + for word in wordsToRemove { + let pattern = "\\b\(word)\\b" + cleaned = cleaned.replacingOccurrences(of: pattern, with: "", options: [.regularExpression, .caseInsensitive]) + } + + cleaned = cleaned.replacingOccurrences(of: "^\\d+(\\.\\d+)?\\s*", with: "", options: .regularExpression) + + cleaned = ConfigurableAIService.cleanFoodText(cleaned) ?? cleaned + + cleaned = cleaned.trimmingCharacters(in: .whitespacesAndNewlines) + cleaned = cleaned.replacingOccurrences(of: "\\s+", with: " ", options: .regularExpression) + + return cleaned.isEmpty ? "Mixed Food" : cleaned + } +} + +// MARK: - Helper Functions + +extension FoodFinder_EntryPoint { + + /// Shortens food title to first 2-3 key words for less repetitive display + private func shortenedTitle(_ fullTitle: String) -> String { + let words = fullTitle.components(separatedBy: .whitespaces).filter { !$0.isEmpty } + + if words.count <= 3 || fullTitle.count <= 25 { + return fullTitle + } + + let meaningfulWords = words.prefix(4).filter { word in + let lowercased = word.lowercased() + return !["a", "an", "the", "with", "and", "or", "of", "in", "on", "at", "for", "to"].contains(lowercased) + } + + let selectedWords = Array(meaningfulWords.prefix(3)) + + if selectedWords.isEmpty { + return Array(words.prefix(3)).joined(separator: " ") + } + + return selectedWords.joined(separator: " ") + } + + // Quick favorite helpers + private func isQuickFavorited(_ product: OpenFoodFactsProduct) -> Bool { + let name = product.displayName + return favoriteFoods.contains { $0.name == name } + } + + private func toggleQuickFavorite(for product: OpenFoodFactsProduct) { + if isQuickFavorited(product) { + return + } + let carbs = carbsQuantity ?? 0 + guard carbs > 0 else { return } + let new = NewFavoriteFood( + name: product.displayName, + carbsQuantity: HKQuantity(unit: preferredCarbUnit, doubleValue: carbs), + foodType: foodType, + absorptionTime: absorptionTime + ) + onFavoriteFoodSave?(new) + // Reload favorites so heart fills immediately + loadFavoriteFoods() + } + + // Confidence helpers + private func computeConfidencePercent(from ai: AIFoodAnalysisResult, servings: Double) -> Int { + if let numeric = ai.numericConfidence { + let pct = Int((min(1.0, max(0.0, numeric)) * 100).rounded()) + return max(20, min(97, pct)) + } + var percent: Int = { + switch ai.confidence { + case .high: return 88 + case .medium: return 68 + case .low: return 45 + } + }() + + if ai.totalCarbohydrates > 0 { percent += 4 } else { percent -= 6 } + if !ai.foodItemsDetailed.isEmpty { percent += 4 } else { percent -= 8 } + if let method = ai.portionAssessmentMethod, !method.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { percent += 3 } + if let notes = ai.notes, notes.lowercased().contains("fallback") { percent -= 5 } + + var missing = 0 + if ai.totalProtein == nil { missing += 1 } + if ai.totalFat == nil { missing += 1 } + if ai.totalCalories == nil { missing += 1 } + if missing >= 2 { percent -= 6 } + + if servings < 0.3 || servings > 4.0 { percent -= 3 } + + percent = max(20, min(97, percent)) + return percent + } + + private func confidenceColor(_ percent: Int) -> Color { + if percent < 45 { return .red } + if percent < 75 { return .yellow } + return .green + } + + private func confidenceBadgeColor(_ percent: Int) -> Color { + if percent < 45 { + return Color(.systemYellow).opacity(0.25) + } + if percent < 75 { + return Color(.systemGray5) + } + return Color(.systemGray6) + } + + private func fallbackPortionSummary(aiResult: AIFoodAnalysisResult) -> String { + let items = aiResult.foodItemsDetailed + guard !items.isEmpty else { + return "Serving multipliers derived from the AI-estimated portions." + } + + let snippets = items.prefix(3).map { item -> String in + let name = cleanFoodNameForDisplay(item.name) + let multiplier = item.servingMultiplier + let multiplierText = multiplier > 0.01 ? String(format: "x%.2f", multiplier) : "unknown" + if let usda = item.usdaServingSize?.trimmingCharacters(in: .whitespacesAndNewlines), !usda.isEmpty { + return "\(name): \(multiplierText) vs \(usda)" + } + return "\(name): \(multiplierText) of USDA baseline" + } + + var summary = "Serving multipliers derived from the AI-estimated portions." + if !snippets.isEmpty { + summary += " " + snippets.joined(separator: "; ") + if items.count > snippets.count { + summary += "..." + } + } + return summary + } + + // Compute displayed macro values for circles + private func computeDisplayedMacros(selectedFood: OpenFoodFactsProduct, aiResult: AIFoodAnalysisResult?, numberOfServings: Double, excluded: Set) -> (carbs: Double, calories: Double?, fat: Double?, fiber: Double?, protein: Double?) { + if let ai = aiResult { + let servingScale = numberOfServings / ai.originalServings + let included = ai.foodItemsDetailed.enumerated().filter { !excluded.contains($0.offset) }.map { $0.element } + let carbs = included.reduce(0.0) { $0 + $1.carbohydrates } * servingScale + let caloriesSum = included.compactMap { $0.calories }.reduce(0.0, +) + let fatSum = included.compactMap { $0.fat }.reduce(0.0, +) + let fiberSum = included.compactMap { $0.fiber }.reduce(0.0, +) + let proteinSum = included.compactMap { $0.protein }.reduce(0.0, +) + let cals: Double? = caloriesSum > 0 ? caloriesSum * servingScale : nil + let fat: Double? = fatSum > 0 ? fatSum * servingScale : nil + let fiber: Double? = fiberSum > 0 ? fiberSum * servingScale : nil + let protein: Double? = proteinSum > 0 ? proteinSum * servingScale : nil + return (carbs, cals, fat, fiber, protein) + } else { + let carbs = (selectedFood.carbsPerServing ?? selectedFood.nutriments.carbohydrates) * numberOfServings + let cals = selectedFood.caloriesPerServing.map { $0 * numberOfServings } + let fat = selectedFood.fatPerServing.map { $0 * numberOfServings } + let fiber = selectedFood.fiberPerServing.map { $0 * numberOfServings } + let protein = selectedFood.proteinPerServing.map { $0 * numberOfServings } + return (carbs, cals, fat, fiber, protein) + } + } +} + +// MARK: - Balanced Macro Targets (private to this file) + +private struct FoodFinder_BalancedMacroTargets { + let carbs: Double + let protein: Double + let fat: Double + let fiber: Double + let calories: Double +} + +private enum FoodFinder_BalancedMealGuidelines { + static let preferredCarbFraction: Double = 0.45 + static let preferredProteinFraction: Double = 0.20 + static let preferredFatFraction: Double = 0.30 + static let fiberPerCalorie: Double = 14.0 / 1000.0 +} + +private func computeBalancedTargets(carbs: Double, protein: Double?, fat: Double?, calories: Double?) -> FoodFinder_BalancedMacroTargets? { + let safeCarbs = max(carbs, 0) + let safeProtein = max(protein ?? 0, 0) + let safeFat = max(fat ?? 0, 0) + let providedCalories = max(calories ?? 0, 0) + + let macrosCalories = safeCarbs * 4 + safeProtein * 4 + safeFat * 9 + let observedCalories = max(providedCalories, macrosCalories) + + let baselineCalories: Double + if safeCarbs > 0 { + let estimatedFromCarbs = (safeCarbs * 4) / FoodFinder_BalancedMealGuidelines.preferredCarbFraction + baselineCalories = max(observedCalories, estimatedFromCarbs) + } else { + baselineCalories = observedCalories + } + + guard baselineCalories > 0 else { + return nil + } + + let targetCarbs = baselineCalories * FoodFinder_BalancedMealGuidelines.preferredCarbFraction / 4 + let targetProtein = baselineCalories * FoodFinder_BalancedMealGuidelines.preferredProteinFraction / 4 + let targetFat = baselineCalories * FoodFinder_BalancedMealGuidelines.preferredFatFraction / 9 + let targetFiber = baselineCalories * FoodFinder_BalancedMealGuidelines.fiberPerCalorie + + return FoodFinder_BalancedMacroTargets( + carbs: targetCarbs, + protein: targetProtein, + fat: targetFat, + fiber: targetFiber, + calories: baselineCalories + ) +} + +// MARK: - FoodFinder_LinePair (private to this file) + +private struct FoodFinder_LinePair: View { + let label: String + let value: String + + var body: some View { + HStack(alignment: .firstTextBaseline, spacing: 6) { + Text(label) + .font(.caption2) + .fontWeight(.medium) + .foregroundColor(.secondary) + .layoutPriority(1) + .lineLimit(1) + Text(value) + .font(.caption) + .foregroundColor(.primary) + .fixedSize(horizontal: false, vertical: true) + .multilineTextAlignment(.leading) + } + } +} + +// MARK: - ServingsRow Component + +/// A row that always displays servings information +struct ServingsDisplayRow: View { + @Binding var servings: Double + let servingSize: String? + let selectedFoodProduct: OpenFoodFactsProduct? + + private let formatter: NumberFormatter = { + let formatter = NumberFormatter() + formatter.numberStyle = .decimal + // Show quarters cleanly (e.g., 0.25, 0.5, 0.75, 1) + formatter.maximumFractionDigits = 2 + formatter.minimumFractionDigits = 0 + return formatter + }() + + var body: some View { + let hasSelectedFood = selectedFoodProduct != nil + + return HStack { + Text("Servings") + .foregroundColor(.primary) + + Spacer() + + if hasSelectedFood { + // Show stepper controls when food is selected + HStack(spacing: 8) { + // Decrease button + Button(action: { + // Step down by 0.25 (quarter serving) + let quarters = (servings * 4).rounded() + let newValue = max(0.0, (quarters - 1) / 4.0) + servings = newValue + }) { + Image(systemName: "minus.circle.fill") + .font(.title3) + .foregroundColor(servings > 0.0 ? .accentColor : .secondary) + } + .disabled(servings <= 0.0) + + // Current value + Text(formatter.string(from: NSNumber(value: servings)) ?? "1") + .font(.body) + .foregroundColor(.primary) + .frame(minWidth: 30) + + // Increase button + Button(action: { + // Step up by 0.25 (quarter serving) + let quarters = (servings * 4).rounded() + let newValue = min(10.0, (quarters + 1) / 4.0) + servings = newValue + }) { + Image(systemName: "plus.circle.fill") + .font(.title3) + .foregroundColor(servings < 10.0 ? .accentColor : .secondary) + } + .disabled(servings >= 10.0) + } + } else { + // Show placeholder when no food is selected + Text("\u{2014}") + .font(.body) + .foregroundColor(.secondary) + } + } + .frame(height: 44) + .padding(.vertical, -8) + } +} + +// MARK: - Nutrition Circle Component + +/// Circular progress indicator for nutrition values with enhanced animations +struct NutritionCircle: View { + let value: Double + let unit: String + let label: String + let color: Color + let maxValue: Double + + @State private var animatedValue: Double = 0 + @State private var animatedProgress: Double = 0 + @State private var isLoading: Bool = false + + private func normalizedProgress(for rawValue: Double) -> Double { + guard maxValue > 0 else { + return rawValue > 0 ? 1.0 : 0.0 + } + let ratio = rawValue / maxValue + if ratio.isNaN || ratio.isInfinite { + return 0.0 + } + return min(max(ratio, 0.0), 1.0) + } + + private var displayValue: String { + if animatedValue.truncatingRemainder(dividingBy: 1) == 0 { + return String(format: "%.0f", animatedValue) + } else { + return String(format: "%.1f", animatedValue) + } + } + + var body: some View { + VStack(spacing: 3) { + ZStack { + // Background circle + Circle() + .stroke(Color.gray.opacity(0.3), lineWidth: 4.0) + .frame(width: 64, height: 64) + + if isLoading { + // Loading spinner + ProgressView() + .scaleEffect(0.8) + .foregroundColor(color) + } else { + // Progress circle with smooth animation + Circle() + .trim(from: 0.0, to: animatedProgress) + .stroke(color, style: StrokeStyle(lineWidth: 4.0, lineCap: .round)) + .frame(width: 64, height: 64) + .rotationEffect(.degrees(-90)) + .animation(.spring(response: 0.8, dampingFraction: 0.8), value: animatedProgress) + + // Center text with count-up animation + HStack(spacing: 1) { + Text(displayValue) + .font(.system(size: 15, weight: .bold)) + .foregroundColor(.primary) + .animation(.easeInOut(duration: 0.2), value: animatedValue) + Text(unit) + .font(.system(size: 9, weight: .medium)) + .foregroundColor(.secondary) + .offset(y: 1) + } + } + } + .onAppear { + withAnimation(.easeOut(duration: 1.0)) { + animatedValue = value + animatedProgress = normalizedProgress(for: value) + } + } + .onChange(of: value) { newValue in + if newValue == 0 && animatedValue > 0 { + isLoading = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + isLoading = false + withAnimation(.spring(response: 0.6, dampingFraction: 0.8)) { + animatedValue = newValue + animatedProgress = normalizedProgress(for: newValue) + } + } + } else { + isLoading = false + withAnimation(.spring(response: 0.6, dampingFraction: 0.8)) { + animatedValue = newValue + animatedProgress = normalizedProgress(for: newValue) + } + } + } + .onChange(of: maxValue) { _ in + withAnimation(.spring(response: 0.6, dampingFraction: 0.8)) { + animatedProgress = normalizedProgress(for: value) + } + } + + // Label + Text(label) + .font(.system(size: 10, weight: .medium)) + .foregroundColor(.primary) + .multilineTextAlignment(.center) + .lineLimit(1) + .minimumScaleFactor(0.7) + } + .frame(maxWidth: .infinity) + } +} + +// MARK: - Expandable Note Component + +/// Expandable view for AI analysis notes that can be tapped to show full content +struct ExpandableNoteView: View { + let icon: String + let iconColor: Color + let title: String + let content: String + let backgroundColor: Color + + @State private var isExpanded = false + @State private var headerWidth: CGFloat = 0 + + // Estimate how many characters can fit in the single-line header area + private var headerMaxChars: Int { + let leftRightPadding: CGFloat = 24 + let iconWidth: CGFloat = 16 + let gaps: CGFloat = 12 + let chevronReserve: CGFloat = 18 + + let titleFont = UIFont.preferredFont(forTextStyle: .caption1) + let titleWidth = (title as NSString).size(withAttributes: [.font: titleFont]).width + + let available = max(0, headerWidth - leftRightPadding - iconWidth - gaps - titleWidth - chevronReserve) + let avgCharWidth: CGFloat = 6.0 + let maxChars = Int(floor(available / avgCharWidth)) + return max(0, maxChars) + } + + // Collapsed single-line text snippet based on capacity + private var collapsedLineText: String { + let s = content.trimmingCharacters(in: .whitespacesAndNewlines) + guard headerMaxChars > 0 else { return "" } + if s.count > headerMaxChars { + let idx = s.index(s.startIndex, offsetBy: headerMaxChars) + return String(s[.. headerMaxChars + } + + private var borderColor: Color { + if backgroundColor == Color(.systemBlue).opacity(0.08) { + return Color(.systemBlue).opacity(0.3) + } else if backgroundColor == Color(.systemRed).opacity(0.08) { + return Color(.systemRed).opacity(0.3) + } else { + return Color(.systemGray4) + } + } + + var body: some View { + VStack(spacing: 0) { + // Expandable header (always visible) + HStack(spacing: 6) { + Image(systemName: icon) + .font(.caption) + .foregroundColor(iconColor) + + Text(title) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.secondary) + + Spacer() + + // Show truncated content when collapsed, or nothing when expanded + if !isExpanded { + Text(collapsedLineText) + .font(.caption2) + .foregroundColor(.primary) + .lineLimit(1) + } + + // Expansion indicator + if isOverflowing { + Image(systemName: isExpanded ? "chevron.up" : "chevron.down") + .font(.caption2) + .foregroundColor(.secondary) + .animation(.easeInOut(duration: 0.3), value: isExpanded) + } + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(backgroundColor) + .cornerRadius(12) + .contentShape(Rectangle()) + .background( + GeometryReader { proxy in + Color.clear + .onAppear { headerWidth = proxy.size.width } + .onChange(of: proxy.size.width) { newValue in headerWidth = newValue } + } + ) + .onTapGesture { + if isOverflowing { + withAnimation(.easeInOut(duration: 0.3)) { + isExpanded.toggle() + } + } + } + + // Expandable content + if isExpanded { + VStack(alignment: .leading, spacing: 8) { + Text(content) + .font(.caption2) + .foregroundColor(.primary) + .lineLimit(nil) + .fixedSize(horizontal: false, vertical: true) + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding(.horizontal, 8) + .padding(.vertical, 12) + .background(Color(.systemBackground)) + .cornerRadius(12) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(borderColor, lineWidth: 1) + ) + .padding(.top, 4) + } + } + } +} + +// MARK: - Food Item Detail Row Component + +/// Individual food item detail row for the breakdown section +struct FoodItemDetailRow: View { + let foodItem: FoodItemAnalysis + let itemNumber: Int + let onDelete: (() -> Void)? + + init(foodItem: FoodItemAnalysis, itemNumber: Int, onDelete: (() -> Void)? = nil) { + self.foodItem = foodItem + self.itemNumber = itemNumber + self.onDelete = onDelete + } + + var body: some View { + VStack(spacing: 8) { + // Header with food name and carbs + HStack { + // Item number + Text("\(itemNumber).") + .font(.caption) + .foregroundColor(.secondary) + .frame(width: 20, alignment: .leading) + + // Food name + Text(foodItem.name) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.primary) + .lineLimit(2) + + Spacer() + + // Carbs amount (highlighted) + HStack(spacing: 4) { + Text("\(String(format: "%.1f", foodItem.carbohydrates))") + .font(.subheadline) + .fontWeight(.semibold) + .foregroundColor(.blue) + Text("g carbs") + .font(.caption) + .foregroundColor(.secondary) + } + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(Color(.systemBlue).opacity(0.1)) + .cornerRadius(8) + + // Delete button (if callback provided) + if let onDelete = onDelete { + Button(action: onDelete) { + Image(systemName: "xmark.circle.fill") + .font(.system(size: 18, weight: .medium)) + .foregroundColor(.red) + } + .buttonStyle(PlainButtonStyle()) + .padding(.leading, 8) + } + } + + // Portion details + VStack(alignment: .leading, spacing: 6) { + if !foodItem.portionEstimate.isEmpty { + VStack(alignment: .leading, spacing: 2) { + Text("What I see:") + .font(.caption) + .fontWeight(.light) + .foregroundColor(.secondary) + Text(foodItem.portionEstimate) + .font(.caption2) + .foregroundColor(.primary) + } + } + + if let usdaSize = foodItem.usdaServingSize, !usdaSize.isEmpty { + VStack(alignment: .leading, spacing: 2) { + Text("USDA serving:") + .font(.caption) + .fontWeight(.light) + .foregroundColor(.secondary) + HStack { + Text(usdaSize) + .font(.caption) + .foregroundColor(.primary) + Text("(x\(String(format: "%.1f", foodItem.servingMultiplier)))") + .font(.caption2) + .foregroundColor(.orange) + } + } + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading, 24) + + // Additional nutrition if available + let hasAnyNutrition = (foodItem.protein ?? 0) > 0 || (foodItem.fat ?? 0) > 0 || (foodItem.calories ?? 0) > 0 || (foodItem.fiber ?? 0) > 0 + + if hasAnyNutrition { + HStack(spacing: 12) { + Spacer() + + // Calories + if let calories = foodItem.calories, calories > 0 { + VStack(spacing: 2) { + Text("\(String(format: "%.0f", calories))") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.green) + Text("cal") + .font(.caption2) + .foregroundColor(.secondary) + } + } + + // Fat + if let fat = foodItem.fat, fat > 0 { + VStack(spacing: 2) { + Text("\(String(format: "%.1f", fat))") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.orange) + Text("fat") + .font(.caption2) + .foregroundColor(.secondary) + } + } + + // Fiber + if let fiber = foodItem.fiber, fiber > 0 { + VStack(spacing: 2) { + Text("\(String(format: "%.1f", fiber))") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(Color(red: 0.6, green: 0.4, blue: 0.8)) + Text("fiber") + .font(.caption2) + .foregroundColor(.secondary) + } + } + + // Protein + if let protein = foodItem.protein, protein > 0 { + VStack(spacing: 2) { + Text("\(String(format: "%.1f", protein))") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.red) + Text("protein") + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + .padding(.horizontal, 8) + .padding(.vertical, 8) + .background(Color(.systemGray6)) + .cornerRadius(8) + } + } + .padding(.vertical, 8) + .padding(.horizontal, 12) + .background(Color(.systemBackground)) + .cornerRadius(8) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(Color(.systemGray4), lineWidth: 1) + ) + } +} + +// MARK: - FoodFinder Enable Row + +struct FoodSearchEnableRow: View { + @Binding var isFoodSearchEnabled: Bool + @State private var isAnimating = false + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + HStack { + HStack(spacing: 8) { + Image(systemName: "brain.head.profile") + .font(.title3) + .foregroundColor(.purple) + .scaleEffect(isAnimating ? 1.1 : 1.0) + .animation(.easeInOut(duration: 2.0).repeatForever(autoreverses: true), value: isAnimating) + + Text("Enable FoodFinder") + .font(.body) + .fontWeight(.medium) + .foregroundColor(.primary) + } + + Spacer() + + Toggle("", isOn: $isFoodSearchEnabled) + .labelsHidden() + .scaleEffect(0.8) + .onChange(of: isFoodSearchEnabled) { newValue in + UserDefaults.standard.foodFinderEnabled = newValue + } + } + + Text("Add AI-powered nutrition analysis") + .font(.caption) + .foregroundColor(.secondary) + .padding(.top, 2) + .padding(.leading, 32) + } + .onAppear { + isAnimating = true + } + } +} + +// MARK: - AI-enabled AbsorptionTimePickerRow + +struct AIAbsorptionTimePickerRow: View { + @Binding private var absorptionTime: TimeInterval + @Binding private var isFocused: Bool + + private let validDurationRange: ClosedRange + private let minuteStride: Int + private let isAIGenerated: Bool + private var showHowAbsorptionTimeWorks: Binding? + + init(absorptionTime: Binding, isFocused: Binding, validDurationRange: ClosedRange, minuteStride: Int = 30, isAIGenerated: Bool = false, showHowAbsorptionTimeWorks: Binding? = nil) { + self._absorptionTime = absorptionTime + self._isFocused = isFocused + self.validDurationRange = validDurationRange + self.minuteStride = minuteStride + self.isAIGenerated = isAIGenerated + self.showHowAbsorptionTimeWorks = showHowAbsorptionTimeWorks + } + + var body: some View { + VStack(alignment: .leading, spacing: 0) { + HStack { + Text("Absorption Time") + .foregroundColor(.primary) + + if isAIGenerated { + HStack(spacing: 4) { + Image(systemName: "brain.head.profile") + .font(.caption) + .foregroundColor(.purple) + Text("AI") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.blue) + } + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(Color.blue.opacity(0.1)) + .cornerRadius(6) + } + + if showHowAbsorptionTimeWorks != nil { + Button(action: { + isFocused = false + showHowAbsorptionTimeWorks?.wrappedValue = true + }) { + Image(systemName: "info.circle") + .font(.body) + .foregroundColor(.accentColor) + } + } + + Spacer() + + Text(durationString()) + .foregroundColor(isAIGenerated ? .blue : Color(UIColor.secondaryLabel)) + .fontWeight(isAIGenerated ? .medium : .regular) + } + + if isAIGenerated && !isFocused { + Text("AI suggested based on meal composition") + .font(.caption2) + .foregroundColor(.blue) + .padding(.top, 2) + } + + if isFocused { + DurationPicker(duration: $absorptionTime, validDurationRange: validDurationRange, minuteInterval: minuteStride) + .frame(maxWidth: .infinity) + } + } + .onTapGesture { + withAnimation { + isFocused.toggle() + } + } + } + + private let durationFormatter: DateComponentsFormatter = { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.hour, .minute] + formatter.unitsStyle = .short + return formatter + }() + + private func durationString() -> String { + return durationFormatter.string(from: absorptionTime) ?? "" + } +} diff --git a/Loop/Views/FoodFinder/FoodFinder_FavoriteDetailView.swift b/Loop/Views/FoodFinder/FoodFinder_FavoriteDetailView.swift new file mode 100644 index 0000000000..aca26fbec0 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_FavoriteDetailView.swift @@ -0,0 +1,56 @@ +// +// FoodFinder_FavoriteDetailView.swift +// Loop +// +// FoodFinder — Enhanced favorite food detail with thumbnail display. +// Provides a thumbnail section that can be inserted into the existing +// FavoriteFoodDetailView via a single call site. +// + +import SwiftUI +import UIKit +import LoopKit + +/// A standalone thumbnail header view for use in the favorite food detail screen. +/// The host detail view embeds this conditionally when FoodFinder is enabled. +struct FoodFinder_FavoriteThumbnail: View { + let food: StoredFavoriteFood + + var body: some View { + if let thumb = FoodFinder_FavoritesHelper.thumbnail(for: food) { + Section { + Image(uiImage: thumb) + .resizable() + .aspectRatio(contentMode: .fill) + .frame(height: 160) + .frame(maxWidth: .infinity) + .clipped() + .clipShape(RoundedRectangle(cornerRadius: 14)) + .overlay( + RoundedRectangle(cornerRadius: 14) + .stroke(Color(.separator), lineWidth: 0.5) + ) + } + .listRowInsets(EdgeInsets(top: 12, leading: 12, bottom: 0, trailing: 12)) + } + } +} + +/// A small inline thumbnail for the food type row in the detail view. +struct FoodFinder_FoodTypeThumbnail: View { + let food: StoredFavoriteFood + + var body: some View { + if let thumb = FoodFinder_FavoritesHelper.thumbnail(for: food) { + Image(uiImage: thumb) + .resizable() + .scaledToFill() + .frame(width: 32, height: 32) + .cornerRadius(6) + .overlay( + RoundedRectangle(cornerRadius: 6) + .stroke(Color(.systemGray4), lineWidth: 0.5) + ) + } + } +} diff --git a/Loop/Views/FoodFinder/FoodFinder_FavoriteEditView.swift b/Loop/Views/FoodFinder/FoodFinder_FavoriteEditView.swift new file mode 100644 index 0000000000..5511f34291 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_FavoriteEditView.swift @@ -0,0 +1,23 @@ +// +// FoodFinder_FavoriteEditView.swift +// Loop +// +// FoodFinder — Provides the suggestedName enhancement for AddEditFavoriteFoodView. +// When FoodFinder is enabled and a food product is selected, this helper +// extracts a suggested name for pre-populating the favorite food form. +// + +import Foundation + +/// Helpers for enhancing the AddEditFavoriteFoodView with FoodFinder data. +enum FoodFinder_FavoriteEditHelper { + + /// Extract a suggested name from a selected food product's display name. + /// Returns nil if no product is selected or the name is empty. + static func suggestedName(from productName: String?) -> String? { + guard let name = productName, !name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { + return nil + } + return FoodFinder_FavoritesViewModel.truncatedName(name) + } +} diff --git a/Loop/Views/FoodFinder/FoodFinder_FavoritesView.swift b/Loop/Views/FoodFinder/FoodFinder_FavoritesView.swift new file mode 100644 index 0000000000..433e082406 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_FavoritesView.swift @@ -0,0 +1,25 @@ +// +// FoodFinder_FavoritesView.swift +// Loop +// +// FoodFinder — Enhanced favorites list with thumbnail support. +// This wraps/enhances the existing FavoriteFoodsView without modifying LoopKit. +// + +import SwiftUI +import UIKit +import LoopKit +import LoopKitUI + +/// Provides FoodFinder thumbnail loading for the existing FavoriteFoodsView. +/// Instead of modifying LoopKit's FavoriteFoodListRow, this helper supplies +/// thumbnails that the host view can pass through. +enum FoodFinder_FavoritesHelper { + + /// Load the stored thumbnail for a favorite food, if one exists. + static func thumbnail(for food: StoredFavoriteFood) -> UIImage? { + let map = UserDefaults.standard.favoriteFoodImageIDs + guard let id = map[food.id] else { return nil } + return FavoriteFoodImageStore.loadThumbnail(id: id) + } +} diff --git a/Loop/Views/FoodFinder/FoodFinder_ProviderEditView.swift b/Loop/Views/FoodFinder/FoodFinder_ProviderEditView.swift new file mode 100644 index 0000000000..da3107d509 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_ProviderEditView.swift @@ -0,0 +1,249 @@ +// +// +// Created by Taylor Patterson, Coded by Claude for AI Settings Configuration +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +struct AIProviderEditView: View { + @Environment(\.dismiss) private var dismiss + @State private var configuration: AIProviderConfiguration + private let onSave: (AIProviderConfiguration) -> Void + + @State private var isTesting = false + @State private var testResult: TestResult? + @State private var showingTestAlert = false + + enum TestResult: Equatable { + case success(String) + case failure(String) + + var message: String { + switch self { + case .success(let text): return text + case .failure(let text): return text + } + } + + var isSuccess: Bool { + if case .success = self { return true } + return false + } + } + + init(configuration: AIProviderConfiguration? = nil, onSave: @escaping (AIProviderConfiguration) -> Void) { + _configuration = State(initialValue: configuration ?? AIProviderConfiguration( + name: "", + baseURL: "https://", + model: "", + apiKey: "", + endpointPath: "/v1/chat/completions", + authType: .bearer, + requestTemplate: AIProviderConfiguration.openAITemplate, + responseKeyPath: "choices.0.message.content", + supportsVision: true + )) + self.onSave = onSave + } + + var body: some View { + NavigationView { + Form { + Section(header: Text("Provider Details")) { + TextField("Name", text: $configuration.name) + + Picker("Authentication Type", selection: $configuration.authType) { + ForEach(AuthType.allCases, id: \.self) { type in + Text(type.rawValue).tag(type) + } + } + + TextField("Base URL", text: $configuration.baseURL) + .keyboardType(.URL) + .autocapitalization(.none) + .disableAutocorrection(true) + + TextField("Endpoint Path", text: $configuration.endpointPath) + .autocapitalization(.none) + .disableAutocorrection(true) + } + + Section(header: Text("Model")) { + TextField("Model Name", text: $configuration.model) + .autocapitalization(.none) + .disableAutocorrection(true) + + Toggle("Supports Vision", isOn: $configuration.supportsVision) + } + + Section(header: Text("Authentication")) { + SecureField("API Key", text: $configuration.apiKey) + .autocapitalization(.none) + .disableAutocorrection(true) + + if configuration.authType == .bearer { + Text("API Key will be sent as: Bearer YOUR_API_KEY") + .font(.caption) + .foregroundColor(.secondary) + } else { + Text("API Key will be sent in header: \(configuration.authType.headerField)") + .font(.caption) + .foregroundColor(.secondary) + } + + if !configuration.apiKey.isEmpty { + Button(action: testConnection) { + HStack { + if isTesting { + ProgressView() + } else { + Image(systemName: "bolt.fill") + } + Text("Test Connection") + } + } + .disabled(isTesting) + .alert("Test Connection", isPresented: $showingTestAlert) { + Button("OK") {} + } message: { + if let result = testResult { + Text(result.message) + .foregroundColor(result.isSuccess ? .green : .red) + } + } + } + } + + Section(header: Text("Advanced")) { + TextField("API Version (optional)", text: Binding( + get: { configuration.apiVersion ?? "" }, + set: { configuration.apiVersion = $0.isEmpty ? nil : $0 } + )) + .autocapitalization(.none) + .disableAutocorrection(true) + + TextField("Organization ID (optional)", text: Binding( + get: { configuration.organizationID ?? "" }, + set: { configuration.organizationID = $0.isEmpty ? nil : $0 } + )) + .autocapitalization(.none) + .disableAutocorrection(true) + + NavigationLink("Request Template") { + RequestTemplateEditor(template: $configuration.requestTemplate) + } + + TextField("Response Key Path", text: $configuration.responseKeyPath) + .autocapitalization(.none) + .disableAutocorrection(true) + } + } + .navigationTitle(configuration.id.isEmpty ? "Add Provider" : "Edit Provider") + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button("Cancel") { + dismiss() + } + } + + ToolbarItem(placement: .confirmationAction) { + Button("Save") { + onSave(configuration) + dismiss() + } + .disabled(!isValid) + } + } + } + } + + private var isValid: Bool { + !configuration.name.isEmpty && + !configuration.baseURL.isEmpty && + !configuration.model.isEmpty && + !configuration.apiKey.isEmpty && + !configuration.endpointPath.isEmpty && + !configuration.requestTemplate.isEmpty && + !configuration.responseKeyPath.isEmpty + } + + private func testConnection() { + isTesting = true + testResult = nil + + Task { + do { + let success = try await AIServiceManager.shared.testConnection(to: configuration) + if success { + testResult = .success("✅ Connection successful!") + } else { + testResult = .failure("❌ Connection failed: Invalid response") + } + } catch { + testResult = .failure("❌ Connection failed: \(error.localizedDescription)") + } + + isTesting = false + showingTestAlert = true + } + } +} + +// MARK: - Request Template Editor + +struct RequestTemplateEditor: View { + @Binding var template: String + @State private var showingPlaceholderMenu = false + + var body: some View { + VStack(spacing: 0) { + HStack { + Text("Available placeholders:") + .font(.caption) + .foregroundColor(.secondary) + + Menu { + Button(action: { insertPlaceholder("{{MODEL}}") }) { + Label("Model", systemImage: "cpu") + } + Button(action: { insertPlaceholder("{{PROMPT}}") }) { + Label("Prompt", systemImage: "text.quote") + } + Button(action: { insertPlaceholder("{{IMAGE_BASE64}}") }) { + Label("Image (Base64)", systemImage: "photo") + } + } label: { + Text("Insert Placeholder") + .font(.caption) + .padding(6) + .background(Color(.systemGray6)) + .cornerRadius(6) + } + + Spacer() + } + .padding() + + TextEditor(text: $template) + .font(.system(.body, design: .monospaced)) + .disableAutocorrection(true) + .autocapitalization(.none) + .padding() + } + .navigationTitle("Request Template") + .navigationBarTitleDisplayMode(.inline) + } + + private func insertPlaceholder(_ placeholder: String) { + template += placeholder + } +} + +// MARK: - Preview + +struct AIProviderEditView_Previews: PreviewProvider { + static var previews: some View { + AIProviderEditView { _ in } + } +} diff --git a/Loop/Views/FoodFinder/FoodFinder_ScannerView.swift b/Loop/Views/FoodFinder/FoodFinder_ScannerView.swift new file mode 100644 index 0000000000..6abb84008a --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_ScannerView.swift @@ -0,0 +1,721 @@ +// +// BarcodeScannerView.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for Barcode Scanning Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import AVFoundation +import Combine + +/// SwiftUI view for barcode scanning with camera preview and overlay +struct BarcodeScannerView: View { + @ObservedObject private var scannerService = BarcodeScannerService.shared + @Environment(\.presentationMode) var presentationMode + @Environment(\.dismiss) private var dismiss + + let onBarcodeScanned: (String) -> Void + let onCancel: () -> Void + + @State private var showingPermissionAlert = false + @State private var cancellables = Set() + @State private var scanningStage: ScanningStage = .initializing + @State private var progressValue: Double = 0.0 + + enum ScanningStage: String, CaseIterable { + case initializing = "Initializing camera..." + case positioning = "Position camera over barcode or QR code" + case scanning = "Scanning for barcode/QR code..." + case detected = "Code detected!" + case validating = "Validating format..." + case lookingUp = "Looking up product..." + case found = "Product found!" + case error = "Scan failed" + } + + var body: some View { + GeometryReader { geometry in + ZStack { + // Camera preview background + CameraPreviewView(scanner: scannerService) + .edgesIgnoringSafeArea(.all) + + // Scanning overlay with proper safe area handling + scanningOverlay(geometry: geometry) + + // Error overlay + if let error = scannerService.scanError { + errorOverlay(error: error) + } + } + } + .ignoresSafeArea(.container, edges: .bottom) + .navigationBarTitle("Scan Barcode", displayMode: .inline) + .navigationBarBackButtonHidden(true) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button("Cancel") { + print("🎥 ========== Cancel button tapped ==========") + print("🎥 Stopping scanner...") + scannerService.stopScanning() + + print("🎥 Calling onCancel callback...") + onCancel() + + print("🎥 Attempting to dismiss view...") + // Try multiple dismiss approaches + DispatchQueue.main.async { + if #available(iOS 15.0, *) { + print("🎥 Using iOS 15+ dismiss()") + dismiss() + } else { + print("🎥 Using presentationMode dismiss()") + presentationMode.wrappedValue.dismiss() + } + } + + print("🎥 Cancel button action complete") + } + .foregroundColor(.white) + } + ToolbarItem(placement: .navigationBarTrailing) { + HStack { + Button("Retry") { + print("🎥 Retry button tapped") + scannerService.resetSession() + setupScanner() + } + .foregroundColor(.white) + + flashlightButton + } + } + } + .onAppear { + print("🎥 ========== BarcodeScannerView.onAppear() ==========") + print("🎥 Current thread: \(Thread.isMainThread ? "MAIN" : "BACKGROUND")") + + // Clear any existing observers first to prevent duplicates + cancellables.removeAll() + + // Check if we can reuse existing session or need to reset + if scannerService.hasExistingSession && !scannerService.isScanning { + print("🎥 Scanner has existing session but not running, attempting quick restart...") + // Try to restart existing session first + scannerService.startScanning() + setupScannerAfterReset() + } else if scannerService.hasExistingSession { + print("🎥 Scanner has existing session and is running, performing reset...") + scannerService.resetService() + + // Wait a moment for reset to complete before proceeding (reduced delay) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { + self.setupScannerAfterReset() + } + } else { + setupScannerAfterReset() + } + + print("🎥 BarcodeScannerView onAppear setup complete") + + // Start scanning stage progression + simulateScanningStages() + } + .onDisappear { + scannerService.stopScanning() + } + .alert(isPresented: $showingPermissionAlert) { + permissionAlert + } + .supportedInterfaceOrientations(.all) + } + + // MARK: - Subviews + + private func scanningOverlay(geometry: GeometryProxy) -> some View { + // Calculate the actual camera preview area + let cameraPreviewArea = calculateActualCameraPreviewArea(geometry: geometry) + + // Position the cutout at the center of the actual camera preview + let cutoutCenter = CGPoint( + x: cameraPreviewArea.midX, + y: cameraPreviewArea.midY + ) + + // Position the white frame with fine-tuning offset + let finetuneOffset: CGFloat = 0 // Adjust this value to fine-tune white frame positioning + let whiteFrameCenter = CGPoint( + x: cameraPreviewArea.midX, + y: cameraPreviewArea.midY - 55 + + // Positive values (like +10) move the frame DOWN + // Negative values (like -10) move the frame UP + + ) + + return ZStack { + // Full screen semi-transparent overlay with cutout + Rectangle() + .fill(Color.black.opacity(0.5)) + .mask( + Rectangle() + .overlay( + Rectangle() + .frame(width: 250, height: 150) + .position(cutoutCenter) + .blendMode(.destinationOut) + ) + ) + .edgesIgnoringSafeArea(.all) + + // Progress feedback at the top + VStack { + ProgressiveScanFeedback( + stage: scanningStage, + progress: progressValue + ) + .padding(.top, 20) + + Spacer() + } + + // Scanning frame positioned at center of camera preview area + ZStack { + Rectangle() + .stroke(scanningStage == .detected ? Color.green : Color.white, lineWidth: scanningStage == .detected ? 3 : 2) + .frame(width: 250, height: 150) + .animation(.easeInOut(duration: 0.3), value: scanningStage) + + if scannerService.isScanning && scanningStage != .detected { + AnimatedScanLine() + } + + if scanningStage == .detected { + Image(systemName: "checkmark.circle.fill") + .font(.system(size: 30)) + .foregroundColor(.green) + .scaleEffect(1.2) + .animation(.spring(response: 0.5, dampingFraction: 0.6), value: scanningStage) + } + } + .position(whiteFrameCenter) + + // Instructions at the bottom + VStack { + Spacer() + + VStack(spacing: 8) { + Text(scanningStage.rawValue) + .font(.headline) + .foregroundColor(.white) + .multilineTextAlignment(.center) + .animation(.easeInOut(duration: 0.2), value: scanningStage) + + if scanningStage == .positioning || scanningStage == .scanning { + VStack(spacing: 4) { + Text("Hold steady for best results") + .font(.caption) + .foregroundColor(.white.opacity(0.8)) + .multilineTextAlignment(.center) + + Text("Supports traditional barcodes and QR codes") + .font(.caption2) + .foregroundColor(.white.opacity(0.6)) + .multilineTextAlignment(.center) + } + } + } + .padding(.horizontal, 20) + .padding(.bottom, geometry.safeAreaInsets.bottom + 60) + } + } + } + + private func calculateActualCameraPreviewArea(geometry: GeometryProxy) -> CGRect { + let screenSize = geometry.size + let safeAreaTop = geometry.safeAreaInsets.top + let safeAreaBottom = geometry.safeAreaInsets.bottom + + // Account for the top navigation area (Cancel/Retry buttons) + let topNavigationHeight: CGFloat = 44 + safeAreaTop + + // Account for bottom instruction area + let bottomInstructionHeight: CGFloat = 120 + safeAreaBottom + + // Available height for camera preview + let availableHeight = screenSize.height - topNavigationHeight - bottomInstructionHeight + let availableWidth = screenSize.width + + // Camera typically uses 4:3 aspect ratio + let cameraAspectRatio: CGFloat = 4.0 / 3.0 + let availableAspectRatio = availableWidth / availableHeight + + let cameraRect: CGRect + + if availableAspectRatio > cameraAspectRatio { + // Screen is wider than camera - camera will be letterboxed horizontally + let cameraWidth = availableHeight * cameraAspectRatio + let xOffset = (availableWidth - cameraWidth) / 2 + cameraRect = CGRect( + x: xOffset, + y: topNavigationHeight, + width: cameraWidth, + height: availableHeight + ) + } else { + // Screen is taller than camera - camera will be letterboxed vertically + let cameraHeight = availableWidth / cameraAspectRatio + let yOffset = topNavigationHeight + (availableHeight - cameraHeight) / 2 + cameraRect = CGRect( + x: 0, + y: yOffset, + width: availableWidth, + height: cameraHeight + ) + } + + return cameraRect + } + + + private func errorOverlay(error: BarcodeScanError) -> some View { + VStack(spacing: 16) { + Image(systemName: "exclamationmark.triangle.fill") + .font(.largeTitle) + .foregroundColor(.orange) + + Text(error.localizedDescription) + .font(.headline) + .multilineTextAlignment(.center) + + if let suggestion = error.recoverySuggestion { + Text(suggestion) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + + HStack(spacing: 16) { + if error == .cameraPermissionDenied { + Button("Settings") { + print("🎥 Settings button tapped") + openSettings() + } + .buttonStyle(.borderedProminent) + } + + VStack(spacing: 8) { + Button("Try Again") { + print("🎥 Try Again button tapped in error overlay") + scannerService.resetSession() + setupScanner() + } + + Button("Check Permissions") { + print("🎥 Check Permissions button tapped") + let status = AVCaptureDevice.authorizationStatus(for: .video) + print("🎥 Current system status: \(status)") + scannerService.testCameraAccess() + + // Clear the current error to test button functionality + scannerService.scanError = nil + + // Request permission again if needed + if status == .notDetermined { + scannerService.requestCameraPermission() + .sink { granted in + print("🎥 Permission request result: \(granted)") + if granted { + setupScanner() + } + } + .store(in: &cancellables) + } else if status != .authorized { + showingPermissionAlert = true + } else { + // Permission is granted, try simple setup + setupScanner() + } + } + .font(.caption) + } + .buttonStyle(.bordered) + } + } + .padding() + .background(.regularMaterial, in: RoundedRectangle(cornerRadius: 16)) + .padding() + } + + + private var flashlightButton: some View { + Button(action: toggleFlashlight) { + Image(systemName: "flashlight.on.fill") + .foregroundColor(.white) + } + } + + private var permissionAlert: Alert { + Alert( + title: Text("Camera Access Required"), + message: Text("Loop needs camera access to scan barcodes. Please enable camera access in Settings."), + primaryButton: .default(Text("Settings")) { + openSettings() + }, + secondaryButton: .cancel() + ) + } + + // MARK: - Methods + + private func setupScannerAfterReset() { + print("🎥 Setting up scanner after reset...") + + // Get fresh camera authorization status + let currentStatus = AVCaptureDevice.authorizationStatus(for: .video) + print("🎥 Camera authorization from system: \(currentStatus)") + print("🎥 Scanner service authorization: \(scannerService.cameraAuthorizationStatus)") + + // Update scanner service status + scannerService.cameraAuthorizationStatus = currentStatus + print("🎥 Updated scanner service authorization to: \(scannerService.cameraAuthorizationStatus)") + + // Test camera access first + print("🎥 Running camera access test...") + scannerService.testCameraAccess() + + // Start scanning immediately + print("🎥 Calling setupScanner()...") + setupScanner() + + // Listen for scan results + print("🎥 Setting up scan result observer...") + scannerService.$lastScanResult + .compactMap { $0 } + .removeDuplicates { $0.barcodeString == $1.barcodeString } // Remove duplicate barcodes + .throttle(for: .milliseconds(500), scheduler: DispatchQueue.main, latest: false) // Throttle rapid scans + .sink { result in + print("🎥 ✅ Code result received: \(result.barcodeString) (Type: \(result.barcodeType))") + self.onBarcodeScanned(result.barcodeString) + + // Clear scan state immediately to prevent rapid duplicate scans + self.scannerService.clearScanState() + print("🔍 Cleared scan state immediately to prevent duplicates") + } + .store(in: &cancellables) + } + + private func setupScanner() { + print("🎥 Setting up scanner, camera status: \(scannerService.cameraAuthorizationStatus)") + + #if targetEnvironment(simulator) + print("🎥 WARNING: Running in iOS Simulator - barcode scanning not supported") + // For simulator, immediately show an error + DispatchQueue.main.async { + self.scannerService.scanError = BarcodeScanError.cameraNotAvailable + } + return + #endif + + guard scannerService.cameraAuthorizationStatus != .denied else { + print("🎥 Camera access denied, showing permission alert") + showingPermissionAlert = true + return + } + + if scannerService.cameraAuthorizationStatus == .notDetermined { + print("🎥 Camera permission not determined, requesting...") + scannerService.requestCameraPermission() + .sink { granted in + print("🎥 Camera permission granted: \(granted)") + if granted { + self.startScanning() + } else { + self.showingPermissionAlert = true + } + } + .store(in: &cancellables) + } else if scannerService.cameraAuthorizationStatus == .authorized { + print("🎥 Camera authorized, starting scanning") + startScanning() + } + } + + private func startScanning() { + print("🎥 BarcodeScannerView.startScanning() called") + + // Simply call the service method - observer already set up in onAppear + scannerService.startScanning() + } + + private func toggleFlashlight() { + guard let device = AVCaptureDevice.default(for: .video), + device.hasTorch else { return } + + do { + try device.lockForConfiguration() + device.torchMode = device.torchMode == .on ? .off : .on + device.unlockForConfiguration() + } catch { + print("Flashlight unavailable") + } + } + + private func simulateScanningStages() { + // Progress through scanning stages with timing + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + withAnimation(.easeInOut(duration: 0.3)) { + scanningStage = .positioning + } + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { + withAnimation(.easeInOut(duration: 0.3)) { + scanningStage = .scanning + } + } + + // This would be triggered by actual barcode detection + // DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) { + // withAnimation(.spring(response: 0.5, dampingFraction: 0.6)) { + // scanningStage = .detected + // } + // } + } + + private func onBarcodeDetected(_ barcode: String) { + // Called when barcode is actually detected + withAnimation(.spring(response: 0.5, dampingFraction: 0.6)) { + scanningStage = .detected + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + withAnimation(.easeInOut(duration: 0.3)) { + scanningStage = .validating + progressValue = 0.3 + } + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { + withAnimation(.easeInOut(duration: 0.3)) { + scanningStage = .lookingUp + progressValue = 0.7 + } + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) { + withAnimation(.spring(response: 0.5, dampingFraction: 0.6)) { + scanningStage = .found + progressValue = 1.0 + } + + // Call the original callback + onBarcodeScanned(barcode) + } + } + + private func openSettings() { + guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else { + print("🎥 ERROR: Could not create settings URL") + return + } + + print("🎥 Opening settings URL: \(settingsUrl)") + UIApplication.shared.open(settingsUrl) { success in + print("🎥 Settings URL opened successfully: \(success)") + } + } +} + +// MARK: - Camera Preview + +/// UIViewRepresentable wrapper for AVCaptureVideoPreviewLayer +struct CameraPreviewView: UIViewRepresentable { + @ObservedObject var scanner: BarcodeScannerService + + func makeUIView(context: Context) -> UIView { + let view = UIView() + view.backgroundColor = .black + return view + } + + func updateUIView(_ uiView: UIView, context: Context) { + // Only proceed if the view has valid bounds and camera is authorized + guard uiView.bounds.width > 0 && uiView.bounds.height > 0, + scanner.cameraAuthorizationStatus == .authorized else { + return + } + + // Check if we already have a preview layer with the same bounds + let existingLayers = uiView.layer.sublayers?.compactMap { $0 as? AVCaptureVideoPreviewLayer } ?? [] + + // If we already have a preview layer with correct bounds, don't recreate + if let existingLayer = existingLayers.first, + existingLayer.frame == uiView.bounds { + print("🎥 Preview layer already exists with correct bounds, skipping") + return + } + + // Remove any existing preview layers + for layer in existingLayers { + layer.removeFromSuperlayer() + } + + // Create new preview layer + if let previewLayer = scanner.getPreviewLayer() { + previewLayer.frame = uiView.bounds + previewLayer.videoGravity = .resizeAspectFill + + // Handle rotation + if let connection = previewLayer.connection, connection.isVideoOrientationSupported { + let orientation = UIDevice.current.orientation + switch orientation { + case .portrait: + connection.videoOrientation = .portrait + case .portraitUpsideDown: + connection.videoOrientation = .portraitUpsideDown + case .landscapeLeft: + connection.videoOrientation = .landscapeRight + case .landscapeRight: + connection.videoOrientation = .landscapeLeft + default: + connection.videoOrientation = .portrait + } + } + + uiView.layer.insertSublayer(previewLayer, at: 0) + print("🎥 Preview layer added to view with frame: \(previewLayer.frame)") + } + } +} + +// MARK: - Animated Scan Line + +/// Animated scanning line overlay +struct AnimatedScanLine: View { + @State private var animationOffset: CGFloat = -75 + + var body: some View { + Rectangle() + .fill( + LinearGradient( + colors: [.clear, .green, .clear], + startPoint: .leading, + endPoint: .trailing + ) + ) + .frame(height: 2) + .offset(y: animationOffset) + .onAppear { + withAnimation( + .easeInOut(duration: 2.0) + .repeatForever(autoreverses: true) + ) { + animationOffset = 75 + } + } + } +} + +// MARK: - Progressive Scan Feedback Component + +/// Progressive feedback panel showing scanning status and progress +struct ProgressiveScanFeedback: View { + let stage: BarcodeScannerView.ScanningStage + let progress: Double + + var body: some View { + VStack(spacing: 12) { + // Progress indicator + HStack(spacing: 8) { + if stage == .lookingUp || stage == .validating { + ProgressView() + .scaleEffect(0.8) + .foregroundColor(.white) + } else { + Circle() + .fill(stageColor) + .frame(width: 12, height: 12) + .scaleEffect(stage == .detected ? 1.3 : 1.0) + .animation(.spring(response: 0.3, dampingFraction: 0.6), value: stage) + } + + Text(stage.rawValue) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.white) + } + + // Progress bar for certain stages + if shouldShowProgress { + ProgressView(value: progress, total: 1.0) + .progressViewStyle(LinearProgressViewStyle(tint: stageColor)) + .frame(width: 200, height: 4) + .background(Color.white.opacity(0.3)) + .cornerRadius(2) + } + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background(Color.black.opacity(0.7)) + .cornerRadius(12) + .onAppear { + simulateProgress() + } + .onChange(of: stage) { _ in + simulateProgress() + } + } + + private var stageColor: Color { + switch stage { + case .initializing, .positioning: + return .orange + case .scanning: + return .blue + case .detected, .found: + return .green + case .validating, .lookingUp: + return .yellow + case .error: + return .red + } + } + + private var shouldShowProgress: Bool { + switch stage { + case .validating, .lookingUp: + return true + default: + return false + } + } + + private func simulateProgress() { + // Simulate progress for stages that show progress bar + if shouldShowProgress { + withAnimation(.easeInOut(duration: 1.5)) { + // This would be replaced with actual progress in a real implementation + } + } + } +} + +// MARK: - Preview + +#if DEBUG +struct BarcodeScannerView_Previews: PreviewProvider { + static var previews: some View { + BarcodeScannerView( + onBarcodeScanned: { barcode in + print("Scanned: \(barcode)") + }, + onCancel: { + print("Cancelled") + } + ) + } +} +#endif diff --git a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift new file mode 100644 index 0000000000..3bb12ee058 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift @@ -0,0 +1,226 @@ +// +// FoodSearchBar.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for OpenFoodFacts Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// A search bar component for food search with barcode scanning and AI analysis capabilities +struct FoodSearchBar: View { + @Binding var searchText: String + let onBarcodeScanTapped: () -> Void + let onAICameraTapped: () -> Void + + @State private var showingBarcodeScanner = false + @State private var barcodeButtonPressed = false + @State private var aiButtonPressed = false + @State private var aiPulseAnimation = false + + @FocusState private var isSearchFieldFocused: Bool + + var body: some View { + HStack(spacing: 12) { + // Expanded search field with icon + HStack(spacing: 8) { + Image(systemName: "magnifyingglass") + .foregroundColor(.secondary) + .font(.system(size: 16)) + + TextField( + NSLocalizedString("Search foods...", comment: "Placeholder text for food search field"), + text: $searchText + ) + .focused($isSearchFieldFocused) + .textFieldStyle(PlainTextFieldStyle()) + .autocorrectionDisabled() + .textInputAutocapitalization(.never) + .onSubmit { + // Dismiss keyboard when user hits return + isSearchFieldFocused = false + } + + // Clear button + if !searchText.isEmpty { + Button(action: { + // Instant haptic feedback + UIImpactFeedbackGenerator(style: .light).impactOccurred() + + withAnimation(.easeInOut(duration: 0.1)) { + searchText = "" + } + }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.secondary) + .font(.system(size: 16)) + } + .buttonStyle(PlainButtonStyle()) + } + } + .padding(.horizontal, 12) + .padding(.vertical, 8) + .background(Color(.systemGray6)) + .cornerRadius(10) + .frame(maxWidth: .infinity) // Allow search field to expand + + // Right-aligned buttons group + HStack(spacing: 12) { + // Barcode scan button + Button(action: { + print("🔍 DEBUG: Barcode button tapped") + print("🔍 DEBUG: showingBarcodeScanner before: \(showingBarcodeScanner)") + + // Instant haptic feedback + UIImpactFeedbackGenerator(style: .medium).impactOccurred() + + // Dismiss keyboard first if active + withAnimation(.easeInOut(duration: 0.1)) { + isSearchFieldFocused = false + } + + DispatchQueue.main.async { + showingBarcodeScanner = true + print("🔍 DEBUG: showingBarcodeScanner set to: \(showingBarcodeScanner)") + } + + onBarcodeScanTapped() + print("🔍 DEBUG: onBarcodeScanTapped() called") + }) { + BarcodeIcon() + .frame(width: 60, height: 40) + .scaleEffect(barcodeButtonPressed ? 0.95 : 1.0) + } + .frame(width: 72, height: 48) + .background(Color(.systemGray6)) + .cornerRadius(10) + .accessibilityLabel(NSLocalizedString("Scan barcode", comment: "Accessibility label for barcode scan button")) + .onTapGesture { + // Button press animation + withAnimation(.easeInOut(duration: 0.1)) { + barcodeButtonPressed = true + } + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + withAnimation(.easeInOut(duration: 0.1)) { + barcodeButtonPressed = false + } + } + } + + // AI Camera button + Button(action: { + // Instant haptic feedback + UIImpactFeedbackGenerator(style: .medium).impactOccurred() + + onAICameraTapped() + }) { + AICameraIcon() + .frame(width: 42, height: 42) + .scaleEffect(aiButtonPressed ? 0.95 : 1.0) + } + .frame(width: 48, height: 48) + .background(Color(.systemGray6)) + .cornerRadius(10) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.purple.opacity(aiPulseAnimation ? 0.8 : 0.3), lineWidth: 2) + .scaleEffect(aiPulseAnimation ? 1.05 : 1.0) + .animation(.easeInOut(duration: 1.5).repeatForever(autoreverses: true), value: aiPulseAnimation) + ) + .accessibilityLabel(NSLocalizedString("AI food analysis", comment: "Accessibility label for AI camera button")) + .onTapGesture { + // Button press animation + withAnimation(.easeInOut(duration: 0.1)) { + aiButtonPressed = true + } + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + withAnimation(.easeInOut(duration: 0.1)) { + aiButtonPressed = false + } + } + } + .onAppear { + // Start pulsing animation + aiPulseAnimation = true + } + } + } + .padding(.horizontal) + .sheet(isPresented: $showingBarcodeScanner) { + NavigationView { + BarcodeScannerView( + onBarcodeScanned: { barcode in + print("🔍 DEBUG: FoodSearchBar received barcode: \(barcode)") + showingBarcodeScanner = false + // Barcode will be handled by CarbEntryViewModel through BarcodeScannerService publisher + }, + onCancel: { + print("🔍 DEBUG: FoodSearchBar barcode scan cancelled") + showingBarcodeScanner = false + } + ) + } + .navigationViewStyle(StackNavigationViewStyle()) + } + } +} + +// MARK: - Barcode Icon Component + +/// Custom barcode icon that adapts to dark/light mode +struct BarcodeIcon: View { + @Environment(\.colorScheme) private var colorScheme + + var body: some View { + Group { + if colorScheme == .dark { + // Dark mode icon + Image("icon-barcode-darkmode") + .resizable() + .aspectRatio(contentMode: .fit) + } else { + // Light mode icon + Image("icon-barcode-lightmode") + .resizable() + .aspectRatio(contentMode: .fit) + } + } + } +} + +// MARK: - AI Camera Icon Component + +/// AI camera icon for food analysis using system icon +struct AICameraIcon: View { + var body: some View { + Image(systemName: "sparkles") + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(.purple).frame(width: 24, height: 24) // Set specific size + } +} + +// MARK: - Preview + +#if DEBUG +struct FoodSearchBar_Previews: PreviewProvider { + static var previews: some View { + VStack(spacing: 20) { + FoodSearchBar( + searchText: .constant(""), + onBarcodeScanTapped: {}, + onAICameraTapped: {} + ) + + FoodSearchBar( + searchText: .constant("bread"), + onBarcodeScanTapped: {}, + onAICameraTapped: {} + ) + } + .padding() + .previewLayout(.sizeThatFits) + } +} +#endif diff --git a/Loop/Views/FoodFinder/FoodFinder_SearchResultsView.swift b/Loop/Views/FoodFinder/FoodFinder_SearchResultsView.swift new file mode 100644 index 0000000000..8e031fd895 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_SearchResultsView.swift @@ -0,0 +1,466 @@ +// +// FoodSearchResultsView.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for OpenFoodFacts Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKit + +/// View displaying search results from OpenFoodFacts food database +struct FoodSearchResultsView: View { + let searchResults: [OpenFoodFactsProduct] + let isSearching: Bool + let errorMessage: String? + let onProductSelected: (OpenFoodFactsProduct) -> Void + + var body: some View { + VStack(spacing: 0) { + if isSearching { + searchingView + .onAppear { + print("🔍 FoodSearchResultsView: Showing searching state") + } + } else if let errorMessage = errorMessage { + errorView(message: errorMessage) + .onAppear { + print("🔍 FoodSearchResultsView: Showing error state - \(errorMessage)") + } + } else if searchResults.isEmpty { + emptyResultsView + .onAppear { + print("🔍 FoodSearchResultsView: Showing empty results state") + } + } else { + resultsListView + .onAppear { + print("🔍 FoodSearchResultsView: Showing \(searchResults.count) results") + } + } + } + .onAppear { + print("🔍 FoodSearchResultsView body: isSearching=\(isSearching), results=\(searchResults.count), error=\(errorMessage ?? "none")") + } + } + + // MARK: - Subviews + + private var searchingView: some View { + VStack(spacing: 16) { + // Animated search icon with pulsing effect + ZStack { + // Outer pulsing ring + Circle() + .stroke(Color.blue.opacity(0.3), lineWidth: 2) + .frame(width: 70, height: 70) + .scaleEffect(pulseScale) + .animation( + .easeInOut(duration: 1.2) + .repeatForever(autoreverses: true), + value: pulseScale + ) + + // Inner filled circle + Circle() + .fill(Color.blue.opacity(0.15)) + .frame(width: 60, height: 60) + .scaleEffect(secondaryPulseScale) + .animation( + .easeInOut(duration: 0.8) + .repeatForever(autoreverses: true), + value: secondaryPulseScale + ) + + // Rotating magnifying glass + Image(systemName: "magnifyingglass") + .font(.title) + .foregroundColor(.blue) + .rotationEffect(rotationAngle) + .animation( + .linear(duration: 2.0) + .repeatForever(autoreverses: false), + value: rotationAngle + ) + } + .onAppear { + pulseScale = 1.3 + secondaryPulseScale = 1.1 + rotationAngle = .degrees(360) + } + + VStack(spacing: 6) { + HStack(spacing: 4) { + Text(NSLocalizedString("Searching foods", comment: "Text shown while searching for foods")) + .font(.headline) + .foregroundColor(.primary) + + // Animated dots + HStack(spacing: 2) { + ForEach(0..<3) { index in + Circle() + .fill(Color.blue) + .frame(width: 4, height: 4) + .scaleEffect(dotScales[index]) + .animation( + .easeInOut(duration: 0.6) + .repeatForever() + .delay(Double(index) * 0.2), + value: dotScales[index] + ) + } + } + .onAppear { + for i in 0..<3 { + dotScales[i] = 1.5 + } + } + } + + Text(NSLocalizedString("Finding the best matches for you", comment: "Subtitle shown while searching for foods")) + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + } + .padding(.vertical, 24) + .frame(maxWidth: .infinity, alignment: .center) + } + + @State private var pulseScale: CGFloat = 1.0 + @State private var secondaryPulseScale: CGFloat = 1.0 + @State private var rotationAngle: Angle = .degrees(0) + @State private var dotScales: [CGFloat] = [1.0, 1.0, 1.0] + + private func errorView(message: String) -> some View { + VStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle") + .font(.title2) + .foregroundColor(.orange) + + Text(NSLocalizedString("Search Error", comment: "Title for food search error")) + .font(.headline) + .foregroundColor(.primary) + + Text(message) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .padding() + .frame(maxWidth: .infinity, alignment: .center) + } + + private var emptyResultsView: some View { + VStack(spacing: 12) { + Image(systemName: "doc.text.magnifyingglass") + .font(.title) + .foregroundColor(.orange) + + Text(NSLocalizedString("No Foods Found", comment: "Title when no food search results")) + .font(.headline) + .foregroundColor(.primary) + + VStack(spacing: 8) { + Text(NSLocalizedString("Check your spelling and try again", comment: "Primary suggestion when no food search results")) + .font(.subheadline) + .foregroundColor(.primary) + .multilineTextAlignment(.center) + + Text(NSLocalizedString("Try simpler terms like \"bread\" or \"apple\", or scan a barcode", comment: "Secondary suggestion when no food search results")) + .font(.caption) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + + // Helpful suggestions + VStack(spacing: 4) { + Text("💡 Search Tips:") + .font(.caption) + .foregroundColor(.secondary) + .fontWeight(.medium) + + VStack(alignment: .leading, spacing: 2) { + Text("• Use simple, common food names") + Text("• Try brand names (e.g., \"Cheerios\")") + Text("• Check spelling carefully") + Text("• Use the barcode scanner for packaged foods") + } + .font(.caption2) + .foregroundColor(.secondary) + } + .padding(.top, 8) + } + .padding() + .frame(maxWidth: .infinity, alignment: .center) + } + + private var resultsListView: some View { + ScrollView { + LazyVStack(spacing: 0) { + ForEach(searchResults, id: \.id) { product in + FoodSearchResultRow( + product: product, + onSelected: { onProductSelected(product) } + ) + .background(Color(.systemBackground)) + + if product.id != searchResults.last?.id { + Divider() + .padding(.leading, 16) + } + } + } + .frame(maxWidth: .infinity) + } + .frame(maxHeight: 300) + } +} + +// MARK: - Food Search Result Row + +private struct FoodSearchResultRow: View { + let product: OpenFoodFactsProduct + let onSelected: () -> Void + + var body: some View { + HStack(alignment: .top, spacing: 12) { + // Product image with async loading + Group { + if let thumbnail = FruitThumbnailProvider.thumbnail(for: product.displayName) { + // Show emoji-based fruit/veg thumbnail for simple whole foods + thumbnail + .frame(width: 50, height: 50) + .background(Color(.systemGray6)) + .clipShape(RoundedRectangle(cornerRadius: 8)) + } else if let imageURL = product.imageFrontURL ?? product.imageURL, + let url = URL(string: imageURL) { + AsyncImage(url: url) { image in + image + .resizable() + .aspectRatio(contentMode: .fill) + } placeholder: { + RoundedRectangle(cornerRadius: 8) + .fill(Color(.systemGray5)) + .overlay( + ProgressView() + .scaleEffect(0.7) + ) + } + .frame(width: 50, height: 50) + .clipShape(RoundedRectangle(cornerRadius: 8)) + } else { + RoundedRectangle(cornerRadius: 8) + .fill(Color(.systemGray5)) + .frame(width: 50, height: 50) + .overlay( + Image(systemName: "takeoutbag.and.cup.and.straw") + .font(.title3) + .foregroundColor(.secondary) + ) + } + } + + // Product details + VStack(alignment: .leading, spacing: 4) { + Text(product.displayName) + .font(.headline) + .foregroundColor(.primary) + .lineLimit(2) + .multilineTextAlignment(.leading) + .fixedSize(horizontal: false, vertical: true) + + if let brands = product.brands, !brands.isEmpty { + Text(brands) + .font(.subheadline) + .foregroundColor(.secondary) + .lineLimit(1) + .truncationMode(.tail) + } + + // Essential nutrition info + VStack(alignment: .leading, spacing: 2) { + VStack(alignment: .leading, spacing: 1) { + // Carbs per serving or per 100g + if let carbsPerServing = product.carbsPerServing { + Text(String(format: "%.1fg carbs per %@", carbsPerServing, product.servingSizeDisplay)) + .font(.caption) + .foregroundColor(.blue) + .lineLimit(2) + .fixedSize(horizontal: false, vertical: true) + } else { + Text(String(format: "%.1fg carbs per 100g", product.nutriments.carbohydrates)) + .font(.caption) + .foregroundColor(.blue) + .lineLimit(1) + } + } + + // Additional nutrition if available + HStack(spacing: 8) { + if let protein = product.nutriments.proteins { + Text(String(format: "%.1fg protein", protein)) + .font(.caption2) + .foregroundColor(.secondary) + } + + if let fat = product.nutriments.fat { + Text(String(format: "%.1fg fat", fat)) + .font(.caption2) + .foregroundColor(.secondary) + } + + Spacer() + } + } + } + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + .onTapGesture { + print("🔍 User tapped on food result: \(product.displayName)") + onSelected() + } + + // Selection indicator + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + } +} + +// MARK: - Lightweight Fruit/Veg Thumbnails + +/// Provides emoji-based thumbnails for simple whole foods (e.g., apple, banana). +/// Keeps UI visually helpful when provider (USDA) does not offer images. +private enum FruitThumbnailProvider { + static func thumbnail(for name: String) -> AnyView? { + let n = name.lowercased() + let emoji: String? = { + switch true { + // Fruits + case n.contains("apple"): return "🍎" + case n.contains("banana"): return "🍌" + case n.contains("orange"): return "🍊" + case n.contains("grape"): return "🍇" + case n.contains("strawberry"): return "🍓" + case n.contains("blueberry") || n.contains("blueberries"): return "🫐" + case n.contains("cherry") || n.contains("cherries"): return "🍒" + case n.contains("pear"): return "🍐" + case n.contains("peach"): return "🍑" + case n.contains("mango"): return "🥭" + case n.contains("pineapple"): return "🍍" + case n.contains("watermelon"): return "🍉" + case n.contains("melon"): return "🍈" + case n.contains("kiwi"): return "🥝" + case n.contains("coconut"): return "🥥" + case n.contains("lemon"): return "🍋" + case n.contains("lime"): return "🟢" + case n.contains("avocado"): return "🥑" + // Vegetables + case n.contains("tomato"): return "🍅" + case n.contains("carrot"): return "🥕" + case n.contains("broccoli"): return "🥦" + case n.contains("cauliflower"): return "🥦" + case n.contains("lettuce") || n.contains("spinach") || n.contains("kale") || n.contains("greens"): return "🥬" + case n.contains("cucumber") || n.contains("zucchini"): return "🥒" + case n.contains("pepper") && !n.contains("chili"): return "🫑" + case n.contains("chili") || n.contains("chilli") || n.contains("jalapeno"): return "🌶️" + case n.contains("corn"): return "🌽" + case n.contains("onion"): return "🧅" + case n.contains("garlic"): return "🧄" + case n.contains("mushroom"): return "🍄" + case n.contains("potato"): return "🥔" + case n.contains("sweet potato") || n.contains("yam"): return "🍠" + case n.contains("olive") || n.contains("olives"): return "🫒" + case n.contains("salad"): return "🥗" + // Grains / staples + case n.contains("rice"): return "🍚" + case n.contains("pasta") || n.contains("spaghetti") || n.contains("noodle") || n.contains("noodles"): return "🍝" + case n.contains("bread"): return "🍞" + case n.contains("bagel"): return "🥯" + case n.contains("oatmeal") || n.contains("oats") || n.contains("cereal"): return "🥣" + case n.contains("tortilla") || n.contains("flatbread") || n.contains("pita"): return "🫓" + // Proteins / dairy + case n.contains("egg"): return "🥚" + case n.contains("milk"): return "🥛" + case n.contains("yogurt") || n.contains("yoghurt"): return "🥛" + case n.contains("cheese"): return "🧀" + case n.contains("chicken") || n.contains("turkey"): return "🍗" + case n.contains("beef") || n.contains("steak"): return "🥩" + case n.contains("pork"): return "🍖" + case n.contains("fish") || n.contains("salmon") || n.contains("tuna"): return "🐟" + case n.contains("shrimp") || n.contains("prawn"): return "🍤" + case n.contains("bean") || n.contains("lentil") || n.contains("chickpea") || n.contains("legume"): return "🫘" + case n.contains("nut") || n.contains("almond") || n.contains("walnut") || n.contains("peanut"): return "🥜" + default: return nil + } + }() + guard let e = emoji else { return nil } + let view = Text(e) + .font(.system(size: 28)) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(Color(.systemGray4), lineWidth: 0.5) + ) + return AnyView(view) + } +} + +#if DEBUG +struct FoodSearchResultsView_Previews: PreviewProvider { + static var previews: some View { + VStack { + // Loading state + FoodSearchResultsView( + searchResults: [], + isSearching: true, + errorMessage: nil, + onProductSelected: { _ in } + ) + .frame(height: 100) + + Divider() + + // Results state + FoodSearchResultsView( + searchResults: [ + OpenFoodFactsProduct.sample(name: "Whole Wheat Bread", carbs: 45.0, servingSize: "2 slices (60g)"), + OpenFoodFactsProduct.sample(name: "Brown Rice", carbs: 75.0), + OpenFoodFactsProduct.sample(name: "Apple", carbs: 15.0, servingSize: "1 medium (182g)") + ], + isSearching: false, + errorMessage: nil, + onProductSelected: { _ in } + ) + + Divider() + + // Error state + FoodSearchResultsView( + searchResults: [], + isSearching: false, + errorMessage: "Network connection failed", + onProductSelected: { _ in } + ) + .frame(height: 150) + + Divider() + + // Empty state + FoodSearchResultsView( + searchResults: [], + isSearching: false, + errorMessage: nil, + onProductSelected: { _ in } + ) + .frame(height: 150) + } + .previewLayout(.sizeThatFits) + } +} +#endif diff --git a/Loop/Views/FoodFinder/FoodFinder_SettingsView.swift b/Loop/Views/FoodFinder/FoodFinder_SettingsView.swift new file mode 100644 index 0000000000..5fceb5531c --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_SettingsView.swift @@ -0,0 +1,727 @@ +// +// AISettingsView.swift +// Loop +// +// Created by Taylor Patterson, Coded by Claude Code for AI Settings Configuration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Simple secure field that uses proper SwiftUI components +struct StableSecureField: View { + let placeholder: String + @Binding var text: String + let isSecure: Bool + + var body: some View { + let field: some View = Group { + if isSecure { + SecureField(placeholder, text: $text) + } else { + TextField(placeholder, text: $text) + } + } + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .autocorrectionDisabled() + .overlay(alignment: .trailing) { + if !text.isEmpty { + Button(action: { text = "" }) { + Image(systemName: "xmark.circle.fill").foregroundColor(.secondary) + } + .buttonStyle(.plain) + .padding(.trailing, 8) + } + } + // Return the composed field view + field + } +} + +// Small reusable modifier to add a clear (x) button to standard TextField inputs +private struct ClearButton: ViewModifier { + @Binding var text: String + func body(content: Content) -> some View { + content.overlay(alignment: .trailing) { + if !text.isEmpty { + Button(action: { text = "" }) { + Image(systemName: "xmark.circle.fill").foregroundColor(.secondary) + } + .buttonStyle(.plain) + .padding(.trailing, 8) + } + } + } +} + +/// Settings view for configuring AI food analysis +struct AISettingsView: View { + @ObservedObject private var aiService = ConfigurableAIService.shared + @Environment(\.openURL) var openURL + + // All persisted settings use @AppStorage so they read/write UserDefaults directly + @AppStorage("com.loopkit.Loop.claudeAPIKey") private var claudeKey: String = "" + @AppStorage("com.loopkit.Loop.claudeQuery") private var claudeQuery: String = "" + @AppStorage("com.loopkit.Loop.openAIAPIKey") private var openAIKey: String = "" + @AppStorage("com.loopkit.Loop.openAIQuery") private var openAIQuery: String = "" + @AppStorage("com.loopkit.Loop.googleGeminiAPIKey") private var googleGeminiKey: String = "" + @AppStorage("com.loopkit.Loop.googleGeminiQuery") private var googleGeminiQuery: String = "" + @AppStorage("com.loopkit.Loop.usdaAPIKey") private var usdaAPIKey: String = "" + // Bring Your Own (OpenAI-compatible) + @AppStorage("com.loopkit.Loop.customAIBaseURL") private var customAPIBaseURL: String = "" + @AppStorage("com.loopkit.Loop.customAIAPIKey") private var customAPIKey: String = "" + @AppStorage("com.loopkit.Loop.customAIModel") private var customModel: String = "" + @AppStorage("com.loopkit.Loop.customAIAPIVersion") private var customAPIVersion: String = "" + @AppStorage("com.loopkit.Loop.customAIOrganization") private var customOrganizationID: String = "" + @AppStorage("com.loopkit.Loop.customAIEndpointPath") private var customAPIEndpointPath: String = "" + // Feature flags + @AppStorage("com.loopkit.Loop.foodSearchEnabled") private var foodSearchEnabled: Bool = false + @AppStorage("com.loopkit.Loop.advancedDosingRecommendationsEnabled") private var advancedDosingRecommendationsEnabled: Bool = false + @AppStorage("com.loopkit.Loop.useGPT5ForOpenAI") private var useGPT5ForOpenAI: Bool = false + + // Non-persisted UI state + @State private var isTestingBYO: Bool = false + @State private var byoTestMessage: String = "" + @State private var showBYOTestAlert: Bool = false + @State private var byoLastTestOK: Bool = false + @State private var showingAPIKeyAlert = false + // API Key visibility toggles - start with keys hidden (secure) + @State private var showClaudeKey: Bool = false + @State private var showOpenAIKey: Bool = false + @State private var showGoogleGeminiKey: Bool = false + @State private var showUSDAKey: Bool = false + @State private var showCustomKey: Bool = false + @State private var isCheckingGPT5Availability: Bool = false + @State private var showGPT5AvailabilityAlert: Bool = false + @State private var gpt5AvailabilityMessage: String = "" + // Selected provider tab: 0 OpenAI, 1 Claude, 2 Gemini, 3 BYO + @State private var selectedTab: Int = { + let pImage = UserDefaults.standard.aiImageProvider.lowercased() + if pImage.contains("bring") { return 3 } + else if pImage.contains("claude") { return 1 } + else if pImage.contains("gemini") || pImage.contains("google") { return 2 } + else { return 0 } + }() + + var body: some View { + Form { + featureToggleSection + if foodSearchEnabled { + providerMappingSection + usdaKeySection + providerSelectionSection + analysisModeSection + advancedOptionsSection + } + } + .navigationTitle("FoodFinder Settings") + .navigationBarTitleDisplayMode(.inline) + .alert(isPresented: $showingAPIKeyAlert) { + Alert( + title: Text("API Key Required"), + message: Text("This AI provider requires an API key. Please enter your API key in the settings below."), + dismissButton: .default(Text("OK")) + ) + } + .alert(isPresented: $showBYOTestAlert) { + Alert( + title: Text("BYO Connection Test"), + message: Text(byoTestMessage), + dismissButton: .default(Text("OK")) + ) + } + .alert("GPT-5 Not Available", isPresented: $showGPT5AvailabilityAlert, actions: { + Button("OK", role: .cancel) { + gpt5AvailabilityMessage = "" + } + }, message: { + Text(gpt5AvailabilityMessage) + }) + } +} + +// Helper views and methods +extension AISettingsView { + private var endpointPathError: String? { + let p = customAPIEndpointPath.trimmingCharacters(in: .whitespacesAndNewlines) + if p.isEmpty { return nil } + if p.contains("://") { return "Enter only the path, not a full URL (e.g., /v1/chat/completions)." } + if p.contains(" ") { return "Path cannot contain spaces." } + return nil + } + + private func normalizedPath(_ path: String) -> String { + let p = path.trimmingCharacters(in: .whitespacesAndNewlines) + if p.isEmpty { return "/v1/chat/completions" } + return p.hasPrefix("/") ? p : "/" + p + } + + private var endpointPreview: String { + let base = customAPIBaseURL.trimmingCharacters(in: .whitespacesAndNewlines) + guard !base.isEmpty else { return "" } + let trimmedBase = base.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + let isAzure = base.lowercased().contains(".openai.azure.com") || !customAPIVersion.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty + if isAzure { + let dep = customModel.trimmingCharacters(in: .whitespacesAndNewlines) + let ver = customAPIVersion.trimmingCharacters(in: .whitespacesAndNewlines) + let depDisp = dep.isEmpty ? "" : dep + let verDisp = ver.isEmpty ? "" : ver + return "\(trimmedBase)/openai/deployments/\(depDisp)/chat/completions?api-version=\(verDisp)" + } else { + let path = normalizedPath(customAPIEndpointPath) + return "\(trimmedBase)\(path)" + } + } + + // MARK: Section builders (to help type-checker) + private var featureToggleSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "fork.knife.circle.fill") + .foregroundColor(.purple) + Text("FOODFINDER") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + .lineLimit(1) + .layoutPriority(1) + } + Toggle("Enable FoodFinder", isOn: $foodSearchEnabled) + Text("Enable this to show FoodFinder in the carb entry screen. Requires Internet connection. When disabled, the feature is hidden but settings are preserved.") + .font(.caption) + .foregroundColor(.secondary) + if foodSearchEnabled { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 6) { + Image(systemName: "cross.fill") + .foregroundColor(.red) + Text("MEDICAL DISCLAIMER") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + .lineLimit(1) + } + Text("AI nutritional estimates are approximations only. Verify information before dosing; this is not medical advice.") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + } + } + + private var providerMappingSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "slider.horizontal.3") + .foregroundColor(.blue) + Text("FOODFINDER PROVIDER") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + .lineLimit(1) + .layoutPriority(1) + } + Text("Configure the service used for each type of search. AI Image Analysis controls what happens when you take photos of food.") + .font(.caption) + .foregroundColor(.secondary) + + ForEach(SearchType.allCases, id: \.self) { searchType in + VStack(alignment: .leading, spacing: 4) { + HStack { + Text(searchType.rawValue).font(.headline) + Spacer() + } + Text(searchType.description).font(.caption).foregroundColor(.secondary) + Picker(selection: getBindingForSearchType(searchType)) { + ForEach(aiService.getAvailableProvidersForSearchType(searchType), id: \.self) { provider in + Text(provider.rawValue).tag(provider) + } + } label: { EmptyView() } + .pickerStyle(MenuPickerStyle()) + } + .padding(.vertical, 4) + } + } + } + } + + private var providerSelectionSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 8) { + Image(systemName: "sparkles").foregroundColor(.purple) + Text("API KEY CONFIGURATION") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + Picker("Provider", selection: $selectedTab) { + Text("OpenAI Chat GPT").tag(0) + Text("Anthropic Claude").tag(1) + Text("Google Gemini").tag(2) + Text("BYO").tag(3) + } + .pickerStyle(.segmented) + .onChange(of: selectedTab) { newVal in + switch newVal { + case 0: + UserDefaults.standard.aiImageProvider = "OpenAI (ChatGPT API)" + case 1: + UserDefaults.standard.aiImageProvider = "Anthropic (Claude API)" + case 2: + UserDefaults.standard.aiImageProvider = "Google (Gemini API)" + case 3: + UserDefaults.standard.aiImageProvider = "Bring your own (Custom)" + default: + break + } + } + Text("Choose which AI service you want to use for food analysis") + .font(.footnote) + .foregroundColor(.secondary) + + Group { + if selectedTab == 0 { openAIKeyRow } + else if selectedTab == 1 { claudeKeyRow } + else if selectedTab == 2 { geminiKeyRow } + else { bringYourOwnRow } + } + } + } + } + + // USDA database key section (optional but recommended) + private var usdaKeySection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 8) { + Image(systemName: "leaf").foregroundColor(.green) + Text("USDA DATABASE (TEXT SEARCH)") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + HStack(spacing: 8) { + StableSecureField(placeholder: "Enter your USDA API key (optional)", text: $usdaAPIKey, isSecure: !showUSDAKey) + Button(action: { showUSDAKey.toggle() }) { + Image(systemName: showUSDAKey ? "eye.slash" : "eye").foregroundColor(.green) + } + .buttonStyle(.plain) + } + Button(action: { if let url = URL(string: "https://fdc.nal.usda.gov/api-guide") { openURL(url) } }) { + HStack { Image(systemName: "info.circle"); Text("How to get a key") } + .foregroundColor(.green) + } + .buttonStyle(.plain) + VStack(alignment: .leading, spacing: 2) { + Text("How to obtain a USDA API key:") + .font(.caption) + .fontWeight(.semibold) + Text("1. Open the USDA FoodData Central API Guide. 2. Sign in or create an account. 3. Request a new API key. 4. Copy and paste it here. The key activates immediately.") + .font(.caption) + .foregroundColor(.secondary) + } + VStack(alignment: .leading, spacing: 2) { + Text("Why add a key?") + .font(.caption) + .fontWeight(.semibold) + Text("Without your own key, searches use a public DEMO_KEY that is heavily rate-limited and often returns 429 errors. Adding your free personal key avoids this.") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + } + + private var openAIKeyRow: some View { + Group { + HStack(spacing: 8) { + Image(systemName: "brain.head.profile").foregroundColor(.blue) + Text("ChatGPT Configuration").font(.headline).foregroundColor(.blue) + } + HStack { + StableSecureField(placeholder: "Enter your OpenAI API key", text: $openAIKey, isSecure: !showOpenAIKey) + Button(action: { showOpenAIKey.toggle() }) { + Image(systemName: showOpenAIKey ? "eye.slash" : "eye").foregroundColor(.blue) + } + .buttonStyle(.plain) + } + Button(action: { if let url = URL(string: "https://platform.openai.com/api-keys") { openURL(url) } }) { + HStack { Image(systemName: "info.circle"); Text("How to get API keys") } + .foregroundColor(.blue) + } + .buttonStyle(.plain) + // GPT-5 option (OpenAI only) + Toggle("Use GPT-5 Models", isOn: $useGPT5ForOpenAI) + .disabled(!foodSearchEnabled || isCheckingGPT5Availability) + .onChange(of: useGPT5ForOpenAI) { newValue in + aiService.objectWillChange.send() + guard newValue else { return } + isCheckingGPT5Availability = true + Task { + let trimmedKey = openAIKey.trimmingCharacters(in: .whitespacesAndNewlines) + let keyToCheck = trimmedKey.isEmpty ? (ConfigurableAIService.shared.getAPIKey(for: .openAI) ?? "") : trimmedKey + guard !keyToCheck.isEmpty else { + await MainActor.run { + useGPT5ForOpenAI = false + aiService.objectWillChange.send() + isCheckingGPT5Availability = false + gpt5AvailabilityMessage = "Enter your OpenAI API key before enabling GPT-5 models." + showGPT5AvailabilityAlert = true + } + return + } + do { + try await OpenAIFoodAnalysisService.shared.ensureGPT5Availability(apiKey: keyToCheck, organizationID: nil) + } catch { + await MainActor.run { + useGPT5ForOpenAI = false + aiService.objectWillChange.send() + gpt5AvailabilityMessage = error.localizedDescription + showGPT5AvailabilityAlert = true + } + } + await MainActor.run { + isCheckingGPT5Availability = false + } + } + } + if isCheckingGPT5Availability { + HStack(spacing: 8) { + ProgressView() + .progressViewStyle(.circular) + Text("Verifying GPT-5 access…") + .font(.caption2) + .foregroundColor(.secondary) + } + } + Text("OpenAI: highly accurate vision models (GPT-4o/GPT-5). ~$0.01/image. GPT-5 are large models - they will be slower.") + .font(.caption) + .foregroundColor(.secondary) + } + } + + private var claudeKeyRow: some View { + Group { + HStack(spacing: 8) { + Image(systemName: "bolt.heart").foregroundColor(.orange) + Text("Claude Configuration").font(.headline).foregroundColor(.orange) + } + HStack { + StableSecureField(placeholder: "Enter your Claude API key", text: $claudeKey, isSecure: !showClaudeKey) + Button(action: { showClaudeKey.toggle() }) { + Image(systemName: showClaudeKey ? "eye.slash" : "eye").foregroundColor(.orange) + } + .buttonStyle(.plain) + } + Button(action: { if let url = URL(string: "https://console.anthropic.com/settings/keys") { openURL(url) } }) { + HStack { Image(systemName: "info.circle"); Text("How to get API keys") } + .foregroundColor(.orange) + } + .buttonStyle(.plain) + Text("Anthropic Claude: excellent reasoning for detailed analysis.") + .font(.caption) + .foregroundColor(.secondary) + } + } + + private var geminiKeyRow: some View { + Group { + HStack(spacing: 8) { + Image(systemName: "sparkles").foregroundColor(.green) + Text("Gemini Configuration").font(.headline).foregroundColor(.green) + } + HStack { + StableSecureField(placeholder: "Enter your Google Gemini API key", text: $googleGeminiKey, isSecure: !showGoogleGeminiKey) + Button(action: { showGoogleGeminiKey.toggle() }) { + Image(systemName: showGoogleGeminiKey ? "eye.slash" : "eye").foregroundColor(.green) + } + .buttonStyle(.plain) + } + Button(action: { if let url = URL(string: "https://aistudio.google.com/app/apikey") { openURL(url) } }) { + HStack { Image(systemName: "info.circle"); Text("How to get API keys") } + .foregroundColor(.green) + } + .buttonStyle(.plain) + Text("Google Gemini: great recognition with generous free limits.") + .font(.caption) + .foregroundColor(.secondary) + } + } + + private var bringYourOwnRow: some View { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 8) { + Image(systemName: "sparkles").foregroundColor(.purple) + Text("Bring your own (OpenAI-compatible)").font(.headline).foregroundColor(.purple) + if byoLastTestOK { + Image(systemName: "checkmark.circle.fill").foregroundColor(.green) + } + } + TextField("Base URL (e.g., https://api.openai.com)", text: $customAPIBaseURL) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .autocorrectionDisabled() + .onChange(of: customAPIBaseURL) { _ in byoLastTestOK = false } + .modifier(ClearButton(text: $customAPIBaseURL)) + HStack { + StableSecureField(placeholder: "Enter your API key", text: $customAPIKey, isSecure: !showCustomKey) + Button(action: { showCustomKey.toggle() }) { + Image(systemName: showCustomKey ? "eye.slash" : "eye").foregroundColor(.purple) + } + .buttonStyle(.plain) + } + .onChange(of: customAPIKey) { _ in byoLastTestOK = false } + TextField(customAPIBaseURL.lowercased().contains(".openai.azure.com") ? "Deployment name (Azure), e.g., gpt-5-test" : "Model (OpenAI), e.g., gpt-4o", text: $customModel) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .autocorrectionDisabled() + .onChange(of: customModel) { _ in byoLastTestOK = false } + .modifier(ClearButton(text: $customModel)) + TextField("API version (Azure only, e.g., 2024-06-01)", text: $customAPIVersion) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .autocorrectionDisabled() + .onChange(of: customAPIVersion) { _ in byoLastTestOK = false } + .modifier(ClearButton(text: $customAPIVersion)) + TextField("Custom endpoint path (non-Azure), e.g., /v1/chat/completions or /openai/v1/chat/completions", text: $customAPIEndpointPath) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .autocorrectionDisabled() + .onChange(of: customAPIEndpointPath) { _ in byoLastTestOK = false } + .modifier(ClearButton(text: $customAPIEndpointPath)) + if let pathError = endpointPathError { + Text(pathError) + .font(.caption2) + .foregroundColor(.red) + } else { + Text("Leave blank for most providers. Only needed for non-Azure providers whose Chat Completions path differs from the OpenAI default. For example: Together.ai uses '/v1/chat/completions', Groq uses '/openai/v1/chat/completions'. Azure ignores this field because it uses the deployment-based path.") + .font(.caption2) + .foregroundColor(.secondary) + } + if !endpointPreview.isEmpty { + Text("This will call: \(endpointPreview)") + .font(.caption2) + .foregroundColor(.secondary) + .lineLimit(2) + } + TextField("Organization ID (optional)", text: $customOrganizationID) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .autocorrectionDisabled() + .onChange(of: customOrganizationID) { _ in byoLastTestOK = false } + .modifier(ClearButton(text: $customOrganizationID)) + HStack { + Button(action: testBYOConnection) { + if isTestingBYO { + HStack { ProgressView(); Text("Testing…") } + } else { + HStack { Image(systemName: "checkmark.shield"); Text("Test connection") } + } + } + .disabled(isTestingBYO) + .buttonStyle(.bordered) + .tint(.purple) + Spacer() + } + Text("BYO is for AI Image Analysis only (OpenAI-compatible endpoints, including Azure). Test connection only checks connectivity/auth — it does not validate model compatibility. GPT-5 support may be limited across many API providers at this time. BYO is experimental and unsupported; your mileage may vary.") + .font(.caption) + .foregroundColor(.secondary) + } + } + + private func testBYOConnection() { + let base = customAPIBaseURL.trimmingCharacters(in: .whitespacesAndNewlines) + let key = customAPIKey.trimmingCharacters(in: .whitespacesAndNewlines) + guard !base.isEmpty, !key.isEmpty else { + byoTestMessage = "Please enter Base URL and API key first." + showBYOTestAlert = true + return + } + isTestingBYO = true + byoLastTestOK = false + let model = customModel.trimmingCharacters(in: .whitespacesAndNewlines) + let version = customAPIVersion.trimmingCharacters(in: .whitespacesAndNewlines) + let org = customOrganizationID.trimmingCharacters(in: .whitespacesAndNewlines) + Task { + do { + let status = try await OpenAIFoodAnalysisService.shared.testConnection( + baseURL: base, + apiKey: key, + model: model.isEmpty ? nil : model, + apiVersion: version.isEmpty ? nil : version, + organizationID: org.isEmpty ? nil : org, + customPath: customAPIEndpointPath.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? nil : customAPIEndpointPath.trimmingCharacters(in: .whitespacesAndNewlines) + ) + byoTestMessage = status + byoLastTestOK = true + } catch { + byoTestMessage = "Test failed: \(error.localizedDescription)" + byoLastTestOK = false + } + isTestingBYO = false + showBYOTestAlert = true + } + } + + // (inline provider configuration is embedded directly in body) + @ViewBuilder + private var analysisModeSection: some View { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 8) { + Image(systemName: "burst").foregroundColor(.yellow) + Text("ANALYSIS MODE") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + // Mode picker + Picker("Analysis Mode", selection: Binding( + get: { aiService.analysisMode }, + set: { newMode in aiService.setAnalysisMode(newMode) } + )) { + ForEach(ConfigurableAIService.AnalysisMode.allCases, id: \.self) { mode in + Text(mode.displayName).tag(mode) + } + } + .pickerStyle(SegmentedPickerStyle()) + + currentModeDetails + modelInformation + } + } + + + @ViewBuilder + private var currentModeDetails: some View { + + VStack(alignment: .leading, spacing: 8) { + HStack { + Image(systemName: aiService.analysisMode.iconName) + .foregroundColor(aiService.analysisMode.iconColor) + Text("Current Mode: \(aiService.analysisMode.displayName)") + .font(.subheadline) + .fontWeight(.medium) + } + + Text(aiService.analysisMode.detailedDescription) + .font(.caption) + .foregroundColor(.secondary) + } + .padding(.vertical, 8) + .padding(.horizontal, 12) + .frame(maxWidth: .infinity, alignment: .leading) + .background(aiService.analysisMode.backgroundColor) + .cornerRadius(8) + } + + @ViewBuilder + private var modelInformation: some View { + VStack(alignment: .leading, spacing: 6) { + Text("Models Used:") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.secondary) + + VStack(alignment: .leading, spacing: 4) { + modelRow(provider: "Google Gemini:", model: ConfigurableAIService.optimalModel(for: .googleGemini, mode: aiService.analysisMode)) + modelRow(provider: "OpenAI:", model: ConfigurableAIService.optimalModel(for: .openAI, mode: aiService.analysisMode)) + modelRow(provider: "Claude:", model: ConfigurableAIService.optimalModel(for: .claude, mode: aiService.analysisMode)) + } + } + .padding(.vertical, 6) + .padding(.horizontal, 12) + .frame(maxWidth: .infinity, alignment: .leading) + .background(Color(.systemGray6)) + .cornerRadius(8) + } + + @ViewBuilder + private func modelRow(provider: String, model: String) -> some View { + HStack { + Text(provider) + .font(.caption2) + .foregroundColor(.secondary) + Text(model) + .font(.caption2) + .fontWeight(.medium) + .foregroundColor(.primary) + } + } + + private var advancedOptionsSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "syringe") + .foregroundColor(.orange) + Text("ADVANCED OPTIONS") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + .lineLimit(1) + .layoutPriority(1) + } + Toggle("Advanced Dosing Insights", isOn: $advancedDosingRecommendationsEnabled) + .disabled(!foodSearchEnabled) + Text("Enable advanced dosing advice including Fat/Protein Units (FPUs) calculations.") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + +private func getBindingForSearchType(_ searchType: SearchType) -> Binding { + switch searchType { + case .textSearch: + return Binding( + get: { aiService.textSearchProvider }, + set: { newValue in + aiService.textSearchProvider = newValue + UserDefaults.standard.textSearchProvider = newValue.rawValue + } + ) + case .barcodeSearch: + return Binding( + get: { aiService.barcodeSearchProvider }, + set: { newValue in + aiService.barcodeSearchProvider = newValue + UserDefaults.standard.barcodeSearchProvider = newValue.rawValue + } + ) + case .aiImageSearch: + return Binding( + get: { aiService.aiImageSearchProvider }, + set: { newValue in + aiService.aiImageSearchProvider = newValue + UserDefaults.standard.aiImageProvider = newValue.rawValue + } + ) + } +} + +} + +// MARK: - Preview + +#if DEBUG +struct AISettingsView_Previews: PreviewProvider { + static var previews: some View { + AISettingsView() + } +} +#endif diff --git a/Loop/Views/FoodFinder/FoodFinder_VoiceSearchView.swift b/Loop/Views/FoodFinder/FoodFinder_VoiceSearchView.swift new file mode 100644 index 0000000000..a8ab4be801 --- /dev/null +++ b/Loop/Views/FoodFinder/FoodFinder_VoiceSearchView.swift @@ -0,0 +1,328 @@ +// +// VoiceSearchView.swift +// Loop +// +// Created by Taylor Patterson. Coded by Claude Code for Voice Search Integration in June 2025 +// Copyright © 2025 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import Combine + +/// SwiftUI view for voice search with microphone visualization and controls +struct VoiceSearchView: View { + @ObservedObject private var voiceService = VoiceSearchService.shared + @Environment(\.presentationMode) var presentationMode + + let onSearchCompleted: (String) -> Void + let onCancel: () -> Void + + @State private var showingPermissionAlert = false + @State private var cancellables = Set() + @State private var audioLevelAnimation = 0.0 + + var body: some View { + ZStack { + // Background + LinearGradient( + colors: [Color.blue.opacity(0.1), Color.purple.opacity(0.1)], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + .edgesIgnoringSafeArea(.all) + + VStack(spacing: 32) { + Spacer() + + // Microphone visualization + microphoneVisualization + + // Current transcription + transcriptionDisplay + + // Controls + controlButtons + + // Error display + if let error = voiceService.searchError { + errorDisplay(error: error) + } + + Spacer() + } + .padding() + } + .navigationBarTitle("Voice Search", displayMode: .inline) + .navigationBarBackButtonHidden(true) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + cancelButton + } + } + .onAppear { + setupVoiceSearch() + } + .onDisappear { + voiceService.stopVoiceSearch() + } + .alert(isPresented: $showingPermissionAlert) { + permissionAlert + } + .supportedInterfaceOrientations(.all) + } + + // MARK: - Subviews + + private var microphoneVisualization: some View { + ZStack { + // Outer pulse ring + if voiceService.isRecording { + Circle() + .stroke(Color.blue.opacity(0.3), lineWidth: 4) + .scaleEffect(1.5 + audioLevelAnimation * 0.5) + .opacity(1.0 - audioLevelAnimation * 0.3) + .animation( + .easeInOut(duration: 1.5) + .repeatForever(autoreverses: true), + value: audioLevelAnimation + ) + } + + // Main microphone button + Button(action: toggleRecording) { + ZStack { + Circle() + .fill(voiceService.isRecording ? Color.red : Color.blue) + .frame(width: 120, height: 120) + .shadow(radius: 8) + + // Use custom icon if available, fallback to system icon + if let _ = UIImage(named: "icon-voice") { + Image("icon-voice") + .resizable() + .frame(width: 50, height: 50) + .foregroundColor(.white) + } else { + Image(systemName: "mic.fill") + .font(.system(size: 50)) + .foregroundColor(.white) + } + } + } + .scaleEffect(voiceService.isRecording ? 1.1 : 1.0) + .animation(.spring(), value: voiceService.isRecording) + } + .onAppear { + if voiceService.isRecording { + audioLevelAnimation = 1.0 + } + } + } + + private var transcriptionDisplay: some View { + VStack(spacing: 16) { + if voiceService.isRecording { + Text("Listening...") + .font(.headline) + .foregroundColor(.blue) + .animation(.easeInOut(duration: 1).repeatForever(autoreverses: true), value: voiceService.isRecording) + } + + if let result = voiceService.lastSearchResult { + VStack(spacing: 8) { + Text("You said:") + .font(.subheadline) + .foregroundColor(.secondary) + + Text(result.transcribedText) + .font(.title2) + .fontWeight(.medium) + .multilineTextAlignment(.center) + .padding() + .background(.regularMaterial, in: RoundedRectangle(cornerRadius: 12)) + + if !result.isFinal { + Text("Processing...") + .font(.caption) + .foregroundColor(.secondary) + } + } + } else if !voiceService.isRecording { + Text("Tap the microphone to start voice search") + .font(.body) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + } + .frame(minHeight: 120) + } + + private var controlButtons: some View { + HStack(spacing: 24) { + if voiceService.isRecording { + // Stop button + Button("Stop") { + voiceService.stopVoiceSearch() + } + .buttonStyle(.bordered) + .controlSize(.large) + } else if let result = voiceService.lastSearchResult, result.isFinal { + // Use result button + Button("Search for \"\(result.transcribedText)\"") { + onSearchCompleted(result.transcribedText) + } + .buttonStyle(.borderedProminent) + .controlSize(.large) + + // Try again button + Button("Try Again") { + startVoiceSearch() + } + .buttonStyle(.bordered) + .controlSize(.large) + } + } + } + + private func errorDisplay(error: VoiceSearchError) -> some View { + VStack(spacing: 12) { + Image(systemName: "exclamationmark.triangle.fill") + .font(.title) + .foregroundColor(.orange) + + Text(error.localizedDescription) + .font(.headline) + .multilineTextAlignment(.center) + + if let suggestion = error.recoverySuggestion { + Text(suggestion) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + + HStack(spacing: 16) { + if error == .microphonePermissionDenied || error == .speechRecognitionPermissionDenied { + Button("Settings") { + openSettings() + } + .buttonStyle(.borderedProminent) + } + + Button("Try Again") { + setupVoiceSearch() + } + .buttonStyle(.bordered) + } + } + .padding() + .background(.regularMaterial, in: RoundedRectangle(cornerRadius: 16)) + } + + private var cancelButton: some View { + Button("Cancel") { + onCancel() + } + } + + private var permissionAlert: Alert { + Alert( + title: Text("Voice Search Permissions"), + message: Text("Loop needs microphone and speech recognition access to perform voice searches. Please enable these permissions in Settings."), + primaryButton: .default(Text("Settings")) { + openSettings() + }, + secondaryButton: .cancel() + ) + } + + // MARK: - Methods + + private func setupVoiceSearch() { + guard voiceService.authorizationStatus.isAuthorized else { + requestPermissions() + return + } + + // Ready for voice search + voiceService.searchError = nil + } + + private func requestPermissions() { + voiceService.requestPermissions() + .sink { authorized in + if !authorized { + showingPermissionAlert = true + } + } + .store(in: &cancellables) + } + + private func startVoiceSearch() { + voiceService.startVoiceSearch() + .sink( + receiveCompletion: { completion in + if case .failure(let error) = completion { + print("Voice search failed: \(error)") + } + }, + receiveValue: { result in + if result.isFinal { + // Auto-complete search after a brief delay + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { + onSearchCompleted(result.transcribedText) + } + } + } + ) + .store(in: &cancellables) + } + + private func toggleRecording() { + if voiceService.isRecording { + voiceService.stopVoiceSearch() + } else { + startVoiceSearch() + } + } + + private func openSettings() { + guard let settingsUrl = URL(string: UIApplication.openSettingsURLString) else { return } + UIApplication.shared.open(settingsUrl) + } +} + +// MARK: - Preview + +#if DEBUG +struct VoiceSearchView_Previews: PreviewProvider { + static var previews: some View { + Group { + // Default state + VoiceSearchView( + onSearchCompleted: { text in + print("Search completed: \(text)") + }, + onCancel: { + print("Cancelled") + } + ) + .previewDisplayName("Default") + + // Recording state + VoiceSearchView( + onSearchCompleted: { text in + print("Search completed: \(text)") + }, + onCancel: { + print("Cancelled") + } + ) + .onAppear { + VoiceSearchService.shared.isRecording = true + } + .previewDisplayName("Recording") + } + } +} +#endif diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index aa0da33134..7494189e75 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -84,6 +84,9 @@ public struct SettingsView: View { if FeatureFlags.allowExperimentalFeatures { favoriteFoodsSection } + if FoodFinder_FeatureFlags.isEnabled { + foodFinderSettingsSection + } if (viewModel.pumpManagerSettingsViewModel.isTestingDevice || viewModel.cgmManagerSettingsViewModel.isTestingDevice) && viewModel.showDeleteTestData { deleteDataSection } @@ -376,7 +379,22 @@ extension SettingsView { descriptiveText: "Simplify Carb Entry") } } - + + // FoodFinder — single settings insertion point + private var foodFinderSettingsSection: some View { + Section { + NavigationLink(destination: FoodFinder_SettingsView()) { + LargeButton(action: {}, + includeArrow: false, + imageView: Image(systemName: "fork.knife.circle.fill") + .foregroundColor(.green) + .font(.system(size: 24)), + label: NSLocalizedString("FoodFinder Settings", comment: "Title text for button to FoodFinder Settings"), + descriptiveText: NSLocalizedString("Configure AI Food Analysis", comment: "Descriptive text for FoodFinder Settings")) + } + } + } + private var cgmChoices: [ActionSheet.Button] { var result = viewModel.cgmManagerSettingsViewModel.availableDevices .sorted(by: {$0.localizedTitle < $1.localizedTitle}) diff --git a/LoopTests/FoodFinder/FoodFinder_BarcodeScannerTests.swift b/LoopTests/FoodFinder/FoodFinder_BarcodeScannerTests.swift new file mode 100644 index 0000000000..b93f67a559 --- /dev/null +++ b/LoopTests/FoodFinder/FoodFinder_BarcodeScannerTests.swift @@ -0,0 +1,240 @@ +// +// BarcodeScannerTests.swift +// LoopTests +// +// Created by Claude Code for Barcode Scanner Testing +// Copyright © 2023 LoopKit Authors. All rights reserved. +// + +import XCTest +import Vision +import Combine +@testable import Loop + +class BarcodeScannerServiceTests: XCTestCase { + + var barcodeScannerService: BarcodeScannerService! + var cancellables: Set! + + override func setUp() { + super.setUp() + barcodeScannerService = BarcodeScannerService.mock() + cancellables = Set() + } + + override func tearDown() { + cancellables.removeAll() + barcodeScannerService = nil + super.tearDown() + } + + // MARK: - Initialization Tests + + func testServiceInitialization() { + XCTAssertNotNil(barcodeScannerService) + XCTAssertFalse(barcodeScannerService.isScanning) + XCTAssertNil(barcodeScannerService.lastScanResult) + XCTAssertNil(barcodeScannerService.scanError) + } + + func testSharedInstanceExists() { + let sharedInstance = BarcodeScannerService.shared + XCTAssertNotNil(sharedInstance) + } + + // MARK: - Mock Testing + + func testSimulateSuccessfulScan() { + let expectation = XCTestExpectation(description: "Barcode scan result received") + let testBarcode = "1234567890123" + + barcodeScannerService.$lastScanResult + .compactMap { $0 } + .sink { result in + XCTAssertEqual(result.barcodeString, testBarcode) + XCTAssertGreaterThan(result.confidence, 0.0) + XCTAssertEqual(result.barcodeType, .ean13) + expectation.fulfill() + } + .store(in: &cancellables) + + barcodeScannerService.simulateScan(barcode: testBarcode) + + wait(for: [expectation], timeout: 2.0) + } + + func testSimulateScanError() { + let expectation = XCTestExpectation(description: "Scan error received") + let testError = BarcodeScanError.invalidBarcode + + barcodeScannerService.$scanError + .compactMap { $0 } + .sink { error in + XCTAssertEqual(error.localizedDescription, testError.localizedDescription) + expectation.fulfill() + } + .store(in: &cancellables) + + barcodeScannerService.simulateError(testError) + + wait(for: [expectation], timeout: 2.0) + } + + func testScanningStateUpdates() { + let expectation = XCTestExpectation(description: "Scanning state updated") + + barcodeScannerService.$isScanning + .dropFirst() // Skip initial value + .sink { isScanning in + XCTAssertFalse(isScanning) // Should be false after simulation + expectation.fulfill() + } + .store(in: &cancellables) + + barcodeScannerService.simulateScan(barcode: "test") + + wait(for: [expectation], timeout: 2.0) + } + + // MARK: - Error Testing + + func testBarcodeScanErrorTypes() { + let errors: [BarcodeScanError] = [ + .cameraNotAvailable, + .cameraPermissionDenied, + .scanningFailed("Test failure"), + .invalidBarcode, + .sessionSetupFailed + ] + + for error in errors { + XCTAssertNotNil(error.errorDescription) + XCTAssertNotNil(error.recoverySuggestion) + } + } + + func testErrorDescriptionsAreLocalized() { + let error = BarcodeScanError.cameraPermissionDenied + let description = error.errorDescription + + XCTAssertNotNil(description) + XCTAssertFalse(description!.isEmpty) + + let suggestion = error.recoverySuggestion + XCTAssertNotNil(suggestion) + XCTAssertFalse(suggestion!.isEmpty) + } +} + +// MARK: - BarcodeScanResult Tests + +class BarcodeScanResultTests: XCTestCase { + + func testBarcodeScanResultInitialization() { + let barcode = "1234567890123" + let barcodeType = VNBarcodeSymbology.ean13 + let confidence: Float = 0.95 + let bounds = CGRect(x: 0, y: 0, width: 100, height: 50) + + let result = BarcodeScanResult( + barcodeString: barcode, + barcodeType: barcodeType, + confidence: confidence, + bounds: bounds + ) + + XCTAssertEqual(result.barcodeString, barcode) + XCTAssertEqual(result.barcodeType, barcodeType) + XCTAssertEqual(result.confidence, confidence) + XCTAssertEqual(result.bounds, bounds) + XCTAssertNotNil(result.timestamp) + } + + func testSampleBarcodeScanResult() { + let sampleResult = BarcodeScanResult.sample() + + XCTAssertEqual(sampleResult.barcodeString, "1234567890123") + XCTAssertEqual(sampleResult.barcodeType, .ean13) + XCTAssertEqual(sampleResult.confidence, 0.95) + XCTAssertNotNil(sampleResult.timestamp) + } + + func testCustomSampleBarcodeScanResult() { + let customBarcode = "9876543210987" + let sampleResult = BarcodeScanResult.sample(barcode: customBarcode) + + XCTAssertEqual(sampleResult.barcodeString, customBarcode) + XCTAssertEqual(sampleResult.barcodeType, .ean13) + XCTAssertEqual(sampleResult.confidence, 0.95) + } + + func testTimestampIsRecent() { + let result = BarcodeScanResult.sample() + let now = Date() + let timeDifference = abs(now.timeIntervalSince(result.timestamp)) + + // Timestamp should be very recent (within 1 second) + XCTAssertLessThan(timeDifference, 1.0) + } +} + +// MARK: - Permission and Authorization Tests + +class BarcodeScannerAuthorizationTests: XCTestCase { + + var barcodeScannerService: BarcodeScannerService! + + override func setUp() { + super.setUp() + barcodeScannerService = BarcodeScannerService.mock() + } + + override func tearDown() { + barcodeScannerService = nil + super.tearDown() + } + + func testMockServiceHasAuthorizedStatus() { + // Mock service should have authorized camera access + XCTAssertEqual(barcodeScannerService.cameraAuthorizationStatus, .authorized) + } + + func testRequestCameraPermissionReturnsPublisher() { + let publisher = barcodeScannerService.requestCameraPermission() + XCTAssertNotNil(publisher) + } + + func testGetPreviewLayerReturnsLayer() { + let previewLayer = barcodeScannerService.getPreviewLayer() + XCTAssertNotNil(previewLayer) + } +} + +// MARK: - Integration Tests + +class BarcodeScannerIntegrationTests: XCTestCase { + + func testBarcodeScannerServiceIntegrationWithCarbEntry() { + let service = BarcodeScannerService.mock() + let testBarcode = "7622210992338" // Example EAN-13 barcode + + // Simulate a barcode scan + service.simulateScan(barcode: testBarcode) + + // Verify the result is available + XCTAssertNotNil(service.lastScanResult) + XCTAssertEqual(service.lastScanResult?.barcodeString, testBarcode) + XCTAssertFalse(service.isScanning) + } + + func testErrorHandlingFlow() { + let service = BarcodeScannerService.mock() + let error = BarcodeScanError.cameraPermissionDenied + + service.simulateError(error) + + XCTAssertNotNil(service.scanError) + XCTAssertEqual(service.scanError?.localizedDescription, error.localizedDescription) + XCTAssertFalse(service.isScanning) + } +} diff --git a/LoopTests/FoodFinder/FoodFinder_OpenFoodFactsTests.swift b/LoopTests/FoodFinder/FoodFinder_OpenFoodFactsTests.swift new file mode 100644 index 0000000000..98d9c6ed7d --- /dev/null +++ b/LoopTests/FoodFinder/FoodFinder_OpenFoodFactsTests.swift @@ -0,0 +1,403 @@ +// +// OpenFoodFactsTests.swift +// LoopTests +// +// Created by Claude Code for OpenFoodFacts Integration +// Copyright © 2023 LoopKit Authors. All rights reserved. +// + +import XCTest +@testable import Loop + +@MainActor +class OpenFoodFactsModelsTests: XCTestCase { + + // MARK: - Model Tests + + func testNutrimentsDecoding() throws { + let json = """ + { + "carbohydrates_100g": 25.5, + "sugars_100g": 5.2, + "fiber_100g": 3.1, + "proteins_100g": 8.0, + "fat_100g": 2.5, + "energy_100g": 180 + } + """.data(using: .utf8)! + + let nutriments = try JSONDecoder().decode(Nutriments.self, from: json) + + XCTAssertEqual(nutriments.carbohydrates, 25.5) + XCTAssertEqual(nutriments.sugars ?? 0, 5.2) + XCTAssertEqual(nutriments.fiber ?? 0, 3.1) + XCTAssertEqual(nutriments.proteins ?? 0, 8.0) + XCTAssertEqual(nutriments.fat ?? 0, 2.5) + XCTAssertEqual(nutriments.energy ?? 0, 180) + } + + func testNutrimentsDecodingWithMissingCarbs() throws { + let json = """ + { + "sugars_100g": 5.2, + "proteins_100g": 8.0 + } + """.data(using: .utf8)! + + let nutriments = try JSONDecoder().decode(Nutriments.self, from: json) + + // Should default to 0 when carbohydrates are missing + XCTAssertEqual(nutriments.carbohydrates, 0.0) + XCTAssertEqual(nutriments.sugars ?? 0, 5.2) + XCTAssertEqual(nutriments.proteins ?? 0, 8.0) + XCTAssertNil(nutriments.fiber) + } + + func testProductDecoding() throws { + let json = """ + { + "product_name": "Whole Wheat Bread", + "brands": "Sample Brand", + "categories": "Breads", + "code": "1234567890123", + "serving_size": "2 slices (60g)", + "serving_quantity": 60, + "nutriments": { + "carbohydrates_100g": 45.0, + "sugars_100g": 3.0, + "fiber_100g": 6.0, + "proteins_100g": 9.0, + "fat_100g": 3.5 + } + } + """.data(using: .utf8)! + + let product = try JSONDecoder().decode(OpenFoodFactsProduct.self, from: json) + + XCTAssertEqual(product.productName, "Whole Wheat Bread") + XCTAssertEqual(product.brands, "Sample Brand") + XCTAssertEqual(product.code, "1234567890123") + XCTAssertEqual(product.id, "1234567890123") + XCTAssertEqual(product.servingSize, "2 slices (60g)") + XCTAssertEqual(product.servingQuantity, 60) + XCTAssertEqual(product.nutriments.carbohydrates, 45.0) + XCTAssertTrue(product.hasSufficientNutritionalData) + } + + func testProductDecodingWithoutBarcode() throws { + let json = """ + { + "product_name": "Generic Bread", + "nutriments": { + "carbohydrates_100g": 50.0 + } + } + """.data(using: .utf8)! + + let product = try JSONDecoder().decode(OpenFoodFactsProduct.self, from: json) + + XCTAssertEqual(product.productName, "Generic Bread") + XCTAssertNil(product.code) + XCTAssertTrue(product.id.hasPrefix("synthetic_")) + XCTAssertTrue(product.hasSufficientNutritionalData) + } + + func testProductDisplayName() { + let productWithName = OpenFoodFactsProduct.sample(name: "Test Product") + XCTAssertEqual(productWithName.displayName, "Test Product") + + let productWithBrandOnly = OpenFoodFactsProduct( + id: "test", + productName: nil, + brands: "Test Brand", + categories: nil, + nutriments: Nutriments.sample(), + servingSize: nil, + servingQuantity: nil, + imageURL: nil, + imageFrontURL: nil, + code: nil + ) + XCTAssertEqual(productWithBrandOnly.displayName, "Test Brand") + + let productWithoutNameOrBrand = OpenFoodFactsProduct( + id: "test", + productName: nil, + brands: nil, + categories: nil, + nutriments: Nutriments.sample(), + servingSize: nil, + servingQuantity: nil, + imageURL: nil, + imageFrontURL: nil, + code: nil + ) + XCTAssertEqual(productWithoutNameOrBrand.displayName, "Unknown Product") + } + + func testProductCarbsPerServing() { + let product = OpenFoodFactsProduct( + id: "test", + productName: "Test", + brands: nil, + categories: nil, + nutriments: Nutriments.sample(carbs: 50.0), // 50g per 100g + servingSize: "30g", + servingQuantity: 30.0, // 30g serving + imageURL: nil, + imageFrontURL: nil, + code: nil + ) + + // 50g carbs per 100g, with 30g serving = 15g carbs per serving + XCTAssertEqual(product.carbsPerServing ?? 0, 15.0, accuracy: 0.01) + } + + func testProductSufficientNutritionalData() { + let validProduct = OpenFoodFactsProduct.sample() + XCTAssertTrue(validProduct.hasSufficientNutritionalData) + + let productWithNegativeCarbs = OpenFoodFactsProduct( + id: "test", + productName: "Test", + brands: nil, + categories: nil, + nutriments: Nutriments.sample(carbs: -1.0), + servingSize: nil, + servingQuantity: nil, + imageURL: nil, + imageFrontURL: nil, + code: nil + ) + XCTAssertFalse(productWithNegativeCarbs.hasSufficientNutritionalData) + + let productWithoutName = OpenFoodFactsProduct( + id: "test", + productName: "", + brands: "", + categories: nil, + nutriments: Nutriments.sample(), + servingSize: nil, + servingQuantity: nil, + imageURL: nil, + imageFrontURL: nil, + code: nil + ) + XCTAssertFalse(productWithoutName.hasSufficientNutritionalData) + } + + func testSearchResponseDecoding() throws { + let json = """ + { + "products": [ + { + "product_name": "Test Product 1", + "code": "1111111111111", + "nutriments": { + "carbohydrates_100g": 25.0 + } + }, + { + "product_name": "Test Product 2", + "code": "2222222222222", + "nutriments": { + "carbohydrates_100g": 30.0 + } + } + ], + "count": 2, + "page": 1, + "page_count": 1, + "page_size": 20 + } + """.data(using: .utf8)! + + let response = try JSONDecoder().decode(OpenFoodFactsSearchResponse.self, from: json) + + XCTAssertEqual(response.products.count, 2) + XCTAssertEqual(response.count, 2) + XCTAssertEqual(response.page, 1) + XCTAssertEqual(response.pageCount, 1) + XCTAssertEqual(response.pageSize, 20) + XCTAssertEqual(response.products[0].productName, "Test Product 1") + XCTAssertEqual(response.products[1].productName, "Test Product 2") + } +} + +@MainActor +class OpenFoodFactsServiceTests: XCTestCase { + + var service: OpenFoodFactsService! + + override func setUp() { + super.setUp() + service = OpenFoodFactsService.mock() + OpenFoodFactsService.configureMockResponses() + } + + override func tearDown() { + service = nil + super.tearDown() + } + + func testSearchProducts() async throws { + let products = try await service.searchProducts(query: "bread") + + XCTAssertEqual(products.count, 2) + XCTAssertEqual(products[0].displayName, "Test Bread") + XCTAssertEqual(products[1].displayName, "Test Pasta") + XCTAssertEqual(products[0].nutriments.carbohydrates, 45.0) + XCTAssertEqual(products[1].nutriments.carbohydrates, 75.0) + } + + func testSearchProductsWithEmptyQuery() async throws { + let products = try await service.searchProducts(query: "") + XCTAssertTrue(products.isEmpty) + + let whitespaceProducts = try await service.searchProducts(query: " ") + XCTAssertTrue(whitespaceProducts.isEmpty) + } + + func testSearchProductByBarcode() async throws { + let product = try await service.searchProduct(barcode: "1234567890123") + + XCTAssertEqual(product.displayName, "Test Product") + XCTAssertEqual(product.nutriments.carbohydrates, 30.0) + XCTAssertEqual(product.code, "1234567890123") + } + + func testSearchProductWithInvalidBarcode() async { + do { + _ = try await service.searchProduct(barcode: "invalid") + XCTFail("Should have thrown invalid barcode error") + } catch OpenFoodFactsError.invalidBarcode { + // Expected + } catch { + XCTFail("Unexpected error: \(error)") + } + + do { + _ = try await service.searchProduct(barcode: "123") // Too short + XCTFail("Should have thrown invalid barcode error") + } catch OpenFoodFactsError.invalidBarcode { + // Expected + } catch { + XCTFail("Unexpected error: \(error)") + } + + do { + _ = try await service.searchProduct(barcode: "12345678901234567890") // Too long + XCTFail("Should have thrown invalid barcode error") + } catch OpenFoodFactsError.invalidBarcode { + // Expected + } catch { + XCTFail("Unexpected error: \(error)") + } + } + + func testValidBarcodeFormats() async { + let realService = OpenFoodFactsService() + + // Test valid barcode formats - these will likely fail with network errors + // since they're fake barcodes, but they should pass barcode validation + do { + _ = try await realService.searchProduct(barcode: "12345678") // EAN-8 + } catch { + // Expected to fail with network error in testing + } + + do { + _ = try await realService.searchProduct(barcode: "1234567890123") // EAN-13 + } catch { + // Expected to fail with network error in testing + } + + do { + _ = try await realService.searchProduct(barcode: "123456789012") // UPC-A + } catch { + // Expected to fail with network error in testing + } + } + + func testErrorLocalizations() { + let invalidURLError = OpenFoodFactsError.invalidURL + XCTAssertNotNil(invalidURLError.errorDescription) + XCTAssertNotNil(invalidURLError.failureReason) + + let productNotFoundError = OpenFoodFactsError.productNotFound + XCTAssertNotNil(productNotFoundError.errorDescription) + XCTAssertNotNil(productNotFoundError.failureReason) + + let networkError = OpenFoodFactsError.networkError(URLError(.notConnectedToInternet)) + XCTAssertNotNil(networkError.errorDescription) + XCTAssertNotNil(networkError.failureReason) + } +} + +// MARK: - Performance Tests + +@MainActor +class OpenFoodFactsPerformanceTests: XCTestCase { + + func testProductDecodingPerformance() throws { + let json = """ + { + "product_name": "Performance Test Product", + "brands": "Test Brand", + "categories": "Test Category", + "code": "1234567890123", + "serving_size": "100g", + "serving_quantity": 100, + "nutriments": { + "carbohydrates_100g": 45.0, + "sugars_100g": 3.0, + "fiber_100g": 6.0, + "proteins_100g": 9.0, + "fat_100g": 3.5, + "energy_100g": 250, + "salt_100g": 1.2, + "sodium_100g": 0.5 + } + } + """.data(using: .utf8)! + + measure { + for _ in 0..<1000 { + _ = try! JSONDecoder().decode(OpenFoodFactsProduct.self, from: json) + } + } + } + + func testSearchResponseDecodingPerformance() throws { + var productsJson = "" + + // Create JSON for 100 products + for i in 0..<100 { + let carbValue = Double(i) * 0.5 + if i > 0 { productsJson += "," } + productsJson += """ + { + "product_name": "Product \(i)", + "code": "\(String(format: "%013d", i))", + "nutriments": { + "carbohydrates_100g": \(carbValue) + } + } + """ + } + + let json = """ + { + "products": [\(productsJson)], + "count": 100, + "page": 1, + "page_count": 1, + "page_size": 100 + } + """.data(using: .utf8)! + + measure { + _ = try! JSONDecoder().decode(OpenFoodFactsSearchResponse.self, from: json) + } + } +} diff --git a/LoopTests/FoodFinder/FoodFinder_VoiceSearchTests.swift b/LoopTests/FoodFinder/FoodFinder_VoiceSearchTests.swift new file mode 100644 index 0000000000..42222d0b9e --- /dev/null +++ b/LoopTests/FoodFinder/FoodFinder_VoiceSearchTests.swift @@ -0,0 +1,327 @@ +// +// VoiceSearchTests.swift +// LoopTests +// +// Created by Claude Code for Voice Search Testing +// Copyright © 2023 LoopKit Authors. All rights reserved. +// + +import XCTest +import Speech +import Combine +@testable import Loop + +class VoiceSearchServiceTests: XCTestCase { + + var voiceSearchService: VoiceSearchService! + var cancellables: Set! + + override func setUp() { + super.setUp() + voiceSearchService = VoiceSearchService.mock() + cancellables = Set() + } + + override func tearDown() { + cancellables.removeAll() + voiceSearchService = nil + super.tearDown() + } + + // MARK: - Initialization Tests + + func testServiceInitialization() { + XCTAssertNotNil(voiceSearchService) + XCTAssertFalse(voiceSearchService.isRecording) + XCTAssertNil(voiceSearchService.lastSearchResult) + XCTAssertNil(voiceSearchService.searchError) + } + + func testSharedInstanceExists() { + let sharedInstance = VoiceSearchService.shared + XCTAssertNotNil(sharedInstance) + } + + func testMockServiceHasAuthorizedStatus() { + XCTAssertTrue(voiceSearchService.authorizationStatus.isAuthorized) + } + + // MARK: - Mock Testing + + func testSimulateSuccessfulVoiceSearch() { + let expectation = XCTestExpectation(description: "Voice search result received") + let testText = "chicken breast" + + voiceSearchService.$lastSearchResult + .compactMap { $0 } + .sink { result in + XCTAssertEqual(result.transcribedText, testText) + XCTAssertGreaterThan(result.confidence, 0.0) + XCTAssertTrue(result.isFinal) + expectation.fulfill() + } + .store(in: &cancellables) + + voiceSearchService.simulateVoiceSearch(text: testText) + + wait(for: [expectation], timeout: 2.0) + } + + func testSimulateVoiceSearchError() { + let expectation = XCTestExpectation(description: "Voice search error received") + let testError = VoiceSearchError.microphonePermissionDenied + + voiceSearchService.$searchError + .compactMap { $0 } + .sink { error in + XCTAssertEqual(error.localizedDescription, testError.localizedDescription) + expectation.fulfill() + } + .store(in: &cancellables) + + voiceSearchService.simulateError(testError) + + wait(for: [expectation], timeout: 2.0) + } + + func testRecordingStateUpdates() { + let expectation = XCTestExpectation(description: "Recording state updated") + + voiceSearchService.$isRecording + .dropFirst() // Skip initial value + .sink { isRecording in + XCTAssertFalse(isRecording) // Should be false after simulation + expectation.fulfill() + } + .store(in: &cancellables) + + voiceSearchService.simulateVoiceSearch(text: "test") + + wait(for: [expectation], timeout: 2.0) + } + + // MARK: - Permission Testing + + func testRequestPermissionsReturnsPublisher() { + let publisher = voiceSearchService.requestPermissions() + XCTAssertNotNil(publisher) + } + + // MARK: - Error Testing + + func testVoiceSearchErrorTypes() { + let errors: [VoiceSearchError] = [ + .speechRecognitionNotAvailable, + .microphonePermissionDenied, + .speechRecognitionPermissionDenied, + .recognitionFailed("Test failure"), + .audioSessionSetupFailed, + .recognitionTimeout, + .userCancelled + ] + + for error in errors { + XCTAssertNotNil(error.errorDescription) + // Note: userCancelled doesn't have a recovery suggestion + if error != .userCancelled { + XCTAssertNotNil(error.recoverySuggestion) + } + } + } + + func testErrorDescriptionsAreLocalized() { + let error = VoiceSearchError.microphonePermissionDenied + let description = error.errorDescription + + XCTAssertNotNil(description) + XCTAssertFalse(description!.isEmpty) + + let suggestion = error.recoverySuggestion + XCTAssertNotNil(suggestion) + XCTAssertFalse(suggestion!.isEmpty) + } +} + +// MARK: - VoiceSearchResult Tests + +class VoiceSearchResultTests: XCTestCase { + + func testVoiceSearchResultInitialization() { + let text = "apple pie" + let confidence: Float = 0.92 + let isFinal = true + let alternatives = ["apple pie", "apple pies", "apple pi"] + + let result = VoiceSearchResult( + transcribedText: text, + confidence: confidence, + isFinal: isFinal, + alternatives: alternatives + ) + + XCTAssertEqual(result.transcribedText, text) + XCTAssertEqual(result.confidence, confidence) + XCTAssertEqual(result.isFinal, isFinal) + XCTAssertEqual(result.alternatives, alternatives) + XCTAssertNotNil(result.timestamp) + } + + func testSampleVoiceSearchResult() { + let sampleResult = VoiceSearchResult.sample() + + XCTAssertEqual(sampleResult.transcribedText, "chicken breast") + XCTAssertEqual(sampleResult.confidence, 0.85) + XCTAssertTrue(sampleResult.isFinal) + XCTAssertFalse(sampleResult.alternatives.isEmpty) + XCTAssertNotNil(sampleResult.timestamp) + } + + func testCustomSampleVoiceSearchResult() { + let customText = "salmon fillet" + let sampleResult = VoiceSearchResult.sample(text: customText) + + XCTAssertEqual(sampleResult.transcribedText, customText) + XCTAssertEqual(sampleResult.confidence, 0.85) + XCTAssertTrue(sampleResult.isFinal) + } + + func testPartialVoiceSearchResult() { + let partialResult = VoiceSearchResult.partial() + + XCTAssertEqual(partialResult.transcribedText, "chicken") + XCTAssertEqual(partialResult.confidence, 0.60) + XCTAssertFalse(partialResult.isFinal) + XCTAssertFalse(partialResult.alternatives.isEmpty) + } + + func testCustomPartialVoiceSearchResult() { + let customText = "bread" + let partialResult = VoiceSearchResult.partial(text: customText) + + XCTAssertEqual(partialResult.transcribedText, customText) + XCTAssertFalse(partialResult.isFinal) + } + + func testTimestampIsRecent() { + let result = VoiceSearchResult.sample() + let now = Date() + let timeDifference = abs(now.timeIntervalSince(result.timestamp)) + + // Timestamp should be very recent (within 1 second) + XCTAssertLessThan(timeDifference, 1.0) + } +} + +// MARK: - VoiceSearchAuthorizationStatus Tests + +class VoiceSearchAuthorizationStatusTests: XCTestCase { + + func testAuthorizationStatusInit() { + // Test authorized status + let authorizedStatus = VoiceSearchAuthorizationStatus( + speechStatus: .authorized, + microphoneStatus: .granted + ) + XCTAssertEqual(authorizedStatus, .authorized) + XCTAssertTrue(authorizedStatus.isAuthorized) + + // Test denied status (speech denied) + let deniedSpeechStatus = VoiceSearchAuthorizationStatus( + speechStatus: .denied, + microphoneStatus: .granted + ) + XCTAssertEqual(deniedSpeechStatus, .denied) + XCTAssertFalse(deniedSpeechStatus.isAuthorized) + + // Test denied status (microphone denied) + let deniedMicStatus = VoiceSearchAuthorizationStatus( + speechStatus: .authorized, + microphoneStatus: .denied + ) + XCTAssertEqual(deniedMicStatus, .denied) + XCTAssertFalse(deniedMicStatus.isAuthorized) + + // Test restricted status + let restrictedStatus = VoiceSearchAuthorizationStatus( + speechStatus: .restricted, + microphoneStatus: .granted + ) + XCTAssertEqual(restrictedStatus, .restricted) + XCTAssertFalse(restrictedStatus.isAuthorized) + + // Test not determined status + let notDeterminedStatus = VoiceSearchAuthorizationStatus( + speechStatus: .notDetermined, + microphoneStatus: .undetermined + ) + XCTAssertEqual(notDeterminedStatus, .notDetermined) + XCTAssertFalse(notDeterminedStatus.isAuthorized) + } +} + +// MARK: - Integration Tests + +class VoiceSearchIntegrationTests: XCTestCase { + + func testVoiceSearchServiceIntegrationWithCarbEntry() { + let service = VoiceSearchService.mock() + let testText = "brown rice cooked" + + // Simulate a voice search + service.simulateVoiceSearch(text: testText) + + // Verify the result is available + XCTAssertNotNil(service.lastSearchResult) + XCTAssertEqual(service.lastSearchResult?.transcribedText, testText) + XCTAssertFalse(service.isRecording) + XCTAssertTrue(service.lastSearchResult?.isFinal ?? false) + } + + func testVoiceSearchErrorHandlingFlow() { + let service = VoiceSearchService.mock() + let error = VoiceSearchError.speechRecognitionPermissionDenied + + service.simulateError(error) + + XCTAssertNotNil(service.searchError) + XCTAssertEqual(service.searchError?.localizedDescription, error.localizedDescription) + XCTAssertFalse(service.isRecording) + } + + func testVoiceSearchWithAlternatives() { + let service = VoiceSearchService.mock() + let alternatives = ["pasta salad", "pastor salad", "pasta salads"] + let result = VoiceSearchResult( + transcribedText: alternatives[0], + confidence: 0.88, + isFinal: true, + alternatives: alternatives + ) + + service.lastSearchResult = result + + XCTAssertEqual(service.lastSearchResult?.alternatives.count, 3) + XCTAssertEqual(service.lastSearchResult?.alternatives.first, "pasta salad") + } +} + +// MARK: - Performance Tests + +class VoiceSearchPerformanceTests: XCTestCase { + + func testVoiceSearchResultCreationPerformance() { + measure { + for _ in 0..<1000 { + _ = VoiceSearchResult.sample() + } + } + } + + func testVoiceSearchServiceInitializationPerformance() { + measure { + for _ in 0..<100 { + _ = VoiceSearchService.mock() + } + } + } +} From 128c997c360a77dc790b6df62e64d808e86e272e Mon Sep 17 00:00:00 2001 From: Taylor Date: Sun, 8 Feb 2026 15:38:30 -0800 Subject: [PATCH 32/41] Add generative voice search: route mic input through AI analysis Voice search (microphone button) now uses the AI analysis pipeline instead of USDA text search, enabling natural language food descriptions like "a medium bowl of spicy ramen and a side of gyoza". Text-typed searches continue using USDA/OpenFoodFacts as before. Changes: - SearchBar: Add mic button with voice search callback - SearchRouter: Add analyzeFoodByDescription() routing through AI providers - SearchViewModel: Add performVoiceSearch() async method - EntryPoint: Wire VoiceSearchView sheet to AI analysis pipeline --- .../FoodFinder/FoodFinder_SearchRouter.swift | 78 ++++++++++++++++++- .../FoodFinder_SearchViewModel.swift | 45 +++++++++++ .../FoodFinder/FoodFinder_EntryPoint.swift | 25 +++++- .../FoodFinder/FoodFinder_SearchBar.swift | 31 +++++++- 4 files changed, 176 insertions(+), 3 deletions(-) diff --git a/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift b/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift index 25586dc7de..615f3d0131 100644 --- a/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift +++ b/Loop/Services/FoodFinder/FoodFinder_SearchRouter.swift @@ -177,7 +177,83 @@ class FoodSearchRouter { } } - // Removed AI-based text search implementations. Text search now uses OFF/USDA only. + // MARK: - Voice / Generative Text Search Routing + + /// Perform AI-based food analysis from a text description (voice search). + /// Routes through the same AI provider and prompt infrastructure as image analysis, + /// using a placeholder image with the user's description as context. + func analyzeFoodByDescription(_ description: String) async throws -> AIFoodAnalysisResult { + let provider = aiService.getProviderForSearchType(.aiImageSearch) + let placeholderImage = createPlaceholderImage() + let voiceContext = "The user described their food verbally: \"\(description)\". There is no photo — analyze the food based solely on this text description. Provide the same detailed nutritional analysis you would for a food photo." + + log.info("🎙️ Routing voice/generative search '%{public}@' to AI provider: %{public}@", description, provider.rawValue) + + switch provider { + case .claude: + let key = aiService.getAPIKey(for: .claude) ?? "" + guard !key.isEmpty else { throw AIFoodAnalysisError.noApiKey } + return try await ClaudeFoodAnalysisService.shared.analyzeFoodImage(placeholderImage, apiKey: key, query: voiceContext) + + case .openAI: + let key = aiService.getAPIKey(for: .openAI) ?? "" + guard !key.isEmpty else { throw AIFoodAnalysisError.noApiKey } + return try await OpenAIFoodAnalysisService.shared.analyzeFoodImage(placeholderImage, apiKey: key, query: voiceContext) + + case .googleGemini: + let key = UserDefaults.standard.googleGeminiAPIKey + guard !key.isEmpty else { throw AIFoodAnalysisError.noApiKey } + return try await GoogleGeminiFoodAnalysisService.shared.analyzeFoodImage(placeholderImage, apiKey: key, query: voiceContext) + + case .bringYourOwn: + let key: String + let base: String + let model: String? + let version: String? + let org: String? + + if BYOTestConfig.enabled { + key = BYOTestConfig.apiKey + base = BYOTestConfig.baseURL + model = BYOTestConfig.model + version = BYOTestConfig.apiVersion + org = BYOTestConfig.organizationID + } else { + key = UserDefaults.standard.customAIAPIKey + base = UserDefaults.standard.customAIBaseURL + let m = UserDefaults.standard.customAIModel + let v = UserDefaults.standard.customAIAPIVersion + let o = UserDefaults.standard.customAIOrganization + model = m.isEmpty ? nil : m + version = v.isEmpty ? nil : v + org = o.isEmpty ? nil : o + } + + guard !key.isEmpty, !base.isEmpty else { throw AIFoodAnalysisError.noApiKey } + + return try await OpenAIFoodAnalysisService.shared.analyzeFoodImage( + placeholderImage, + apiKey: key, + query: voiceContext, + baseURL: base, + model: model, + apiVersion: version, + organizationID: org, + customPath: { + let path = UserDefaults.standard.customAIEndpointPath.trimmingCharacters(in: .whitespacesAndNewlines) + return path.isEmpty ? nil : path + }(), + telemetryCallback: nil + ) + + case .openFoodFacts, .usdaFoodData: + // Database providers can't do generative analysis — fall back to Gemini + log.info("⚠️ %{public}@ can't do generative search, falling back to Google Gemini", provider.rawValue) + let key = UserDefaults.standard.googleGeminiAPIKey + guard !key.isEmpty else { throw AIFoodAnalysisError.noApiKey } + return try await GoogleGeminiFoodAnalysisService.shared.analyzeFoodImage(placeholderImage, apiKey: key, query: voiceContext) + } + } diff --git a/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift b/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift index 597a408ca1..55da59cdcc 100644 --- a/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift +++ b/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift @@ -303,6 +303,51 @@ final class FoodFinder_SearchViewModel: ObservableObject { )) } + // MARK: - Voice / Generative Search + + /// Perform a generative AI food search from voice-transcribed text. + /// Routes through the AI image analysis pipeline (same prompt) instead + /// of the USDA text search, enabling natural-language food descriptions + /// like "a medium bowl of spicy ramen and a side of gyoza". + @MainActor + func performVoiceSearch(query: String) async -> AIFoodAnalysisResult? { + let trimmed = query.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return nil } + + print("🎙️ Starting generative voice search for: '\(trimmed)'") + + isFoodSearching = true + foodSearchError = nil + foodSearchResults = createSkeletonResults() + showingFoodSearch = true + + defer { + isFoodSearching = false + } + + do { + let result = try await foodFinder_withTimeout(seconds: 60) { + try await FoodSearchRouter.shared.analyzeFoodByDescription(trimmed) + } + + print("🎙️ Voice search AI analysis completed for: '\(trimmed)' — carbs: \(result.totalCarbohydrates)g") + + // Clear skeleton results + foodSearchResults = [] + showingFoodSearch = false + + return result + } catch { + print("🎙️ Voice search failed: \(error.localizedDescription)") + + if error is CancellationError { return nil } + + foodSearchError = "AI analysis failed: \(error.localizedDescription). Try typing your search instead." + foodSearchResults = [] + return nil + } + } + // MARK: - Food Search Methods /// Perform food search with given query diff --git a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift index e8599fab91..2e69e8eb21 100644 --- a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift +++ b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift @@ -52,6 +52,7 @@ struct FoodFinder_EntryPoint: View { @State private var showingAICamera = false @State private var showingAISettings = false + @State private var showingVoiceSearch = false @State private var isFoodSearchEnabled: Bool @State private var showAbsorptionReasoning = false @State private var isAdvancedAnalysisExpanded = false @@ -204,6 +205,25 @@ struct FoodFinder_EntryPoint: View { .sheet(isPresented: $showingAISettings) { AISettingsView() } + .sheet(isPresented: $showingVoiceSearch) { + NavigationView { + VoiceSearchView( + onSearchCompleted: { transcribedText in + showingVoiceSearch = false + // Route voice text through AI generative analysis (not USDA text search) + Task { @MainActor in + if let result = await searchVM.performVoiceSearch(query: transcribedText) { + handleAIFoodAnalysis(result) + } + } + }, + onCancel: { + showingVoiceSearch = false + } + ) + } + .navigationViewStyle(StackNavigationViewStyle()) + } } // MARK: - Wire ViewModel Callbacks @@ -256,7 +276,7 @@ extension FoodFinder_EntryPoint { .accessibilityLabel("AI Settings") } - // Search bar with barcode and AI camera buttons + // Search bar with voice, barcode, and AI camera buttons FoodSearchBar( searchText: $searchVM.foodSearchText, onBarcodeScanTapped: { @@ -264,6 +284,9 @@ extension FoodFinder_EntryPoint { }, onAICameraTapped: { showingAICamera = true + }, + onVoiceSearchTapped: { + showingVoiceSearch = true } ) diff --git a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift index 3bb12ee058..e235878752 100644 --- a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift +++ b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift @@ -13,10 +13,12 @@ struct FoodSearchBar: View { @Binding var searchText: String let onBarcodeScanTapped: () -> Void let onAICameraTapped: () -> Void + let onVoiceSearchTapped: () -> Void @State private var showingBarcodeScanner = false @State private var barcodeButtonPressed = false @State private var aiButtonPressed = false + @State private var voiceButtonPressed = false @State private var aiPulseAnimation = false @FocusState private var isSearchFieldFocused: Bool @@ -67,6 +69,32 @@ struct FoodSearchBar: View { // Right-aligned buttons group HStack(spacing: 12) { + // Voice search (Generative AI) button + Button(action: { + UIImpactFeedbackGenerator(style: .medium).impactOccurred() + isSearchFieldFocused = false + onVoiceSearchTapped() + }) { + Image(systemName: "mic.fill") + .font(.system(size: 20)) + .foregroundColor(.blue) + .scaleEffect(voiceButtonPressed ? 0.95 : 1.0) + } + .frame(width: 48, height: 48) + .background(Color(.systemGray6)) + .cornerRadius(10) + .accessibilityLabel(NSLocalizedString("Voice search", comment: "Accessibility label for voice search button")) + .onTapGesture { + withAnimation(.easeInOut(duration: 0.1)) { + voiceButtonPressed = true + } + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + withAnimation(.easeInOut(duration: 0.1)) { + voiceButtonPressed = false + } + } + } + // Barcode scan button Button(action: { print("🔍 DEBUG: Barcode button tapped") @@ -210,7 +238,8 @@ struct FoodSearchBar_Previews: PreviewProvider { FoodSearchBar( searchText: .constant(""), onBarcodeScanTapped: {}, - onAICameraTapped: {} + onAICameraTapped: {}, + onVoiceSearchTapped: {} ) FoodSearchBar( From 200a87061b953979e86507b134092ddfa2cc9676 Mon Sep 17 00:00:00 2001 From: Taylor Date: Sun, 8 Feb 2026 15:42:26 -0800 Subject: [PATCH 33/41] Detect keyboard dictation for generative AI search instead of mic button Replace the separate mic button with automatic natural language detection. When the user dictates into the search field via iOS keyboard dictation, the text is analyzed: short queries (1-3 words like "apple") use USDA, while longer descriptive phrases (4+ words like "a medium bowl of spicy ramen and a side of gyoza") automatically route to the AI analysis path. Changes: - SearchBar: Remove mic button and onVoiceSearchTapped parameter - SearchViewModel: Add isNaturalLanguageQuery() heuristic, route detected natural language through performVoiceSearch in performFoodSearch - EntryPoint: Remove voice search sheet, wire onGenerativeSearchResult callback to handleAIFoodAnalysis --- .../FoodFinder_SearchViewModel.swift | 45 ++++++++++++++++++- .../FoodFinder/FoodFinder_EntryPoint.swift | 30 +++---------- .../FoodFinder/FoodFinder_SearchBar.swift | 31 +------------ 3 files changed, 51 insertions(+), 55 deletions(-) diff --git a/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift b/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift index 55da59cdcc..c801074c3f 100644 --- a/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift +++ b/Loop/View Models/FoodFinder/FoodFinder_SearchViewModel.swift @@ -77,6 +77,10 @@ final class FoodFinder_SearchViewModel: ObservableObject { /// Callback when the selected food is cleared so the host can reset its fields. var onFoodCleared: (() -> Void)? + /// Callback when a generative AI search completes (triggered by natural language + /// detected in the text field, e.g. from iOS keyboard dictation). + var onGenerativeSearchResult: ((AIFoodAnalysisResult) -> Void)? + // MARK: - Food Search Published Properties /// Current search text for food lookup @@ -348,6 +352,32 @@ final class FoodFinder_SearchViewModel: ObservableObject { } } + // MARK: - Natural Language Detection + + /// Heuristic to detect natural language food descriptions (likely from iOS keyboard dictation). + /// Short keyword queries like "apple" or "chicken soup" go to USDA; longer descriptive + /// phrases like "a medium bowl of spicy ramen and a side of gyoza" go to AI. + private func isNaturalLanguageQuery(_ query: String) -> Bool { + let words = query.split(separator: " ").filter { !$0.isEmpty } + guard words.count >= 4 else { return false } + + let lowered = query.lowercased() + + // Explicit natural language indicators (common in dictated speech) + let indicators = [ + "i'm eating", "i ate", "i had", "i'm having", "i just had", "i just ate", + "a bowl of", "a plate of", "a cup of", "a glass of", "a piece of", "a slice of", + "a medium", "a large", "a small", "with a side", "and a side", "and a", + "for lunch", "for dinner", "for breakfast", "some " + ] + for indicator in indicators { + if lowered.contains(indicator) { return true } + } + + // 5+ words without explicit indicators is still likely a descriptive phrase + return words.count >= 5 + } + // MARK: - Food Search Methods /// Perform food search with given query @@ -369,13 +399,26 @@ final class FoodFinder_SearchViewModel: ObservableObject { print("🔍 Starting search for: '\(trimmedQuery)'") + // Detect natural language input (e.g. iOS keyboard dictation) and route to AI + if isNaturalLanguageQuery(trimmedQuery) { + print("🎙️ Natural language detected — routing to AI generative search") + foodSearchTask = Task { [weak self] in + guard let self = self else { return } + if let result = await self.performVoiceSearch(query: trimmedQuery) { + await MainActor.run { + self.onGenerativeSearchResult?(result) + } + } + } + return + } + // Show search UI, clear previous results and error showingFoodSearch = true foodSearchResults = [] // Clear previous results to show searching state foodSearchError = nil isFoodSearching = true - // Perform new search immediately but ensure minimum search time for UX foodSearchTask = Task { [weak self] in guard let self = self else { return } diff --git a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift index 2e69e8eb21..9767c7b8f0 100644 --- a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift +++ b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift @@ -52,7 +52,6 @@ struct FoodFinder_EntryPoint: View { @State private var showingAICamera = false @State private var showingAISettings = false - @State private var showingVoiceSearch = false @State private var isFoodSearchEnabled: Bool @State private var showAbsorptionReasoning = false @State private var isAdvancedAnalysisExpanded = false @@ -205,25 +204,6 @@ struct FoodFinder_EntryPoint: View { .sheet(isPresented: $showingAISettings) { AISettingsView() } - .sheet(isPresented: $showingVoiceSearch) { - NavigationView { - VoiceSearchView( - onSearchCompleted: { transcribedText in - showingVoiceSearch = false - // Route voice text through AI generative analysis (not USDA text search) - Task { @MainActor in - if let result = await searchVM.performVoiceSearch(query: transcribedText) { - handleAIFoodAnalysis(result) - } - } - }, - onCancel: { - showingVoiceSearch = false - } - ) - } - .navigationViewStyle(StackNavigationViewStyle()) - } } // MARK: - Wire ViewModel Callbacks @@ -239,6 +219,11 @@ struct FoodFinder_EntryPoint: View { searchVM.onFoodCleared = { selectedFoodProduct?.wrappedValue = nil } + // When the search field detects natural language (e.g. iOS keyboard dictation), + // the ViewModel routes through AI generative search and delivers the result here. + searchVM.onGenerativeSearchResult = { result in + handleAIFoodAnalysis(result) + } } // MARK: - Load Favorite Foods @@ -276,7 +261,7 @@ extension FoodFinder_EntryPoint { .accessibilityLabel("AI Settings") } - // Search bar with voice, barcode, and AI camera buttons + // Search bar with barcode and AI camera buttons FoodSearchBar( searchText: $searchVM.foodSearchText, onBarcodeScanTapped: { @@ -284,9 +269,6 @@ extension FoodFinder_EntryPoint { }, onAICameraTapped: { showingAICamera = true - }, - onVoiceSearchTapped: { - showingVoiceSearch = true } ) diff --git a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift index e235878752..3bb12ee058 100644 --- a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift +++ b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift @@ -13,12 +13,10 @@ struct FoodSearchBar: View { @Binding var searchText: String let onBarcodeScanTapped: () -> Void let onAICameraTapped: () -> Void - let onVoiceSearchTapped: () -> Void @State private var showingBarcodeScanner = false @State private var barcodeButtonPressed = false @State private var aiButtonPressed = false - @State private var voiceButtonPressed = false @State private var aiPulseAnimation = false @FocusState private var isSearchFieldFocused: Bool @@ -69,32 +67,6 @@ struct FoodSearchBar: View { // Right-aligned buttons group HStack(spacing: 12) { - // Voice search (Generative AI) button - Button(action: { - UIImpactFeedbackGenerator(style: .medium).impactOccurred() - isSearchFieldFocused = false - onVoiceSearchTapped() - }) { - Image(systemName: "mic.fill") - .font(.system(size: 20)) - .foregroundColor(.blue) - .scaleEffect(voiceButtonPressed ? 0.95 : 1.0) - } - .frame(width: 48, height: 48) - .background(Color(.systemGray6)) - .cornerRadius(10) - .accessibilityLabel(NSLocalizedString("Voice search", comment: "Accessibility label for voice search button")) - .onTapGesture { - withAnimation(.easeInOut(duration: 0.1)) { - voiceButtonPressed = true - } - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - withAnimation(.easeInOut(duration: 0.1)) { - voiceButtonPressed = false - } - } - } - // Barcode scan button Button(action: { print("🔍 DEBUG: Barcode button tapped") @@ -238,8 +210,7 @@ struct FoodSearchBar_Previews: PreviewProvider { FoodSearchBar( searchText: .constant(""), onBarcodeScanTapped: {}, - onAICameraTapped: {}, - onVoiceSearchTapped: {} + onAICameraTapped: {} ) FoodSearchBar( From a338c8ee3833dcc43e9c5a71f0919368dd81b43e Mon Sep 17 00:00:00 2001 From: Taylor Date: Sun, 8 Feb 2026 15:52:17 -0800 Subject: [PATCH 34/41] Fix pbxproj group hierarchy: attach orphaned FoodFinder groups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Python script created group definitions but didn't properly attach all of them to their parent groups. Fixes: - Services group → now child of Loop app root (was orphaned) - Resources group → now child of Loop app root (was orphaned) - Documentation group → now child of project root (was orphaned) - ViewModels/FoodFinder → moved from Loop root to View Models group - Tests/FoodFinder → moved from project root to LoopTests group --- Loop.xcodeproj/project.pbxproj | 7 +- .../FoodFinder/FoodFinder_FeatureFlags.swift | 85 +++++++ Loop/Views/CarbEntryView.swift | 26 +- .../FoodFinder/FoodFinder_AICameraView.swift | 69 ++--- .../FoodFinder/FoodFinder_EntryPoint.swift | 5 - .../FoodFinder/FoodFinder_SearchBar.swift | 237 +++++++++--------- Loop/Views/SettingsView.swift | 25 +- 7 files changed, 269 insertions(+), 185 deletions(-) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 00e523273c..a7701762dd 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -1767,7 +1767,7 @@ 43776F8D1B8022E90074EA36 /* Products */, 437D9BA11D7B5203007245E8 /* Loop.xcconfig */, A951C5FF23E8AB51003E26DC /* Version.xcconfig */, - 93F4741D9B20D83B5B586D72 /* FoodFinder */, + 4E509264CB37CD931DE5B407 /* Documentation */, ); sourceTree = ""; }; @@ -1810,7 +1810,8 @@ 43F5C2CE1B92A2A0003EB13D /* View Controllers */, 43F5C2CF1B92A2ED003EB13D /* Views */, 897A5A9724C22DCE00C4E71D /* View Models */, - 88C428BA6D11553B8D7CF090 /* FoodFinder */, + 9C035E7454E6255EF4EA445C /* Services */, + AE59D88C5460D2413CB142C1 /* Resources */, ); path = Loop; sourceTree = ""; @@ -2127,6 +2128,7 @@ A9DAE7CF2332D77F006AE942 /* LoopTests.swift */, 8968B113240C55F10074BB48 /* LoopSettingsTests.swift */, E93E86AC24DDE02C00FF40C8 /* Mock Stores */, + 93F4741D9B20D83B5B586D72 /* FoodFinder */, ); path = LoopTests; sourceTree = ""; @@ -2421,6 +2423,7 @@ C174233B259BEB0F00399C9D /* ManualEntryDoseViewModel.swift */, 1DB619AB270BAD3D006C9D07 /* VersionUpdateViewModel.swift */, 3ED319952EB65A5C00820BCF /* LiveActivityManagementViewModel.swift */, + 88C428BA6D11553B8D7CF090 /* FoodFinder */, ); path = "View Models"; sourceTree = ""; diff --git a/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift b/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift index 4de6671a30..69ebb56771 100644 --- a/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift +++ b/Loop/Resources/FoodFinder/FoodFinder_FeatureFlags.swift @@ -374,4 +374,89 @@ MANDATORY REQUIREMENTS: get { bool(forKey: FoodFinder_FeatureFlags.Keys.advancedDosingRecommendationsEnabled) } set { set(newValue, forKey: FoodFinder_FeatureFlags.Keys.advancedDosingRecommendationsEnabled) } } + + // MARK: - Legacy Aliases (non-prefixed) + // Internal FoodFinder code (AIAnalysis, SettingsView, SearchRouter) uses these + // non-prefixed names. They forward to the same UserDefaults keys as above. + + var aiProvider: String { + get { foodFinder_aiProvider } + set { foodFinder_aiProvider = newValue } + } + var aiImageProvider: String { + get { foodFinder_aiImageProvider } + set { foodFinder_aiImageProvider = newValue } + } + var analysisMode: String { + get { foodFinder_analysisMode } + set { foodFinder_analysisMode = newValue } + } + var useGPT5ForOpenAI: Bool { + get { foodFinder_useGPT5ForOpenAI } + set { foodFinder_useGPT5ForOpenAI = newValue } + } + var claudeAPIKey: String { + get { foodFinder_claudeAPIKey } + set { foodFinder_claudeAPIKey = newValue } + } + var claudeQuery: String { + get { foodFinder_claudeQuery } + set { foodFinder_claudeQuery = newValue } + } + var openAIAPIKey: String { + get { foodFinder_openAIAPIKey } + set { foodFinder_openAIAPIKey = newValue } + } + var openAIQuery: String { + get { foodFinder_openAIQuery } + set { foodFinder_openAIQuery = newValue } + } + var googleGeminiAPIKey: String { + get { foodFinder_googleGeminiAPIKey } + set { foodFinder_googleGeminiAPIKey = newValue } + } + var googleGeminiQuery: String { + get { foodFinder_googleGeminiQuery } + set { foodFinder_googleGeminiQuery = newValue } + } + var usdaAPIKey: String { + get { foodFinder_usdaAPIKey } + set { foodFinder_usdaAPIKey = newValue } + } + var customAIBaseURL: String { + get { foodFinder_customAIBaseURL } + set { foodFinder_customAIBaseURL = newValue } + } + var customAIAPIKey: String { + get { foodFinder_customAIAPIKey } + set { foodFinder_customAIAPIKey = newValue } + } + var customAIModel: String { + get { foodFinder_customAIModel } + set { foodFinder_customAIModel = newValue } + } + var customAIAPIVersion: String { + get { foodFinder_customAIAPIVersion } + set { foodFinder_customAIAPIVersion = newValue } + } + var customAIOrganization: String { + get { foodFinder_customAIOrganization } + set { foodFinder_customAIOrganization = newValue } + } + var customAIEndpointPath: String { + get { foodFinder_customAIEndpointPath } + set { foodFinder_customAIEndpointPath = newValue } + } + var textSearchProvider: String { + get { foodFinder_textSearchProvider } + set { foodFinder_textSearchProvider = newValue } + } + var barcodeSearchProvider: String { + get { foodFinder_barcodeSearchProvider } + set { foodFinder_barcodeSearchProvider = newValue } + } + var advancedDosingRecommendationsEnabled: Bool { + get { foodFinder_advancedDosingRecommendationsEnabled } + set { foodFinder_advancedDosingRecommendationsEnabled = newValue } + } } diff --git a/Loop/Views/CarbEntryView.swift b/Loop/Views/CarbEntryView.swift index 4dfa3f8211..9f8413bbb8 100644 --- a/Loop/Views/CarbEntryView.swift +++ b/Loop/Views/CarbEntryView.swift @@ -70,19 +70,8 @@ struct CarbEntryView: View, HorizontalSizeClassOverride { mainCard .padding(.top, 8) - - continueActionButton - // FoodFinder integration — single insertion point - if isNewEntry, FoodFinder_FeatureFlags.isEnabled { - FoodFinder_EntryPoint( - carbsQuantity: $viewModel.carbsQuantity, - foodType: $viewModel.foodType, - absorptionTime: $viewModel.absorptionTime, - absorptionTimeWasEdited: viewModel.absorptionTimeWasEdited, - defaultAbsorptionTimes: viewModel.defaultAbsorptionTimes - ) - } + continueActionButton if isNewEntry, FeatureFlags.allowExperimentalFeatures { favoriteFoodsCard @@ -115,8 +104,19 @@ struct CarbEntryView: View, HorizontalSizeClassOverride { CarbQuantityRow(quantity: $viewModel.carbsQuantity, isFocused: amountConsumedFocused, title: NSLocalizedString("Amount Consumed", comment: "Label for carb quantity entry row on carb entry screen"), preferredCarbUnit: viewModel.preferredCarbUnit) + // FoodFinder integration — inside the main card + if isNewEntry { + FoodFinder_EntryPoint( + carbsQuantity: $viewModel.carbsQuantity, + foodType: $viewModel.foodType, + absorptionTime: $viewModel.absorptionTime, + absorptionTimeWasEdited: viewModel.absorptionTimeWasEdited, + defaultAbsorptionTimes: viewModel.defaultAbsorptionTimes + ) + } + CardSectionDivider() - + DatePickerRow(date: $viewModel.time, isFocused: timeFocused, minimumDate: viewModel.minimumDate, maximumDate: viewModel.maximumDate) CardSectionDivider() diff --git a/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift b/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift index 71fb8dfaac..08ecaf7f70 100644 --- a/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift +++ b/Loop/Views/FoodFinder/FoodFinder_AICameraView.swift @@ -29,67 +29,69 @@ struct AICameraView: View { ZStack { // Auto-launch camera interface if capturedImage == nil { - VStack(spacing: 20) { - Spacer() - - // Simple launch message - VStack(spacing: 16) { - Image(systemName: "camera.viewfinder") - .font(.system(size: 64)) - .foregroundColor(.accentColor) - - VStack(alignment: .leading, spacing: 6) { + VStack(spacing: 0) { + ScrollView { + VStack(spacing: 24) { + // Camera icon + Image(systemName: "camera.viewfinder") + .font(.system(size: 64)) + .foregroundColor(.accentColor) + .padding(.top, 24) + + // Heading Text("Better photos = better estimates") - .font(.subheadline) - .fontWeight(.medium) - Spacer() - VStack(alignment: .leading, spacing: 8) { + .font(.title3) + .fontWeight(.semibold) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal) + + // Tips + VStack(alignment: .leading, spacing: 20) { CameraTipRow(icon: "sun.max.fill", title: "Use bright, even light", detail: "Harsh shadows confuse the AI and dim light can hide textures.") CameraTipRow(icon: "arrow.2.circlepath", title: "Clear the area", detail: "Remove napkins, lids, or packaging that may be misidentified as food.") CameraTipRow(icon: "square.dashed", title: "Frame the full meal", detail: "Make sure every food item is in the frame.") CameraTipRow(icon: "ruler", title: "Add a size reference", detail: "Forks, cups, or hands help AI calculate realistic portions.") CameraTipRow(icon: "camera.metering.spot", title: "Shoot from slightly above", detail: "Keep the camera level to reduce distortion and keep portions proportional.") } + .padding(.horizontal) } - .padding() - .background(Color(.systemGray6)) - .clipShape(RoundedRectangle(cornerRadius: 14, style: .continuous)) } Spacer() - // Quick action buttons + // Action buttons pinned to bottom VStack(spacing: 12) { Button(action: { imageSourceType = .camera showingImagePicker = true }) { - HStack { + HStack(spacing: 8) { Image(systemName: "sparkles") - .font(.system(size: 14)) + .font(.system(size: 16, weight: .semibold)) Text("Take a Photo") + .fontWeight(.semibold) } .frame(maxWidth: .infinity) - .padding() - .background(Color.purple) + .padding(.vertical, 16) + .background(Color(red: 0.85, green: 0.25, blue: 0.85)) .foregroundColor(.white) - .cornerRadius(12) + .cornerRadius(14) } Button(action: { - // Allow selecting from photo library imageSourceType = .photoLibrary showingImagePicker = true }) { - HStack { + HStack(spacing: 8) { Image(systemName: "photo.fill") Text("Choose from Library") + .fontWeight(.medium) } .frame(maxWidth: .infinity) - .padding() - .background(Color.secondary.opacity(0.1)) + .padding(.vertical, 16) + .background(Color(.systemGray5)) .foregroundColor(.primary) - .cornerRadius(12) + .cornerRadius(14) } } .padding(.horizontal) @@ -360,16 +362,17 @@ private struct CameraTipRow: View { let detail: String var body: some View { - HStack(alignment: .top, spacing: 12) { + HStack(alignment: .top, spacing: 14) { Image(systemName: icon) .foregroundColor(.orange) - .font(.system(size: 20, weight: .semibold)) + .font(.system(size: 22, weight: .semibold)) + .frame(width: 28, alignment: .center) VStack(alignment: .leading, spacing: 4) { Text(title) - .font(.subheadline) - .fontWeight(.semibold) + .font(.body) + .fontWeight(.bold) Text(detail) - .font(.caption) + .font(.subheadline) .foregroundColor(.secondary) .multilineTextAlignment(.leading) .fixedSize(horizontal: false, vertical: true) diff --git a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift index 9767c7b8f0..8fb7ccf021 100644 --- a/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift +++ b/Loop/Views/FoodFinder/FoodFinder_EntryPoint.swift @@ -110,10 +110,7 @@ struct FoodFinder_EntryPoint: View { foodSearchSection CardSectionDivider() - } - // Servings + product info + nutrition circles + AI notes - if isFoodSearchEnabled { ServingsDisplayRow( servings: $searchVM.numberOfServings, servingSize: searchVM.selectedFoodServingSize, @@ -366,7 +363,6 @@ extension FoodFinder_EntryPoint { .padding(.horizontal, 8) .background(Color(.systemGray6)) .cornerRadius(12) - .padding(.horizontal) .padding(.top, 8) } } @@ -524,7 +520,6 @@ extension FoodFinder_EntryPoint { .padding(.horizontal, 8) .background(Color(.systemGray6)) .cornerRadius(12) - .padding(.horizontal, 4) .padding(.top, 8) } } diff --git a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift index 3bb12ee058..d3b30b838b 100644 --- a/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift +++ b/Loop/Views/FoodFinder/FoodFinder_SearchBar.swift @@ -7,6 +7,67 @@ // import SwiftUI +import UIKit + +// MARK: - UIKit TextField (matches RowTextField pattern used by CarbQuantityRow) + +/// UIKit-backed text field that properly participates in first responder handoff +/// with other UIKit text fields in the same card (e.g. CarbQuantityRow's RowTextField). +private struct FoodSearchTextField: UIViewRepresentable { + @Binding var text: String + var placeholder: String + + func makeUIView(context: Context) -> UITextField { + let tf = UITextField() + tf.placeholder = placeholder + tf.autocorrectionType = .no + tf.autocapitalizationType = .none + tf.returnKeyType = .search + tf.font = .preferredFont(forTextStyle: .body) + tf.delegate = context.coordinator + tf.addTarget(context.coordinator, action: #selector(Coordinator.textChanged(_:)), for: .editingChanged) + tf.setContentHuggingPriority(.defaultLow, for: .horizontal) + tf.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + return tf + } + + func updateUIView(_ uiView: UITextField, context: Context) { + if uiView.text != text { + uiView.text = text + } + } + + func makeCoordinator() -> Coordinator { + Coordinator(text: $text) + } + + class Coordinator: NSObject, UITextFieldDelegate { + @Binding var text: String + + init(text: Binding) { + _text = text + } + + @objc func textChanged(_ textField: UITextField) { + text = textField.text ?? "" + } + + func textFieldDidBeginEditing(_ textField: UITextField) { + print("🔍 FoodSearchTextField: DID BEGIN EDITING (keyboard should be visible)") + } + + func textFieldDidEndEditing(_ textField: UITextField) { + print("🔍 FoodSearchTextField: DID END EDITING") + } + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + } +} + +// MARK: - Food Search Bar /// A search bar component for food search with barcode scanning and AI analysis capabilities struct FoodSearchBar: View { @@ -15,12 +76,8 @@ struct FoodSearchBar: View { let onAICameraTapped: () -> Void @State private var showingBarcodeScanner = false - @State private var barcodeButtonPressed = false - @State private var aiButtonPressed = false @State private var aiPulseAnimation = false - @FocusState private var isSearchFieldFocused: Bool - var body: some View { HStack(spacing: 12) { // Expanded search field with icon @@ -29,25 +86,16 @@ struct FoodSearchBar: View { .foregroundColor(.secondary) .font(.system(size: 16)) - TextField( - NSLocalizedString("Search foods...", comment: "Placeholder text for food search field"), - text: $searchText + FoodSearchTextField( + text: $searchText, + placeholder: NSLocalizedString("Search foods...", comment: "Placeholder text for food search field") ) - .focused($isSearchFieldFocused) - .textFieldStyle(PlainTextFieldStyle()) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) - .onSubmit { - // Dismiss keyboard when user hits return - isSearchFieldFocused = false - } + .frame(maxWidth: .infinity) // Clear button if !searchText.isEmpty { Button(action: { - // Instant haptic feedback UIImpactFeedbackGenerator(style: .light).impactOccurred() - withAnimation(.easeInOut(duration: 0.1)) { searchText = "" } @@ -63,100 +111,55 @@ struct FoodSearchBar: View { .padding(.vertical, 8) .background(Color(.systemGray6)) .cornerRadius(10) - .frame(maxWidth: .infinity) // Allow search field to expand - - // Right-aligned buttons group - HStack(spacing: 12) { - // Barcode scan button - Button(action: { - print("🔍 DEBUG: Barcode button tapped") - print("🔍 DEBUG: showingBarcodeScanner before: \(showingBarcodeScanner)") - - // Instant haptic feedback - UIImpactFeedbackGenerator(style: .medium).impactOccurred() - - // Dismiss keyboard first if active - withAnimation(.easeInOut(duration: 0.1)) { - isSearchFieldFocused = false - } - - DispatchQueue.main.async { - showingBarcodeScanner = true - print("🔍 DEBUG: showingBarcodeScanner set to: \(showingBarcodeScanner)") - } - - onBarcodeScanTapped() - print("🔍 DEBUG: onBarcodeScanTapped() called") - }) { - BarcodeIcon() - .frame(width: 60, height: 40) - .scaleEffect(barcodeButtonPressed ? 0.95 : 1.0) - } - .frame(width: 72, height: 48) - .background(Color(.systemGray6)) - .cornerRadius(10) - .accessibilityLabel(NSLocalizedString("Scan barcode", comment: "Accessibility label for barcode scan button")) - .onTapGesture { - // Button press animation - withAnimation(.easeInOut(duration: 0.1)) { - barcodeButtonPressed = true - } - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - withAnimation(.easeInOut(duration: 0.1)) { - barcodeButtonPressed = false - } - } - } + .frame(maxWidth: .infinity) - // AI Camera button - Button(action: { - // Instant haptic feedback - UIImpactFeedbackGenerator(style: .medium).impactOccurred() - - onAICameraTapped() - }) { - AICameraIcon() - .frame(width: 42, height: 42) - .scaleEffect(aiButtonPressed ? 0.95 : 1.0) - } - .frame(width: 48, height: 48) - .background(Color(.systemGray6)) - .cornerRadius(10) - .overlay( - RoundedRectangle(cornerRadius: 10) - .stroke(Color.purple.opacity(aiPulseAnimation ? 0.8 : 0.3), lineWidth: 2) - .scaleEffect(aiPulseAnimation ? 1.05 : 1.0) - .animation(.easeInOut(duration: 1.5).repeatForever(autoreverses: true), value: aiPulseAnimation) - ) - .accessibilityLabel(NSLocalizedString("AI food analysis", comment: "Accessibility label for AI camera button")) - .onTapGesture { - // Button press animation - withAnimation(.easeInOut(duration: 0.1)) { - aiButtonPressed = true - } - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - withAnimation(.easeInOut(duration: 0.1)) { - aiButtonPressed = false - } - } - } - .onAppear { - // Start pulsing animation - aiPulseAnimation = true + // Barcode scan button + Button(action: { + UIImpactFeedbackGenerator(style: .medium).impactOccurred() + DispatchQueue.main.async { + showingBarcodeScanner = true } + onBarcodeScanTapped() + }) { + BarcodeIcon() + .frame(width: 28, height: 22) + } + .buttonStyle(ScaleButtonStyle()) + .frame(width: 52, height: 36) + .background(Color(.systemGray6)) + .cornerRadius(10) + .accessibilityLabel(NSLocalizedString("Scan barcode", comment: "Accessibility label for barcode scan button")) + + // AI Camera button + Button(action: { + UIImpactFeedbackGenerator(style: .medium).impactOccurred() + onAICameraTapped() + }) { + AICameraIcon() + .frame(width: 20, height: 20) + } + .buttonStyle(ScaleButtonStyle()) + .frame(width: 44, height: 36) + .background(Color(.systemGray6)) + .cornerRadius(10) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color.purple.opacity(aiPulseAnimation ? 0.8 : 0.3), lineWidth: 2) + .scaleEffect(aiPulseAnimation ? 1.05 : 1.0) + .animation(.easeInOut(duration: 1.5).repeatForever(autoreverses: true), value: aiPulseAnimation) + ) + .accessibilityLabel(NSLocalizedString("AI food analysis", comment: "Accessibility label for AI camera button")) + .onAppear { + aiPulseAnimation = true } } - .padding(.horizontal) .sheet(isPresented: $showingBarcodeScanner) { NavigationView { BarcodeScannerView( onBarcodeScanned: { barcode in - print("🔍 DEBUG: FoodSearchBar received barcode: \(barcode)") showingBarcodeScanner = false - // Barcode will be handled by CarbEntryViewModel through BarcodeScannerService publisher }, onCancel: { - print("🔍 DEBUG: FoodSearchBar barcode scan cancelled") showingBarcodeScanner = false } ) @@ -166,38 +169,36 @@ struct FoodSearchBar: View { } } +// MARK: - Scale Button Style + +private struct ScaleButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + .scaleEffect(configuration.isPressed ? 0.95 : 1.0) + .animation(.easeInOut(duration: 0.1), value: configuration.isPressed) + } +} + // MARK: - Barcode Icon Component -/// Custom barcode icon that adapts to dark/light mode struct BarcodeIcon: View { - @Environment(\.colorScheme) private var colorScheme - var body: some View { - Group { - if colorScheme == .dark { - // Dark mode icon - Image("icon-barcode-darkmode") - .resizable() - .aspectRatio(contentMode: .fit) - } else { - // Light mode icon - Image("icon-barcode-lightmode") - .resizable() - .aspectRatio(contentMode: .fit) - } - } + Image(systemName: "barcode.viewfinder") + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(.primary) } } // MARK: - AI Camera Icon Component -/// AI camera icon for food analysis using system icon struct AICameraIcon: View { var body: some View { Image(systemName: "sparkles") .resizable() .aspectRatio(contentMode: .fit) - .foregroundColor(.purple).frame(width: 24, height: 24) // Set specific size + .foregroundColor(.purple) + .frame(width: 24, height: 24) } } diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index 7494189e75..a1d7c95c64 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -84,9 +84,6 @@ public struct SettingsView: View { if FeatureFlags.allowExperimentalFeatures { favoriteFoodsSection } - if FoodFinder_FeatureFlags.isEnabled { - foodFinderSettingsSection - } if (viewModel.pumpManagerSettingsViewModel.isTestingDevice || viewModel.cgmManagerSettingsViewModel.isTestingDevice) && viewModel.showDeleteTestData { deleteDataSection } @@ -301,6 +298,8 @@ extension SettingsView { descriptiveText: NSLocalizedString("Diabetes Treatment", comment: "Descriptive text for Therapy Settings")) } + foodFinderSettingsRow + ForEach(pluginMenuItems.filter {$0.section == .configuration}) { item in item.view } @@ -381,17 +380,15 @@ extension SettingsView { } // FoodFinder — single settings insertion point - private var foodFinderSettingsSection: some View { - Section { - NavigationLink(destination: FoodFinder_SettingsView()) { - LargeButton(action: {}, - includeArrow: false, - imageView: Image(systemName: "fork.knife.circle.fill") - .foregroundColor(.green) - .font(.system(size: 24)), - label: NSLocalizedString("FoodFinder Settings", comment: "Title text for button to FoodFinder Settings"), - descriptiveText: NSLocalizedString("Configure AI Food Analysis", comment: "Descriptive text for FoodFinder Settings")) - } + private var foodFinderSettingsRow: some View { + NavigationLink(destination: AISettingsView()) { + LargeButton(action: {}, + includeArrow: false, + imageView: Image(systemName: "fork.knife.circle.fill") + .foregroundColor(.purple) + .font(.system(size: 36)), + label: NSLocalizedString("FoodFinder Settings", comment: "Title text for button to FoodFinder Settings"), + descriptiveText: NSLocalizedString("Configure AI Food Analysis", comment: "Descriptive text for FoodFinder Settings")) } } From 5786e873adbc885b163d8be1bcf06ff2184b3fea Mon Sep 17 00:00:00 2001 From: Taylor Date: Mon, 9 Feb 2026 11:56:32 -0800 Subject: [PATCH 35/41] FoodFinder: fix barcode thumbnail loading, add secure API key storage, analysis history - Fix triple barcode fire by consuming scan result immediately in Combine sink - Replace AsyncImage with pre-downloaded thumbnail to avoid SwiftUI rebuild issues - Use smallest OFF thumbnail (100px) with static food icon fallback for slow servers - Add secure Keychain storage for AI provider API keys - Add analysis history tracking with FoodFinder_AnalysisRecord - Consolidate AI provider settings and remove BYOTestConfig --- .../Assigning a bundle identifier.png | Bin 284845 -> 0 bytes Documentation/Changing the app icon.png | Bin 471023 -> 0 bytes Documentation/Changing the display name.png | Bin 444606 -> 0 bytes .../FoodFinder/FoodFinder_README.md | 0 Documentation/Screenshots/Phone Bolus.png | Bin 129031 -> 0 bytes Documentation/Screenshots/Phone Graphs.png | Bin 393537 -> 0 bytes .../Phone Notification Battery.png | Bin 375356 -> 0 bytes .../Phone Notification Bolus Failure.png | Bin 214666 -> 0 bytes .../Phone Notification Loop Failure.png | Bin 222864 -> 0 bytes Documentation/Screenshots/Watch Bolus.png | Bin 13727 -> 0 bytes .../Screenshots/Watch Carb Entry.png | Bin 26598 -> 0 bytes .../Screenshots/Watch Complication.png | Bin 22748 -> 0 bytes Documentation/Screenshots/Watch Menu.png | Bin 10734 -> 0 bytes .../Watch Notification Battery.png | Bin 39655 -> 0 bytes .../Watch Notification Bolus Failure.png | Bin 36176 -> 0 bytes .../Watch Notification Reservoir.png | Bin 38592 -> 0 bytes .../Testing/Images/mock_managers.png | Bin 71951 -> 0 bytes Documentation/Testing/Images/rewind.png | Bin 157868 -> 0 bytes .../Testing/Images/scenarios_menu.png | Bin 153072 -> 0 bytes .../Testing/Images/scenarios_url.png | Bin 60069 -> 0 bytes Documentation/Testing/Scenarios.md | 67 - Documentation/User Icons/LoopingPump.png | Bin 15380 -> 0 bytes Loop.xcodeproj/project.pbxproj | 24 +- Loop/Localizable.xcstrings | 675 +++- .../FoodFinder_AnalysisRecord.swift | 30 + .../Models/FoodFinder/FoodFinder_Models.swift | 11 +- .../FoodFinder/FoodFinder_FeatureFlags.swift | 445 +-- .../FoodFinder/FoodFinder_AIAnalysis.swift | 3433 +---------------- .../FoodFinder_AIProviderConfig.swift | 303 +- .../FoodFinder_AIServiceAdapter.swift | 16 +- .../FoodFinder_AIServiceManager.swift | 749 ++-- .../FoodFinder_AISettingsManager.swift | 12 +- .../FoodFinder_AnalysisHistoryStore.swift | 78 + .../FoodFinder/FoodFinder_BYOTestConfig.swift | 34 - .../FoodFinder/FoodFinder_SearchRouter.swift | 225 +- .../FoodFinder/FoodFinder_SecureStorage.swift | 129 + .../AddEditFavoriteFoodViewModel.swift | 7 +- Loop/View Models/CarbEntryViewModel.swift | 46 + .../FoodFinder_SearchViewModel.swift | 563 +-- Loop/Views/AddEditFavoriteFoodView.swift | 17 +- Loop/Views/CarbEntryView.swift | 188 +- Loop/Views/FavoriteFoodDetailView.swift | 18 +- Loop/Views/FavoriteFoodsView.swift | 19 +- .../FoodFinder/FoodFinder_AICameraView.swift | 79 +- .../FoodFinder/FoodFinder_EntryPoint.swift | 247 +- .../FoodFinder_ProviderEditView.swift | 249 -- .../FoodFinder/FoodFinder_SearchBar.swift | 35 +- .../FoodFinder_SearchResultsView.swift | 94 +- .../FoodFinder/FoodFinder_SettingsView.swift | 991 +++-- 49 files changed, 3000 insertions(+), 5784 deletions(-) delete mode 100644 Documentation/Assigning a bundle identifier.png delete mode 100644 Documentation/Changing the app icon.png delete mode 100644 Documentation/Changing the display name.png rename {Loop/Documentation => Documentation}/FoodFinder/FoodFinder_README.md (100%) delete mode 100644 Documentation/Screenshots/Phone Bolus.png delete mode 100755 Documentation/Screenshots/Phone Graphs.png delete mode 100755 Documentation/Screenshots/Phone Notification Battery.png delete mode 100644 Documentation/Screenshots/Phone Notification Bolus Failure.png delete mode 100755 Documentation/Screenshots/Phone Notification Loop Failure.png delete mode 100755 Documentation/Screenshots/Watch Bolus.png delete mode 100755 Documentation/Screenshots/Watch Carb Entry.png delete mode 100755 Documentation/Screenshots/Watch Complication.png delete mode 100644 Documentation/Screenshots/Watch Menu.png delete mode 100755 Documentation/Screenshots/Watch Notification Battery.png delete mode 100755 Documentation/Screenshots/Watch Notification Bolus Failure.png delete mode 100755 Documentation/Screenshots/Watch Notification Reservoir.png delete mode 100644 Documentation/Testing/Images/mock_managers.png delete mode 100644 Documentation/Testing/Images/rewind.png delete mode 100644 Documentation/Testing/Images/scenarios_menu.png delete mode 100644 Documentation/Testing/Images/scenarios_url.png delete mode 100644 Documentation/Testing/Scenarios.md delete mode 100644 Documentation/User Icons/LoopingPump.png create mode 100644 Loop/Models/FoodFinder/FoodFinder_AnalysisRecord.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift delete mode 100644 Loop/Services/FoodFinder/FoodFinder_BYOTestConfig.swift create mode 100644 Loop/Services/FoodFinder/FoodFinder_SecureStorage.swift delete mode 100644 Loop/Views/FoodFinder/FoodFinder_ProviderEditView.swift diff --git a/Documentation/Assigning a bundle identifier.png b/Documentation/Assigning a bundle identifier.png deleted file mode 100644 index 6b6782fe790f5b83f9a6ba8d295670c6c5faf2eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284845 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%0DQ-45Qk4gm#QZxn^Kd3}DV|OpI*yHwGR(F_{yXq& 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 z z>(Iq}z{ec5LL|?1zTC_h?uNCZeLkPCwnIFSd1W3Eek|F2<;kh=x!_Pn5=Y{DR)Ypl zj(nz1o!)Rq?@l_}>an4QwM3S_O1|)tDdHJ%0AfaZ#1r6LM{nkhZ;W($3FO;=7Ph8Q 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 z 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�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 T#-%yn&-Se`9}7SF{J;MnaR diff --git a/Documentation/Changing the app icon.png b/Documentation/Changing the app icon.png deleted file mode 100644 index 62bc646a934e04b2c7bfcf18db0a6f4f7ed2cc05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471023 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%0Dti<;{ee_dtfS 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 z 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 z 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 diff --git a/Documentation/Changing the display name.png b/Documentation/Changing the display name.png deleted file mode 100644 index 762bf9a50324e8c43e3403942b5f8c7049bc5d67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444606 zcmeFZRajh6mNtw9mn0;(ySqb>;O-XO-L-H+fZ*;L+#$F_LU4C?D4=i(*T2%;Gt>Rd z#c=Uoemn=NICZwHwclm$-VmmwAc=;IhYSS;g(fW}rUC_pXb1%bdxQuNxdZh}OB4zU z6~{_cR7qM?ltjtd!Q9H$3<^prEGY#+O;sAZe=q67=g%l&!ZQ2vvHFEKWF&;P-zbD> zSSjE>dTXmWGM0Qd6xS5CwShKOe%Druc-^TiCa#T*qNQ|4g_L{fx9fA02{=vR_c(d9 zU;~e#LJdVT1d<@ALzATBFh?R?n@~{}vq--WfTGKV)ifM8j)3c&oO}nhH1KfB<%lUE z+Gfr;dNqFkVqHd1^&JiBJsNKmx$)j-K^Um2Q7l9-G>NNl*W`##VB)%n2KMJbsJDYE zW3hG7iPJl_^buhZ=b;2pP-#QPNbFEb@jwf#8g@e>N@!CZ!O;HDcEVb0{)FB@hCl%( zZVz}DF_4}O~^Ov0I^DahiNr9R9BFS(j79YMcf&Kcp&(p$1fbg!H7!Hc+ZBIPBc>qJV&8gjf zaMuo}NWhzKB(RQwS2Y#|;&~Mz7&$+4-##LRp@`)lKbkh^DnUINNOW8jb4sPmVhwyT z4JwXxak5)Mx#=d~m`1?zUis*OZ`H3xbdZE2g-R0gHt0K6KHq|p8#=@1?g#Ep$6Mg< zN$G|&$-Xm2;!WBg31_K}K_sLr&`29$48x8yu4~4d7(;1>WU<}0B0c%CLA>4)#*V5b zOGr08pMLn25L#?3b>n$_BR}u$*j&iWz3~p-Qnp(MUi3c~lywo0*BA_{3|eW4FYOC$ z3*lXvV7;6Izr(I?3P~6b|Lj=+9DQ(qXVZrVg~=brX>7OPL>p7}jk-38WlASfPKRrx z2S4m*W!>@5r^lEz?H=TBwJ-QPE*878+}~bMf7y~Ule6a>pmYuBn$zUiu}51u*zBPO zTs|;>CIBZ;hf$cs=Z`9Hvx!IgT zfL01%TfzMzjDZ8~!b9b~fhrJyfe2?rg8V1Ylm%_fi)tXa%;IZ{;X4`_N<*{-D7tR0 z8qAph-;KAHP@@|kco3L^&>dk{f^72f+u?i-p-{;XKYzAFB%J(w`400B@=rlJ`sSiTL59>b}_}Je`O^-V;vu2UZAbv`wl~g|LDP z4G&V^X2g6nG1L0kNNn@<<%(18>y26d&FVA+{k&B3W#%9Z;dZ4HJW(jNFI0F=u0q;0bMx zZw~ehSonNI;r{MHnj#)+FnmWkob0F6T>;q?)s+5}^pv^^_W`VST!msIHA0-~fX{`o zGcEw*4(^Wb4i}&#BK}M4mmaB1U_OhEQNwShV5(qx>BN z$5c*K*XZcz@aS4;6;yU;nba6G1xh?c&f~Tu%kXC7L5f+QKdNdfmzOfm@Xs`H;Eg5% zMP+~NPHRkBTNPVjSP>`g%W%p3kRd31BaW>BcIn>xgpLw-BR2~(%VRA&>t2?nahPY~ zO5Q4zC2#O~U0g`^RD-%KqcpV4qBN!CRMkQAbXsZJaYkw)wNSa#NmulDH%?Kck_5U5 z=l0ues_ki4jpSq9YnsZohgEf{vFTKPuOy3Ma=A>+G7GeN9+@ee{Omjz+ivM|>+_KRAg3$OCeM|g$qjI@Hcz)~9jX6y*^*YI zU84O%J8RL`CB3BykPS$>b3@4sE*Ed?#fm_eotYYBo35R@2>)okYuj75WIW3o%`#?3 z;IBK|tTU%(V{iy_$ag5og_?nw(aVL#Ro#alqlnw({&;t8V3%dVCBCW2z>&{Y`UgU{>z4P@s)HSpPxaR|{Tlr~cjfz?KCM3O-8I1( zLjQv9g+30n4m=P17>E&s8pQS$^!5I0*4I6_rf+XQ{}!DKSwWsfGYg#yxejjmHj2WJ zsel%PR*mRSV1!E=X_@|A0X3u9e(OmpLCVim^uu@Ls4v)8Bufl@%=b;wf21c9=%_zM z{ftP%cM(h`;{W8XcqE)@umWoKJ_nv}-Oj=7expTdKsv>QeJ_hiDZQNlq|{TGQvgzO z7saZ)S8*@CR7B5gH*&uDP)sYXYOlbV!Dj>NwOX2XE+WjS63F6wa-<{WWOY*nS!jGH z51-A!N^j(?j5!`(8}J)E->lfXbo|s(xMFdTeNcEX&Mv?{XLf1oWsz)leenqR*gmgK zs=ZvhW+7>&X@Rjz0VEip+$#bSZI_?d-C3CLkEU|ws~S?$yqCII0dwtKA@u~eiGQ~& zD`7PtBywB&1Ki5_6NB82Oot*kB9{vAOa?JLS2Qjr*J+OUY2c{c4iosGdn+932DL;0 z1=IKV9r}Gt{gxi*-bkP%Gwti+wAYxwGgH3KTgP5zV$yrGm)?pmDr}X-W;(v7y)AAf zDYX=MI4^v^9A6thPQOUc{A7FMayKqoKBd`E?XKV9 zhUSFkKRVj5W@96xE{h`DHYcyE*_GYW>G{-#HqEWe;KH!n7+0&@uB<|&yw*JEIh`(_ zL(fKUuXe9av`|q8=mp;B@aR<8UoE!!XPh*~+vPNZ8`sy~wdZ#Z)tA{)J6Zf1D{g!5 zp7qjum9n(D)F$ihUkcQewKldMn`xbyJDFUpYelcboWDBCs%w9`8O+5Y;zH~ln*X(AH@6}90 zfX!Z2sD76Z`Gv&Z=xs)mgM15R%V^8fqrzC$ya&n&`kIbsj$_wt;80L)C?7`obIt8` zz#nbrN9FGP#{Qo%r*1#n^abC2x?AbEq&>D;WPh?~7(dS8zJa@PZBKp7dnnx4HFTKF zDf74YGkXRN7zp||Tv1-RbzyZ9dDUH1&MkvHqEEj(FxkqDzl~wikk_ZSJu)$b2?->IYr>`ok9J#1&agyp zSvW2=u%T2ip$xu>iU#R~gmfN#H9m!!h^Owlk&Z$fzg^}moNb3h^x&fGA(%}5>W?dGZIcF4ki{dL1YpV z5&>sZb3PR@iGMYR{Pu~=($&?GkD1xS!-L6#oyo!3f|-?W-cbqR*tS#4)!E}`!zClaC7}cM)r50|Ni>tJk30<{%0h6mw$-` z5s>-sC(Nu&EX@DiH>9b+-@ANDR-R_IT4GjqX7($BGQPfk&sLUD~V!csYxwUWS9Rc?;s5(0Ooht&%y-sj zhfyxk440@^4qrJ8-YT@F@3-<92al8W;N!?`l zX2RjGX;H5nJyzHrZa*;&f9ZmzXtPrwv(7$vnb9V1M)Ln&xqqtHE&_^>ZE5bBW)UCn zLYB-L6J|xh&X~Oh^Of4Cn6QT1kDavM&*zlu@#9daB<;1E#+zBBdX@4ZQr7#zxb|5F zEq|AIZfsC){sftep~L?T+<#&#w-Pg#T>^jcGskVybI1ml<&)jUJghyo5Zws*YdmZq z3^d-;GBCUQcq)83SOPc~sCY8jlA!LYkx22X_R$If=S5|Ck%;^&m%=Vi*uqh5 zAN6p-`T+}V@9xK`r7i!`{Z7+vY1;qg2mYnb{CE47(I|v=zDs|eCGx$lGk$ci+nqj* z`$edbzfKk?q+3kO(`eM=j+bYh!X#%a+i`RsZ?i@Hhpg4){8tCQfe>MDH%rUvr!n(# zvx4Bhn@f^q%%1C+`AeN5AH0DEpNhrzub7aqADrd4@lZSOt)=Yy^zk{FA4wtGJ7-I< zZPye1%{sZ{RjRu1iPW!J>aowcEa~zP2v?P*IEL+|oK0b8`>Hf0kv18oDy$ zU*|FEiD8a=19K~H>MC!l<&WbyzDlkW*d?j!9BJwtsa`V5OTR8I1da*kGV)>9_X-*r zSe8Fot3J@8?M`w@>TJ(o-A`lPzqLD54u9Rk2f%H;vqV8hu=|0*)X+Fb+~i5fk5s+Z#%Raj`FUbgfy`QJMqO3Fd}nDh2DJ-PY*|8Do`Xnk^h9rii?%lE)Wj9jzC5nu?~*PrTRCg5 ziox?rcRI0%RG(ZYymkz%?3(eLUOG+z87vN2;V|dg+o1y*bBgUfBpEgN?K3i81vv;T z0~rt#hr>w5-7jVcgPm-ehzny{h9)eTrqWR_tofNc7I48cSyy9g5OiO)suI7#Bp@DF z9p-pYDaXP9Je8HQM)RO*(@0q8-!kNC4(n!9>8*bZ{K1WprR=dkXUlI*O#52d`QW}x zPvl501NQ$U56U`}R<3^#qNdz2RHBMtC^G~-nzF9kh zeT6QB0f??tJplc~^rW?lOT+O&70sDXKRK5omzqX)`7)qeRt_`FytVg-K8K!s(*~(z zITb^2;`AT~c;)0BVeEcc=9m%JP9z1R7iJeS&Ej$~dUzZ84mMQO;nWOwWNSC11ZOwq zk=sg+<;57?YfHQ?a8H~g?bz*)fA-gz4D29{==`%-KD4Tz*=a_$jElOytKZMCBwL=} zaOmwZR{wMkvMC?VGW)bl=YJjX3hN-j4McaqarhH|O%(KxklS=rhOTV!S6Mv>O2(I$OA#P`ZjwF&oSSU5+#&C0c2LvIz&YDtq& zxp>!>-a3aZ?r@;*(793v>zHCz`NXSrn$k}55J4V1g+D_Ceq~O#Box?=dT(__RcUbI zbwU(dZ>K4lc<0=JS;(9==&Bav(K1JG$1iws!SyeFqaAT7j|b!D;Hd;9U_0h8(~OMLSPUSV&L_!uA* z=!~~M-T1M|kKm4{mL#pIy{%!Zad$3?EvM<3#&BPXdj(eH;+F& zkTKtkT2wNZ5CRik9b~ofj}kx;s@04G#wh&

2{Bm3tr>PJ?JJnJZFtfFz6KUI)6> zWq)Z#s4WqnTWCbS&fz|Xyxwe_>C%^DsssANS0&-XlB5$~LasQD`zrAz1s6C1@zYWOz@fNmbX>$_Q!TOI{*a~SKjWo6BtDsxgzDZ*)7s8&9?z#w z*qRCPf`hcLLyPb-MQkCfU|3a&Ti!sDD!dN6jJMNHySJ3u)0&rZ3V4pVfjDk=shpL6 z+>d&auvp>4B7``_X8T_oD;gC^P(*!n36*zc2MZbd=V(LGS5agd3Y||lqzRk+7JRZ>dzR$Y z=7`Xi0GGUBV?1s$gFxjIkn3Itzl>JekVIUdty)X7m%88(hdpuLegWz$bu0*X!BW#d zi>odeuA3UE1018*?h;_^;W)kEv1_U2GbrkG?B=7ZGrN`O%AWj2y!(_PpGt)()9INVxRk zYx2Ic^ln4;I)^p!6Nv3~2$9NdhpXkN=%4+l-kGSY#XEEsRM%?_*0J)VA8`O|3tYtW z7=LT9QVZd;5~B@8RVj5xR+0DL9^#%w%^8+;@GNJQU5@z47vo1YiQAx%s;h;|WuOI6 z!o6rqH&6uQI}VVBMlRb_cevwl+pkcGhN4%3X3OXKsJdeASmR#j{veu8%;~QENU!0; z<#DotVKJ6@*SG$B-E`2j=5;7H9n}leH1TTyV(*x~O>`)On-jrRNpF3Fw#lc~$B$++ zPmk}$3&{bOqbaaWCt}oEL`^G7__*OSS*+7!FM8T~Sas@9H_F9- zeK2kD8A7b@D>i*hPJ3+$4+*2xO3Dx#zpwo{nNjB&G_5G~w2(-vYOmknb)`Fk=*q74|j=DwCzv z^?*#T%{^(}z~49hCs_aKtOujZOie9=IFlvzHv!t$p|2OR2N5bn>hR9?$cG8^*lvP0 zzRJr{6vYycQok!n65U?nAv2_wqdH{MG{CNt_sST+J`_0rgDDgW4nB|0+ZLxkDzS}! zm9K&*dFyQedC1SJFVvCMzQ;CQY>jKaVKO{sGJ#@m%kllZyfJm`D3{-Avt4+=KGK18N7-iVh#I;Gl`I`V(^i-dN!W8|9e90Ij zO3&KV*Q!P;7wx@Pi}P-IahCg%w#OP^&!xy4C%j- zq8Te)Lp9|!NUtjgpx;}r!?6$yULH(WFF15PRdLu{1m9KK>yitJ)))}|sT*>zjdL>}Np{6gA0hp9rk4QGd z%D%x z_1BUchL8gKeSG|LCvW5KW>bknNS#z;^8*b!4TxNOM={FteNm=Lch{_R0S>;W&U5$e z_vFk7xR2!Y16nM@&wpmsWdth(N*EM6b8MA}F1$0=Q(Ij21g(EhUJiQlD-pgf3PR8; zjElsLr5Z1}oW)HxC}WV}HC@?hLbnHG-Z8lKS~Ue% z^i`;L)a zX#Qt+*8E)ESdhL@meH}5c4=!BBxQ8aJ9XB|>8NdCdfx~{*6b|+DErk|lbzPvxq9T=o zek{X9+~X2`;)myCIz_s}Ih6F6Y4_M@wL8DQCpBbDjj>u{C)cESGwNNP+r3(nUX2uUE9ST~QMtwSp;0xCC52t)&Ik(_5hK+2Qp*Nfj5vPt5!p^;Qw ze%9J6R>`efjdr_FkErN{h=uK%DcQ ziQ8*uVTl44f=*b5j^p=^r5zo^&WvJ+{!pV+Lb3=;&4Bh2d=dwTH34*H2^10*ng_paSgpI^;=TE4*H5wfhY+vGt; zS9s%;0$r#^D1^I13OK}aM)B_%l9`Rl?@vO@V4lsXX-!K6L_MX^M3qvM3;uKbmFf{@ z48-<3r<4x9m3w=*$d^Am@=osuz6nEubA@h;inX~7ahmtVIh>h)J_WOxvK|nEymH{u+u z2>1+dPxMDd61p#Ths_SA3fT<1p$^u&y4*hR&sAoqY5e9c*)G1n_tNh0YN*iq`P*5m z-Sg+=;k=^PO`lPk9+`#nn7uIdH{Ng+@ex2_8Mr|0Fl~(`JLl@;Dh}3!2PTTxOQe2gq9WKZic2F*UU29nEw~M zY9}c<9OF97w!9^%cQ{|+&~X$g)?g~6V2}{I&tcv%OGM#OLXx6dyrp4zk*~98m3iE_ zj(=`%w`1(YPIk_+a2OwNmU?~Z$VDKKgy~5HeDnb5r+>BX#kLg zv|{GbnOI=}SZdF`|EE~q#mc+wSC7em>4tUgahr{sk3+QV>Ct?WRcB4z?Mbkq3EWnv* zf^3h+8_f*D{ald5-TUFz@AkisJNWH==sF%k#35vdL2PVT z7wo=S^^+7)%_goZnkwQY;uf$^zYg(qiG~gFKzvW*oQ1q{$780i%|IS}Kri*-*=x6+ zfkwz0pv#+tk)8}vRO(Q>)6e&(Gh?N3-n(MTj>$*< z<(6Za0|mxKmt3-MlHiK}-CHXoC2k9HS{u+v!eoUBOZxhu@D+PDF`^A-4aY_vkKfd+ z<>y+Z^+(N*EdJ@sIxN{kt1y`mjO}%Ted-B8duUDjCfr-rCjrn*#J-ntY8o0#QaB=+zb^(`!W1UZP$?i_ z#N2}<0vF`5djKi#(f_q-{|UsBaR;Nl4;~NhYNFN_2L86&Ebu-UheU7W!A2wL1!A5n zu7drPwlDSlXs$fyIBSSFRic6XG1e!w{HKgyCU3KjUBBT0(QuU}lEusUY6VrRXu+KEXOn=pdvUtQlki+Z)|3B@I8({i1=d>pbpa06BZJl1r8dhTYc03qJQWkej{ z&L=_`If_{Bz}^V#;V(9ol&}cssJ7wgIAjr6jPZBiz2N|8SQy^mkFhS8Sv472&h}e> zcp=W@5pf4VG^G!2ucqLk{I@No?=rarH>JuCpLyT!%fa!1z&Z=Oy{nxZ6dnqqZ0kL( zk|NUrG5FQEbzxEb^UCA+TKzS?B*%Z3Fcf3`m)r_OQu0843?~m>%QgBvJ@>;OsDqI3 za-Hz=qc6z1Q{l$&Sm&KCcp68 z-f(CTFc?occW!wFnhlJT2OS>1*(P&8UF)!VGeU3?+v$q5ku5qcAFKWmavB)yO(4W$~o)5$7oNk zk4r*k#yX!D`ixMA?uh1A*O%^naM+tp1?>5Xw^f$5;U8kR1Kx4MgdAGF<-nL#9wv#{ z8G2wu*bUyzM;$D0i(S5OP-{u%%y5RRenI7*Oq(NS(sXGjjbrgyOe$;))KD{Gqs?uCo{~Lg#Y<1x)5kVo+-qR8@^J^(_9DFW0Ck zY2i{U&CJ{sgQortVI8C(=?c7{G!((SC*na3{o$zgoVGLi-MK#z?{r;SnmYR z7f;^76uW+^bAYkf!1u`Qy^~~ZilCr@F~rs@59T z6s}Z%&j{qy5XB`XIy4LMS>ALmD9crPlX|tRqk>AQ-~>h4nHP8U9|I& z_Fd_A`UH=pu}dbWBV;DgYf8grvdU@e=~bq2qvKG8OZaY&3V|^8*T;FVD#$&*yJFgp zyd{KHjcWYSliKW@Wke*}C2+eDl-#Spf1G%m3PP=Dj;@p>8HKocy{g0V#{T~>@qX&q zUSI3};y;`efwypc4`3ZUQR}yMsM8NS35rA8F+%p_6Yzti#HT}@&sWvM*UJvXc!j)j zlIgVqb3*d|kD%XoTT3?84dVSo-W5+cBZ^G+`ss%<>D%V{5hHE05*f9fG3p2?9)wCo zcc9q73v;jpy!7tT=k1)5tMz*;uu+j7p$ORO8lTUw-T@(zqaW>>dOP4}LYnDEh~e;k zXNzHKc2-V)GK~%0nN=TPd_<#{CEJ@j&xl#dHdq}1RH+K@$RNF`v!)NvW=Vt8SUwK= znP!??mP9lSa>e%g6F!hCqd3QJ351S=M(js}#;zY9(zKQs0&pq(g)?f~|8SEMPAXbx zoF7$aJOxxyRyP9=KNb6(dy}DLr-TGoOFz|)7aGkPF9(O8z!ubwJC@>@=J8duB&nfm zb*<>t9e1ccWeYT%0RVt=n~Q_+#ac_ZAO5gyXtD1)LI(dpXACt4HOBw+)hYHze#0$; zNhLSYyHe!XJ;4FVj2Hc1p3K^g8*PlvG}0P*e6MCTG4UgYdvQaK1*T8hPP2=>%G-1^ zHv(KW&a?@31^2#9iA@!!lU@pFLSa`0B2r zY9DYRwVZh&bwyO(xsV!7{_hF~%)-lWNeD@IyWZd}hPK)h0VPna!fJaipqe4s4i0rY z;2e>zLBjfW$E39DRKL`J6QEsZK#a-M)r1p~m%4Bte3Dx8WGtYiS)s)QIfJD_ZKVBa%^QSkiKCAGRzY&t5USEzVOROGK$m?yi5UjL(N?Xp@UnbCk21#3-fjH*}q546_w=L1Jroa@}V%j&*w2IYEM z8tC|d+=}&LfhX|i?x?BT^X-nsG-hJ2{U403TSfSHsg0qDR204~JVKWfqAht0 zp+DOp2y_h$)#nk1R65|ZvHr^hMZu&(+4AEo*yu&3s5mA(JQjkmumEM7_WIFCw{Dg= z7UVm$zS7@3=BfUUeK_rXc(s!fCY6{H+%D+7qU;2$98>U1#}!D2&)u*XTGu-EErlB* z?F6MoRU%k8M=sWQJ9QvFZ6#G|lu?(t_1>mwgKG>AihPUDwkz!gZI|d z$jl;Q0WSt^xpUS{L&q3P2Qb~{2(Vp{pa4QGA9jNr6tkp+`I|4eeXuJ8E;9UOd%nFN z*b?NdhsKH*rlyPq-q~%-f+CH&+xb~uj@!uCgFHl~s>tDo(svhwB|;++uMBt_*tii; z#r(y;cpo<$bBq%6Xy^iVlYkvdD!2lkH9mX%>$G=k2pE#CZ-} zc)4k9(oSd^H0Ru1;(z(Bv<-}oJ6BxnN;qKBj+O>Rz)(g1|jJK>ab920Jd;CK4o=PjafBp zh?l!bxD*Z~GsxMnxoymx($yO7O+&|-Bn)py$62`9z&ShdKGl(o9152yEw8SdWTJ}- z!VV$$%x1SZI6SPgJ zNobg9^Z$hy#OG}^e=CT_cq2)bV5GmWNmvfl`9biq;4YuRt{8KQ7;oMsy?q-?8O`xz zsd!j@Sb8*bE)I6n9+s7#Cg7ep<}v&e7Vra0qGZ5itsHw;%3jBBSYtp^0o(&>W`peZ zUb!wVYmSb)rjLAytw6C_4p$M9qxuKO24NHmN0MkcPc=_QdupQs&IhS;9{Cr6Qu^i3 zYu<$~Ld1!FK@cCWIbPI*JV)DQ$|T2SRGTM}%%n>p>%OW-ceB{9$md3sr+=Aa;b(K1 z5T3o7_57wpqt$##$>jH-e~Vf&D(`?q4`N9i-9wS$GZ{B?y7}Fek{^7Q7q@rP@>}Qq z{JToqotvk?hrvy9jEit!Yb1W5JU3@g!%ijyL`#``#+RU3+3O`6=0&pvV)(^1MxPY>b?199Y{6xw1iyOd`sU8yv|z-I)co2#eMi6lT# z`_iE$I*x$FP7AgQH)L1zZ!)oa%Be#U*r=FWC)8EQTF|O<^Ru5Q!T%YY!*$Vn-cL-t zc=y?DqvfEiys9>i#eLOHbJ3}vuz_aYO5-rchMI6!o9|!HZ;!^n3;S&M#tagXY%SPe zLh3@rGvr-XDBOI$&($TXEM+H`^aKMBYm-ybi+JsGm)nQ$LeeP00ygn%WJeK_@==tB z+iSHXoDZ>`k^O@%dO%{8r$cW>LmPJ?@T zcVf5hTg?_Ok|nFu=hVxLd+dXzxpd=-_28l?rwZB@@PJ!ubu><2NxkbcjCN}m?ukjL ztwS_O=qdE_We0=J@VgWG^z?B8LmmzL5y4b+4b-;R_pvi|I*TIt>rVeGbq+%XIaz(ECX!Jgw!Gm#a{_n z+WFpsPQ2G2vI(&#bmo?Zt(Yoyx8x8a_tC}m5h5WeWm+|17fbZ}kA0KB#m2QehTs-U z>!UyL$UR&hn1p^jSZ-3>Z06*rhz3(q6>P2Wf_EaAyXr+_g|S5Av?S3~JC`!?`=j*? z<_sLtZG*tma^D>1}(0!YHVOC3K(e{d1iF_%2tzPYWdw%@#f5@ zz5TfA)qUE_C!ZSDK|zxKhJfzvsBvMMw$YKWy6?Noy5Bq81BV84!`7;E%eo*X1pkPX z_nB?-=n}PftJNwJZk2Jw(cC?{y)qFypjGNY2XidCEdLi9=K;?O&4v}PnIh-w{9i*< zioD7SkCPat8Oltd)-6Ui^1CS#>jyVuvBV0t%W+@7&NF!pE@SAEwh_KOB!3J!rS)&W z(!7Xb1(7aF+NedOwfco&mO=g_igPk~WW)Xx4@Uoc*44U|cgz3|Ur9ReFs|Z9O_91Cn zb%0AM`l=dZ&l3ZWRX166BLFgt_DXS)WwyF>ZqNGx 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%0A)osJBW#B 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�)Pfe_W?yOceY9u)w(|Vo6o@|uwAT-J0b-2o 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

wb% z>yU8c1GP0_-l9qEi|4AaNl>u|Nh&*A3<-DKsFju+Co9M)lr z_@h4y=<6!%z`tD{GMBq}{dWX-aGQJX$k|fISn1dbLb*r91P&oL5_8nL^84K>f!I1% z0l5+(z&@gKsx8SORm^b)QSVWpD$r1~Ifuk>RM;{z^m3>8pn zPP&ZI-KsI2Cq&qbXac9vVyw?y=pL%BE!m^5-lI~U!db&+TF7e+&uN)tfTSk#h$>FK z*&KH(*CNloo;Y=N@0pu@CG5VM_Pgu;Db{61v~*(ULKCut1R)+S0c$=7T%+l* z7VeNb#~ClavQP39?+vg%fgRZ=U}a~V5+}CwQmfHJ!ebEB#bHB`efeHwp-q}05?e$+ zYPY2|7aen6qfJ0`HBOXBmGq>{rbX8Xzaa@nukiD%;l58#yZC~_Qe6w)mm!ccF4Iby zw8BOCEe2n$uRw4SN-z$GCoHP2#lnX?X^#~V` z+cq~Sf`&kVDoGZ-g5RtD;nlO`%_lf`D^ZP7O%I~Lv|X6=q3Wds%3q?2b}0gdZLTsf zCkqZU-Rwx#f?u#%P>Ok^SGbLF5D#7yR@+`M_F7xHxFB6#KySLUq@wrEH%k_yo-^j# zM=$n-Q!+51kLJqvR88n;6<)s~Y|OschaN!L!>;l;;#Mq%8&*q(ujsOfmvtK^5W{IRKyh68*lT2#Z?;QTvozNKI zU~rz{h}QDdpWi!4Q@v%jP*LE?N%>*FUxjR|h+^T}>^v0;UccHXwiUhC&D-isy14E8 zxC_BYbu|>qZY3;?Sf7fu0?`JbjH32V?iVggp1;boe%j@ej{wiVF3_ys*HffQRR=uA z+tJpxk|TEx0i1tLQg+KX`v^x!FK>r|{EhRU?D$(Iw=zB#X;D z7UE_7rjNm7x|w)@LN*{lN`&&+O|J>~i@HcGM^+Z5z>fk6Wyde1^UshN(8v)~R8tR~ z!HUeHaGqKnniv;?H)x@rRb9&eP%aO$d^}Q!4Xy^@Df{rFAqt<|S$oG);joXZ`a z6d|S$k`=qxXWXkD zJm<(R4geu%pBg1?s=Pu1buWF22If@@ewp8NuS6e;DVut?`@q8w08^p4R__9=Y>bLPg~0HsA`96qMKE-gv=xfeLQ7dW!OFfykgX!p%i0Fr_i(35jT z@{~rVQ}wa^nY}bUcAmdS8fbt#2clMZX5UNW1d%pJxSj~;;(<; zXetb=JI6@k2XK-$#{`=0Mu9~^dU+BNhu|x$Yb$y4K6g96#6(tQ_NZ$KEPJ~Hzr5;; z@i8Yw00QB*H=(w-aXu8fam-##khoe_v&?#{Cgd)-1x%M4Bn^L=l!5C}&vQrE z?t8NtgUry1#Q$;1JqZ?V`RoN#h5XmNfx<=luJbzO$oDjy*GKW@F#Z%q)>ujj6a+vw z*~j~ZNaBJIzdlT85Q;&pnoYq#B9AD$*L7xEEnir8twY3k2K$t=NO;Hh42DI#+kmKd zHy8crV|Dck+(}h=rAzuHB^DfdCBz%HCp;@d52|Drok8L^nFY(c&{2eRsBsP=e#y!l zjz;j!iHtNkFBFIHe&b0kV6?KAkk3EAcdhF4VXnjzaangN{{JoFy6n!aLOTS%( z7Sc|MHA5WI56wv&zj%uhymQY$+ic>a)n>;glvK&s9Np;4t`KgmAPj$W#3gF8Zp&$y z!jBfun`h;g{}L3aa`DhW<>n-q4Ah8e1l=g*9{T-^1C_mx0H+3MgXrGL_Y@dwWS#`t zRy=KsZ);C)F(t!|o`^ho@_EvKUySryr5RHB<79a7JPB7ugCF22)*j(e*{8{O1QFl} zqwcRhUPJmzVrS@`C4SYoX(9lQDX&fX9L zu@DewVaU**KqBOn7w4ur6Nz9n6p5f9;Ta0Eua*8b8(dj}fEB!5&lcc8R>woAR~uf8 zz)$h}#ZG#%}vco+$bwoi29aze^|YKyB0b;7T&iS*p28GBK)HX))&R!M4#U3$vJ zb(ZRjeHX$xybIy*03nvFPXZC3wDm4n9rzqb2{041|ua0j^ctRsJ670 zgU9EW=(jZ=l}9O6$WJUD7`Qv2u&Tu*G-YMwWH`GiQ&n5|ysTIuG`I)YdXR+HuAD|= zE@I?SPuLmx_a~SKW)I||Su*+Z6e-y~{G|dP>AOG5Meu0I1)ssW7{;l$QW<@dF#x*h zl9a3JQQP|$HpSX9>A+3ZzH%x1#3B^oq*7G#J)A11>CCoR4Mel-_qq6J!^%FjbMjJT zRj~?6O7$S|?g};d(7{S49n!Gm=tjM^i}U#sKYGP*{epQScd-FHM|GbpeR>V5Tamo! z*e0OK$mY$Aq;U8FLv66f6;U)PrT23kHu3@!I!^Fjw91*&1>4*kROV)SZNDzUP9Z@1 zFMlhCP%M_-6Os8|=R7iT)h5MiFd+~!g0$Q39kBR3RAxkz;z~vdykH!~e8Jh%c^6;% zO`6BuN%NRJ%fyG#87qEmK*b0_DDiF8_r@(CawXIPnnsdNKl8U8Kl{1pf7nXp-_o07 zt~Z6qEQZefYi@NECd(FvJ{WfGbxW-_f?d;SzyF?mS4=H$Ar+BCR zV2ICmNwj_<{mRL4AE&YUt78RX4r9laT}~md5nU^0Mueck*aHzZtO;W5+;D0TLLi4+ zjQ)wBj>rxXwD#2!#*HNRA2E{Kt}5RYC1t>g*|=}FYBD`IZ$UdK4c`yZzHDoIHV@WFrM5!Rz^PcK6 zp+p49liuvbM{x>$FL;9t>FU4rh;fkcvZArDmmwE6S?%-LE0#Sm`_<{%dN|h>2P`a-u z0>5vs7h|rWe3q+M_#Q(RrBWwaoZ)CW_36a?qKWk;^Q*%jS45Add+mC@H$=qI=##vk z{>1{o0S8%$s`|^owfiWvV{n*tt+;C>K+9^Zvx4h6L#OHbKL{WG9OW|^2UaFYVdyctc>{FzUdv{ffjB$+zJ6>&F$_Xo4IzP|qHE;*Ld`XM4uxjFw@*Xms%^fNQ?b4CR=Q`)OT}kY3%>! z<{+OU85OUQEGcXeC(tKr%6ctzcyO9&-lI0Z1YGMtHK1fhO)8XDAv+IWI3#$DG&6-L zq!--I_#-3iI?_GRK{$cjJ%8W0!Er8#nL3Jtg{ntDV%eh%9U0)<} zquT%hrLcd9*E2>co4tiAjZEg}j~RSN9J*#Mx#O-Gajmb7LGH!wMtOoL{sS5ek3r17 zbwI^0p%K4-yw7*k8Pc{y!SCI5^6XD40UpuB!_sR_TZwjZ2w5Jom{6 zpKmPFoq}M$QxKEvekfE_v}EMoS4dbR9rFyf)*TUinZP*8W3mQ(WbW93n^vRRMyP&} zwDmhsZ2NaUJeAKmw#DeC1)Mz;TpvEIFz9%5HdTn37t`t?2BLkDd_~4sCGW0Vm|s%n zU-F%d6Xn|Tb1>(8=zyJ!TBh!TcZk;9#k$ZD(oz#*ehH4QZvLnVoNIzTTth;;_sMYp zTs#P07@4`TOFvA0p2uKWK&DQNfJH30_wDG!x67I!1lS&r1cQeMWsT}rCWIjz?74}O zpw9>m%e|Pdi8hE5W)S-F+$rw5@7ZP7K=Rfw2!|vVqWa`#_p2kla;ipl^_Na+VJbv1 zBRcoLsU(C>VWDC0PZS?&FU5R#_i{IE7KmfB()hxIc~mkZv`%Fr&bxLLj=RQE{7-d)X{ zpO=u485Z}{YUE9$L?rp}<%1AHXKXRSa$OyqrV1Q$hbU#B7>#hMV^`TP83$&O7=>?S zB}^aeqKx`n8{(E@nH+9wu!%dmw<;QqffIt?Mm6n;2Sy ze#DQ;Tx4tYHdYz~Z@!O`W_Tn1<#0b^Mj1K>k*)$xe1?2;XJB{nFm?X1<1?)Zq(Vzq zLq@j0^i_FRhys_bn=wC&$wB5{Rz0@-yQ;@B;*x{WKU$2%BUI=Chom-=gx@92^<*bc z7kbJqAAz@1=zDK*?V?3EV3Q8kKSV)MWRy-6`>69!;qd_ton?Pz9{vd#j6WtllIPix zkmyJrO@WnON^`utK5Vi7+)+FUbI+XlYS*Ao{9b#;Nr-%J zLg=Dq`pvMu6K!$8I@8X6ceF@Z)F4}(T^Z|S)GKS^%j$L>zTDg2Pbr*X0P|oemw@m!;Aw7HKh7}i-KV2SSPC%(ruvap znvUIjjVRC=Qbev!0V^>48dq;v5z7`)nH^&BB06X}>Bct(FLc-|g9t*8+2)P%i^CF` zQm~}!=VU8pO9C=KLvFo&P{eMtz>NmX&k`UBsvzQ%^yc zRBdw&UgcDe+Y`;<|g){$#u259-40E$;Ru!qNS&6Lc&a=-4~_%TR(H9w#iBvd=zZ^K^IOo zB2o{(Qlo2#X5>ebx1vgz3jlsNo@8H$Nc4cTHA+>BTiQjf#(IsPgE=X*hK{+Bi@Kx~20+{#g2kftbm~Hg&#f35C6(KN%@!MU>j(2~$9PyCCHX78ScG&JUe>>lc?Vf>Of?lheq> zo&^TuJ~_JsIf)A1*`0>Ud6-kUw{#lA`%yAOt=2d>`40Z@n69(L%hMqMrn^4W#r6r_ z2)qRjez8zbb2BZt$`Z3Q&z<*ZnZK6gB&D zTh*_;VeBUJ6h%A;afl5p)_1yf#onT@#skCAtD9eqFt&2n@)FV+!nNa)ry&ywE_UV6 zoyavO$60?nT$wyMxlJxB)n9Q^~4lw>o*+$V7af_C9 z?lJQ9uB9HI@4Z5JPpWd5d93nuw=1sh#1KN>o&VBYU9wb329|&QprI?DOU!zLuEXLd-l#ov5PC$cXoGu3G*yQZ z9I^*?TntQqIdDQXr|l(f1r^Q_|^M4Eoph8F#=>B+sihY$Q_Y6&ODN_dE{NZxAj zkS1{qjpVEn*Z#OTK_mBH*70t$+IfOa3uTEHwRFB#gcp23Pozt(uH~d=EOWex7Hx~N zw*#I&ky@VY*wixZ)wq?-|I?|v3(@u8h3MG+5~BN<_4iG)4pa6XzxVPX!E~P_y%oQB zz+j4J`cMofB$y6>7BAgoc(0sMcmcv-Ve9EW}o1@Qr!~Vd`YX^vJ+i%qYL)B`+7R zM2m#II40@*nm;`VP)NWJZ+;RyR`1`P%SRZ2gi$_$gjms$DFR?hQjdExX2hm*U17M+ zl6?sAZ$xin^;3Q=0vWDd@7%~C5Cy(xQ+WDKJks>EgZ3rYj>2Wow{={D4UVq@~6 zeqv)>zM}v~e+5*P6GdFeG9Ou1DjPh+#Y2p0BqOegA0U6^^1RgL7$>C4I)Y1@R1lFT z97A}s)vot3zUdrN^wbmk0Sp7DU>xW^d7KGmPzgnALZuPq$JvPBkpmSvd5ZEMy3gdq zxy0Par$=3Dcrn5iI+6QOY+vF-m{#;}RFN`*FUx#inS!3AG$IS4K!At)571TCg?o8$dvd z{QmrSGiwGq=(>h2qkG6HR!0WYtp^09#?qZIWOu5MvOex+U{Kg-zW0w-1P&mz+g`g{vsy$W| zOoDMWvM$L_WvA5zixy36{Ku6Ry6wZ@eVp62!q77>A_!Af1~HHE^0%|=T(AH9{Q0^- ztGuA|2w&NIBipH~Wd7xB+Cm&qhQg|~EB`VrePNabCW@vQTIW82eN+2G(wUaZsGYTJ zXOkGo6Gv-Dl(J=ze)U>jJ;I^xc5v7pZFZh+XG7Gv9Du5!nXS5*&}gJ(pldr3B<=_d z!tS=_4lSw2lL~BxW3Xd*!l@Zdjd&fJnXw&+4GFajikql(=;`>PNQ@FxOW{6f)K3`m zqJgc8CRdNN+s<6Fr}%U{BB8qvD=|I&t@K#REoUe8j551RvGOUe(z9X=`rV{WY29xe zYPQ?iv=*-y8Y!4Uxx>cYdSR5=laQd$(pkUKl%!-PZrDGuIBEmGusEX=t(a836Z9Tj z*-%@<5U9P#Y3h#+vlqh`%2Fb=?DHt>n4ZXrOuJm_9PaN8U!Z@DJur^E=RU)D;xv+$ z9$YdpfBJ>eS#+sC0b$1j0kvYcLNdhiFCBKR@G^IV1nRK?6%Hn++nDet)jwO0FC6^_ zY^eTCf9h``VaTiO6d%sm!--Q%fg92no^1F>je_SchvR99VYPV@rs!fFnAlp2;b!F0 zUt>yWbVko#WC)T4=Hb)GM|cx$Mz##Uf(Q{T97aa_>%DtSn<360l%puC%eB#^;~&jn zJ6!Ls+u7B1w)5%cS7c)NwlfR?B?&lG-0tve5HFuba-0ES(EubYgIS8!Zz8a0@vzaO zTsAxJk>RO-adxsQD8=GBmiL`*hvm)#8PH7VOlQf4TQV!`SBZVqS^963yjyNu-LuoU z=+p*SDckOz4C8MF^}fH=8y{WE3KX^d+}%!m*M9Juf&${}uz&&p;_C+SDmrF5-)`+Q zWmnUh+12|T1TVF3kdXgsG zNprXWAF9=&wgy9&^&YimxOY!;o)PgzDFYd0eyZw}=kUk7&~WI@^@-DFag9QY$Cai? zVL?HAam{Q{o$YFdVNY1q#-xHHEY$6kH?GOCbt~@{spEt4=69k__otK`%AeQ!Pt>6v ztm4nG(H-w1XB$`)ZQMUmSvp8C8!mPK5gFvAnuYJS-`oO_SM)y>_O;^2jz49OJze_R zWycr`g|NKx}Ol6gwRuqH*2s2P4$aK zWE2@p>SLk(H1M9Kx%o`@kySNPk!}mg`}gnt@9BnGk$ceKEWhrHBj@M8dV{_TTWg8i z{P;VBi*svCzOlg#_o z1}BR2xxB?UgVYpq3lZ5jxNooHS{`t!V8j<@W6?3Ok3BKLR z=2!n0Wb;4C++T|54$Jk6snyqddrheSJJ;lQO4{Fj|2vx8Kg0&Yt=M2B_`e`F{^s-l zpg{dpi~nyaP%e)XflA`JfL%ect0-f|mK8EHGe%ZC>7!2%wQ)q0rA<|?%&mWH82>+% zy@Pk157RZ=*ltcvlE$`e+qP}nw%XWiW7}?HG4s{?jGxNu`eG z^ncV9{&#ENeRTc?(1tGC(Ln;t?k~va3gtIZ@2U!`lIg}o#sSZfu&u&l+%J5`eLwFV zcIwF|rcOUS+5hXyb`<)Hm^zNIvaWA)bX|s~_21gMS+@F~Uv(>&RDy&8(xV!Sp@&^O zk*h~AFf=}$K^vLdk7I|C4fvM0`ml$U`iz7 zcQl9K22fY?|7}-tRTie=tL7KsagAj{;pTJWr`6i!*H6_A=HbDQewm6zQlsE7&LA}$ z99Oe@E6CN15YKdy`stn9}ul&scT#ENJVi(s(wF9|bol0QThn?sC~U~sM7_*Up|i!`>9&Z$jc|AIKMP>(hw}WxLnNpXRY2A*M>c=0 zUA})9@91bWJEiA9F{4%C;-v|urDiiBuXa$93;NPo3!cRM!()EJXl49ILs9w9xQ!P1 z?-zlU{9gd}|CiMuuF(rh+E*;pgU4mU+WIiUTLEcj$9QT@?n(aN-^j1Onrv2Og&AhjyByR(CT#3o3B%J} zY)e1+_o|972p7kZKYfC-gZY4S6D@se-6llbrE<{86h>1WMZK%~CFwpI7JFzEPI5Xe zC28LKy)qydsqtTgqqCt9!Md)nQkzjDB{h_Z@M;XV}=SR6m8JDqT zUsZqqP^qaYxA1Q7=8wo@JS5T-ir|w_EThM3S&{>ubrJ>Okj2h}yd)HOFXf$k7@=lV)PI@eNq_9TIz2!}w<+a{RN9tv(Z8 zn@CyTGBZu7MMD1`9LY>w)NXB)FUfO>nGpnYt?diCtJ_7kHswIDza5i1#P<)(`G66} z4^jfr>q`I%f}N7LIr8}zcZO&8k~FtQ)SC?!!H3+I^(eHSi<8!e*!42ddd>O)BGb9c zEjO2DLlJ0!UGY2jpRA+YR*p>!3qvTQ*(Am&E_Jo#Sd(olYMiL_GZ<#Z<%uajg?derIn;GmZ$ljtsdB;br$+Rjf+40K-KEnX zedz{w+1yBF@3GJPhI^{BKNdW zz`^QWx41BEnt^Ai6ejCa-o>f#aU-a7R&p4yGw<5_Z*EAMBnV~b8ywHRJ3W9S>%mze zE1=Mc^#^S(~0sB^MOxr0`|cS!+}(UPOkX%S~fx3?sia4E$vA zW3NJ5R&-cq4ta?UFRj09pCqIuM*?O04Y$z>BlFa8)nEih-s?p~HLF<>%@m2+NR2Sx zMee@CON5`GOFMsuS1%}MZ)5vW>`LcsBV2E&Ec1oizv1Kh4XZUmib$7=15){pjuuiR|?31oSOs}`Hvgh(7w={pCk9iOoDJn@qQ z!mADL{o0^YEZ#9K{pqeH^eqe()!a}6d`dsj2rx)YZ9f!fXcwuN7@2(y4kS$c`*^IS<0PmF5f0t@!VAY;!&doSNkmtfG#%6~PBd9|`9R0cza zCqc#f)&)A1(-+6;pmM^YYPQ(pflj0G%jWW8^LgKL!ij&jgB9|9zxVCDt`_gI%#5Dj z3t6fYNhvWm9t@mZc@Tr**H;c)6aZ6Zabe1LX|T)@O@;EJmJ^OkD-)<`k&A{v{K9EVFOdm2) z-Z!F(teqCmg`+cEpF1TL78nv4cvULS?npq0rWX~+6a)u!mFybiEpFaBzoWI9jAf%d zT%G*<*z@p3)+P7*#BxAhQRLSwi$v!$H}H@H;{nl!0T&xxKvaKn#y~=nB!%$UF=Z&g z$8Gb>0?Y7)g=_yH<-*(17kfnEtP>^&VDU%TKT~yCU?QA|K14U!m#2u{ zbH(7BJS>s5U)V+>7M>jMXGp2TVx7By5WI?O;ky0IeI@JkOzJPk$%R z0@#&!3WO0LKHRbwfhm~ke+;5@-x`7<<&LOImdaClXGiiK@AwoyQ`s1_VKA1rIGo-@ zJ!rE!(rATE=C~jU|BOZAnQkc=#*c!k{E7e$dh>*^^RSSifkq_iho-Q66EH49|29(uiYp&J^7A5U8d5T3gczB_TKi+WwL+50@2JC<#V{d zjjJvQrP1q6|4^YICBx&ZK!yf0(NU-myo#BIEw_|aOYnYQXu6-zeL?;GktA0|u1nwusloGh43P6(E#HZN z*7Kab7?tRIxitY`jsMe_fBuLDia^3D4?7pRpG*FxHHxrCiT8?&cB%$Tk`v&gG6NbMaQ?q?Vr4K3VXWNhLJ)p*Po)m zAH{RgiSgHUm@q%y;k2DXgueB~MAqy6Zdy^f!({6&$I*Xa`eMM)i|YMt!{F+=}_H4fU6KvRJRBiyr;69)JRD*EGE|c6*QnbuE1R$6~){e_i;I*)7N4XO&_&h-!598a~u$ll*%-I}UGY_YtUvi1F^NNsla%aiIHl(dX`iGRrHE{csS6TOeD{vIo@_HO?Dy7$;Do}5e z5m+ExBp!!o1GKU#Ah46pwH${;bQePBRgMA;*R~{~w0=kymK2X&vhFK}Cc9qBIVaa? zBx{?_?7(U@e-{gd57Fu4)}4G-HJ>l}Rt3Mv!B6d3GEks?rfvG(1hCfYOr=#PrKzJs zK7XfpXM9BS6`Nh~BN&XdbW)!i4s*m|Mx<6?U5I2C5ZlZP`yRUt?k8(N zS@2XhW;jyjH1E;OS+%k6)o+wgFTTdMRy{#3O?ZNa*Ar zeI5dgy;7l9T&?+Lf#c*7;nr0qrY^*2kdQ$tut8)psee6uI9(4DnU0qmEKERiL5ed( zcLzU+Df*AZ;k0O-3%o!88iBRXRg07YZYuS3H_GtZG;-5uw27D_0l%jaU?C|fcK)2B z;G!n;W`y)OS835xEs%~cHBBQiKi6qm$H|c4{?#>6pJ;1f(?v1Oe*l{1*HH`evKeW> z-E#}>7>(ql|EY~qky(k4l6xe-j}2MDyVh%0;oB#7VxLg{v4Euz5ee&=5idSg&IbNt zG82|35f?@QIqZQbUk5FUuVbV=zS<8Lwqaw|Z$N?4?^{8PrO~{!q(FsVWntFn!H-YomXw;Pi#` z8KYJ@m~C;|&#7iEmZM7i&4IF%r6qsT2GNIyWc8o&-V%X0jf*uBKYY&>K^RzNx4 zQ|0<`^Ze+QPgmWI@g&0Hq~FypYRwh7ld!P8Jd!sI;3q1a-o6LtO{Vnw;1ZP4z-bITBg2@JYirg<1U~I!#@EjQnMFX3%KJLpb}4ZXejOVs#v zmw|tzhJinX`(0`4`NE0P%RrlFj{nEX^NuvSJSF&o5fNk2CGIT}CCjU;CjtK!t#%JM zfv;LnO#7|yBC8vQ@B_LRHt-jRwCjhNRuHUQnI#ooVZs(J5-|rYi3hG;)5TGu^ka?N zw6#lvBP$$`eGKS*kP3y8ql^BskwW{eIww-bVVj3;3@_4Ntk=J{=HW=T1MfLm-W)7? z|6ob7)PH!W>gBgf{2<*$S(P0E^!7@fY-lYl_2Z9&Xd*Q3>rwPXr%QSIBY1=xxd)7- z-G)&}*MoSZ&AlSC;$-r=+UA;sG~J5hAq7@f>k=jpE)08y1s zu9Dn`p7MH^&4>!Yw->hNq_q-LDi122QN8HNPly@}>&<9c-Rm*l2Tc--?ncom&fABs za;~cPaZS+Ah@if?$}dA|0sA1&bphM1Ate^n7yLyPO5%dBKz3uOyv*|aGOc}3@OK{5 zw6VC`EdJQdI3U?LhVHQwopYga`E~1C*+`v0vEasamimxPWro z*|888*mr!ITFk=KuuLbl-hK;76$Fa^=m7VTwzwlBbOY~BV%f|sOs3AL=~?ECU=2+u zc^YG=kynwxjd>>UmOeKw_hYBr52fXY4wQoPKLHPOQjZtx*8_M zV*m$jlX`IsVYNTx9OwgHhBTI*FuK}wDKa)hyHO8HmJVDJHyYob-z=ECp?BAS0iMS2 z+<7XvWjRU&NXa7Sj>2{e;wfJn6x}=tx}OVy0{Hn4K3V#a>_Oqfua646yR!4(;dxDL z!~G{65epCFE|y3(Mi-ODzG9_PA&qIXv#a?+o@eQ>CPu0e8{sxVsd80Z87V2Dpm+TR z1C->^aMe%1==tX9h*{dUZ-^SmyV|%SH`ZA3U*xq#P})|)qK$c5IVLWw9ZvcxO`7GS zTuqD9j6?PlmaG;QuLG(VV`NWIxF@_yFu+XR(mx5SNpsNWw=j)}tFx0W?=3!IEA&iC zPk7g6gt(c`^2i0${^+VJ>tO;qY?6nUtFRzfsbvLB6>ykPq|e5V+ZvbCQqX?0WMn^0 zhy8=UJSb{_q5OL@m&F=~zpy1a!SXjUV=l5s`1i7Lxay+cnSaaGma6F1R$qwc@sF~^ zygUa@dqo#c$E`pjTsG^^liV@3S9zvJ7iA8+M;e=K;=fCM2u$6rBEs+UXwgVEy6zlI z*>)j1I;qS&nkDQvkSxXTJp3PV&=_M4wA}fKz4ta0xZP;6$k~-eFL^rI&Fl{!GPGDQ z?UYew9b{v)XWsUc4&8sg-xcsUH$=Juwd9OnDt$N5~YA*C->l-NNp_`&)u28e9lH7omsSE+}^ zI24Ro>+U?NZX|kl}rG5SF z(pP)xcWbjcvXn6S)Dfq4p@SB_b}P(`VB^S!?Sy=WV*(2rm*{?~Y3PNiS7}ovU8KVSBiQxB z%q`}ukT5XkshOXGH6j=!-bbv+jpvD=;L?Cow+)gdG$(V(`V^>{Cf$+o^!0yHDZs(ky{OdA+fTXP%G+q|8G8s z^gPacIAPock#9AaoLM_ZFxZ*>o- z%6<^RfnG1C^xr0nJ#itV`P1-}Uo?NuSAr9W$JY=xPvdLeuZ}Ex0-oyzH*|$Uu`mzh zUV;>Y>2AWiIP4~5!?$OKj!ZHf3}PP}B*FlCTa>v5&}U|N0Jq2B7(T9(MdriSUa z)Sm^zhYq&j;djHI{l-krGeI84cs)!wgZm{ZGd`h4bKv(8!{#^5qP3n-PeJ(Bqr){z z@kDr4Wtk->2-Dpktkg0iGFj>*d&J!D-ExR+X@czf-cI1vdsomWs7U}#fjWxkDdJR7 zLq_##e;{7}xlZ&VfN&RZp0^QQQuilp#Jswxo4m0d_B1z++%JN^&m#=Y^X051DJv@mbSNo_N9sKY3;r~^UcbxR^Qa^(F(c#0 zAccaiP-p}=&vt=d+PP#0C1z0R-VRm2+*cfLF0ES6{#wJN%#0YYoU9+yFm(qudwxJMJhn>-~30ON(R0thp8OmOHTN9Hi+dQ&H}(c~~Y%_CDIYodA{)~MQN zv+q_gxh97lulQ&DAt;Rpw>G%WGf8|9VpF$GTF$j@yWg04#uC8626hG8A|*esBcX?_ zOGkJK2m|oc(VtpEZY=7~-9swf?TBQIiC*v*!0ZWq&~x!-(DJc3h=se%TU+%AV=L4s zOc0aU&#mHvbI+J22s2jnfSS9}@lgg{kxp%}x6P?ZVxP-&K6gv#aq~iuEQxA818uea z61L-q%CQK-)%o%b_0XJWv$s}ZtlD&pu((%$hQ+(}*evd4$KS#CXD*Durt;>xRovsF zJe+?C$$RnDQPU~SULc8E2nlW8q^T5L5F52C68aWJC`%gN2i`t8f}Tf0GHHWohRgKb zPJKyC$r3z+Yhaq@#@h8LF}_joFdF`wWt0o};9U3`->Ns+G(Le7Fy#efRZ~R+`}sWDP8gd;>y~v^1p$i5k&$ zXj=**U$R;feoc4z7$j1)&DV%Ox@q59>8x)~9L5xDY+S*iH3BYv=*ntOjC^Qp{SerU zNNw_}2o-jGfJVfAZ52X3V~y;qwu=jED<~4=l5#gF8jRHP?jBST_jWl4b2sN=l^&qwih4pyF7Uf7&r9_ zCctRA?YJxA;$(9$EIxU3ONC7{BPg}_zp2qGMyb`&aBJgkRu6#QMbdpGFhpiQD4eG2-W|5 z0NQSvlM}2a*kYBwh)T^^JRUisPuhJ8XJi=gZcx#|@Y5XtI0*Zp5~ohG3*4m zxb=e$Q@#$uYNETpY%1GQn&h!tt4FWdaC$J0z~I+|4aVDQY)=M%x9+!T)s}0cld*+* zQ~5989kqeFi?Mp9+0Q)TXo8d9omxFi0pKe{#>?VkzkVZfQ(oBcP%a`f^C6q#<%pV3 zTsXf7*%TKpq@5`)CzH4!0#G_+nLK|)y*)bq$zxo0%`q1sZ939WC95zc3l!_hN*6tKu-ZT z(PDN%eFnXQtlf}mVagBnje?fr7zTQ3C_JhQ(Kt$tfgiET8$b0To1`S<)!#Ky;mar7 zndKjVUpgly#&(}IogciVkL&EC&YgZ&njqfSEr0bjqaE|*p3!c}7d{VXKNU1E3!a<_ zxRqaHihRJ?<^L6S=bW{?6Dx$m z7tEiNh1*smpd0SAdw{$5Ij3`n)KJ%DM071j%z=Im=VIfU`y7{tLbXgRfY$feoOP?I z>~eSbfa%c4-_md-b1d7={m_R&e8V#=i0)!Ubol34CTEHphMC!(WffhE1BqcGW^5-M ziKCbfak=V3>B%8$=Zz@+dm4w>HKwQU0%dU?p10!L&}LpAL230K`Si>76L90omV_?g zZ}+qG4-M6-jZzyanV2NRj{Eq=<{qX-K&G=9x{nRX1x2Hjh{68wWw)}Rs+mMEh^Tz8^R?31Tb?>Qn7TtTsYz?&CZ z-IW3)<)dy{o&lyAP}zp*wj~NVN3fWQNz3>J71wsZmpORAof(q&w-?P$hOH!{aRc#S zEW`3BUAhOoq_J=q-vSGCKsTr3mdYJS#4I6WPtHdN%+w>q=~8TkAY=dX^^WcsRJ&T_W~^uN zXdbRHtS$I!QucDWER`fH&-HN<%oI35^~n>OFVD{7*^D%{deXRPS`FGalcJ3XE;i#A zw)N;}N5t|xqq4V-E3fn|1dY}t@Dxqmov^^9Z>(@y&zcR0er#iK3u~-wX{OIx%bM&= zGOHI0nwos5uv(|}8YQ@?w^Eus25n@u$LSH>s(tMYCMV#gRYsB$G2d~9*x(<`;sgNh z_epJkDw`kqc`=UmtDLZ#yW5CF(V3`cyN&?$i9!h*oQHS9=np;epybk6)0}c5)FANi zOi7kTb|ykE<0|8FzH+X4!+>D+Gw5Wf>u+{hC9GmPeCaLS;lTKZ9}Es)GQ~m_qNEr+ z)X&<)XhCJlr2A$|Bty1c0^eeNHx=y31k165CZ=yvN}S}$-hBhuc<#Z}>^zjS69{7i z=hBo)y_r{Fwh35zXeO(f?5<;+UL;JinZZf$%iixKBlN$Ja$eqkSN8Pnq85<$Y0wQs1lw zQnSU&a1hs6001*uA$-Lo7E7PjoE8Ov`0D*(N=#9~HQtu?{IqO~8*g@!E&ivwDcS$b zA3+gF!l|epeZl{Mvf=HQBQ|{Kj4}MWUs&rT{;v>6BRg%VKVFqY!vPy0N71Mzw84V1 zJrlNBboH1Gm&AS(E=Ke*_(SP?4%aDFiQd9~)}G8$2Mc+`$o*{%9&+?-QRUI7Z#{kd zoQ$$Kf%wGGi|E8~-{S`jc5nMbpVU@xXnaaiQW8%19fj>uKCNGIN=(vkGMM z#Nu4c^5?mDB=Rc`!HDxPk^bUM$FXOjZZ8GnR4=kM6u-7Av5*zw1jHIAO2RQq4t)K< zd7BYs`sadbw)aDC@d2iHO*=6qS%O%zo0}OnL#^(alcA6TeTUghVrMGjrXzN6nY_`l zlMN?LW2c47VeTFMSuHl=fY0}>RdO|d@qvXbM_{yVK?<|2x{hi})UCtss0SRCu9aOv z_iw)8aSrrC?@L+$Y!VB4_s^Vk6`%lZLRrF;D|{KwOn7^a`_OJ2HX$hU>rTdi{0A6( zj{@P=0r#D9g5qNZYDE>GAf)W0@G~{Eg(l8d-XvzW?>;Nz+OVU!n5E zd4=wROy$|%Sgg?Txcz4i^EWJT@vnMWlwiA{V`bte3spspvf*S=fpvMhiH(**fG>}9 z6k^GW)e@eom%p41iJ?+hmWE(!z8oOMV1M0e&*lI(82Gw4){1;`DXmifIOd?(V`B>r z&GB$ShGIO9kVW+yAF75wntktD$m4E?=fex}LKrgH(UIiuNajnzIw$&vX^wnbI{%?D zxfG_m zeS;NPpnME5$Td65U@#EoXGxT}w_zLG!XYGL3p)mOS(Snvt%Qr69C-M^3e3aAc3!|Q zvcd@zaqhMu%+{t0hs!Z{tb#vYx9ZnFAI0;Tl%Ggo=Xw9mWPRlBU^LIW%YMYo-W@J? z_gppa*QSliiJ?4iu%c|!^#^Wb(RlS%?tX0flb|uyBZ3c;5*vPR!M@9tW@@nTsU?ck zghXthb;JIkIW(IYUX^N0S4l+{TU9rSJ2H*@F)|YoIF&5p zFwkfaxPV+xic|mFI-o+zb3+~?Z9f2}`gM3bP4yUU#~l*;do+yDDCJqfc02mX(qHx| z_FR9*1S*B!O-=N26B%Ci=j;jL3D5Qw2>H^D%x-HKL#8m!8_`enI-~9T_qIBbuM^0b zkDz8^R(qOP`=w>k59^*(T%ptT4S4+sZ&amqdDfNoNhi1>G8K;8I-Qc`Rz* zcHRPZ{aF(A0-L7xI3rv1O`PyNHGw7Z;>BWypVfI+Lv^WgD8a=)6`9Kp{;^mT1O0iP zy3LR_(b3yuMb_G;GKQ~YHy|t|-i5o*^bWAsi+WTUMNRqe%OKo`w9YiK zC9Rc5)a=)kqr3B6=HdG(t{s2#6nc0BZB-+ZmiCnk-SO`2>)SEEOA`FQBwN`#f8$iV zaw|j?^Okii+lwJX!;j2k*#3;$jrYd2U+3)qRm|87DyHa8Ldy5&-z+oS!Qy%iRW(VB zP5{F~E}Z+U7_6QpYFoT-33HxQTxjv~ETIL6i@T+9-b7wbGil!g!UVvFw=Wj9CyAiK zZ4kwpYbCLXj0eR;e<}8zCGxjgV7xo7auUl7B6EWc)SoBDc9_!-vRQP;@VI!*Zoyag$P zG*`5m3!2)eTQyS>R4c{toKZ_|%~y386owC(kr;_-@Y?PLH(7wa(2V2ZjB`f^n1Wi&*TpcNecAj+B|Gx(vt=c zAXD3f1bMxI*jIHPFIb?NLG?&%+9LLD$K8g%<+iU?*QttZrjV#7yfN57;CAtoN@w{e z4_Uo9!3Q5k9svZ4beOt@pnG#?s)ekK;*~cP)->~9zf$>sB&$6gX7fy;X6$L|^~t6g zPv+-7Vmy64@qLiyWnr{c6L#5V_p~P>zrSv!nH@F~s7-KAFK?@wmLjv3-1h@VW6X{y zyTGU`P7tCcGCr%PYn6CfW2BZiQeneKlc;I1@dKkj6PQpM)5etuO8Px=;dODUJ|kw{ zB$hhoJ}wb)m=H7$sPw)vwropfIoCV#Pd`891z(5AC1{5cH3YJM-p6ehs>fG-RzY=} zlopDfK(D}B(05L-AK0tebSPx`u41GJShMpVdB>#(TmHREJPVZ7jH!i*PI<;uw*0(*GM7Ynt zaKh_4v&;Iajg@QT;hQXvs0UI>(=ClqnZ932nn@1S2KQn1yCGT8`Mw`fSU#TIG3h1N zwoeR+mUYy<79jF^ynL#43LfSgNgj(az^*D6U_v?4X&kA^BAeUgOjFd47fcXped8b+ zBl6x{7Z-@@b4%U17wCri(=F0QY1Bd{f?I>w_IgPu%ISk}{zQ=^jL#%VglEstYqD&Y zO|5kEK?*)h0u5FqfW~MaFWswHoUCaYWg^roX`0RJ)Kd3lqA5g?h^VehYQ%4Bdjg{T-fZ$G=gT%v24jrI z4?nmXxcrWC?vbPxErV3?`Fvw2!iezoZwpj;-F_8?LA9MnWz@mms979 z?-PnI4w>MK+eebrU4+5->+(HX?Xj~G9P915XS%86-A`Hkv4!nYfj}fQ!zYqaga|;+ zWy;)^?~qwg@&37LROF#Rwr5%vnL@Bw=}hWhs=h0+txp?1_S_r9W2lziNa7n;H1+;_ zh(fkLCj6;>lG314oLu=Xnq}Yw^i;jLd5MpiLBPw38#_$77Q)O5)U06ft=c4FbVs4! z`l+k6SPeuCD!GoeNTFMwIqovPzyyP=_{Ek`@0L3=g2X-fPvENn#Qr9eCw?+K20QII ze7Ua(=w@$0w1#_0P>A;wrRxoc4_fw+h?evyk?taZnp_q-{i8WrEw-dcoCZWC_df1= z&;0I#I|w!IL0ala(l+I)JJHBP0&>x%5wt&!>Bkulj9>BZm5H4Lvi{^ zS$3CBE>({mbDzjr)P0O6OMTPiP;^z}_bNwhQh3lDcsN+Whs})Z+2N7!jHTlHKfNwU zQ!V(9XiD%OO*PHMU(po(e_J=WD>706TJ--v5txznQYL7OliVk?w}&$jRoZA##FK`o zj2k52;uQwd$Z!rY&Av)8Y2iC0q!nVt2qB(AW1>>?#9RiYm6LTs)%l@9-G;%?zxjln zTB8z;HS_+=E6m(~YBLqA-efo`@<{%}w##~7A7jSSZ1}S6E?Lt-c*J{4 z#e2J&x>i|p`STj)=kF17V!gc`=+5vqhmTKYQAM`{SWJ$u6_V%k1P~CoOfO9eGtZ?G zKi5adm{zMRX@@`F7uP-0*iw9UyqJ-e2YdPIk3p^O$U26`uAwsyzSljP?#g#${*RL) zAXk=NqAT$tEecMx)@|lpTyo91bC z>S{7CZ|J7t&@n;yWOcMjrpMseIvJFEgNkDRR&NMvkRID$4>Y%`!3B>{Yl0Bi3Q@s729v+(slpXH5=_ha+3q|D$T%BHZbr^Hj=zlIUuNj;^;YOV)L=^kb z4l?q)Mr>HTbRFqyA|7~wx^3QP3A-SE4=eakN_q zrJ}Pm^R0cF)dK$cIUUKI8ie*Z@YFOtPHfPrQ? zyhI_EaRlI%h`Y=9+uhT?jdP1C{ec9OdZ=60^bcV^#N|=~(MG9yV+Pu%zd2rIid3(?xIqSNXjG_Lc8H`kIUY@up6*f|HS2&m}CYTR51>U%P*R_$up zYz3?fhcsL$wfpa^?OI3Ip?uKEZGu41;Tl((KiUt$g=hD~rtWEtQ1tL!QO4TiB{;fm z@*-W61)Q0hmT{$Y_I-0#Ys`F`EPh<+cag<=%afJKj5s_fE$AfjhP?yDx~?rO2P z?@3yLXE!<3(O;%z)It3es722gCnAJI#I5V+)I(yZ%{5PAxgbN(@c8|Ak!hh?AD<16 zUnssDqhk7hOfBP6?Eg)XS$#`vICx?|ScO1tc=4RHs0NcI>uM)P$!H6dyCji8&>(6I@mf^ssLgm@gc zBz+wTY1|U;-5R+00}^KH?p77jT+ZiRh>Wdto(Tuh;Z=T&QJ*da0IS+9h)9}}sD+>6 z)gCW=a@lVLX`Ba`h6sgP<7}osJ5$U~=J6ycq@uR%hE0gC($$}na1d!&zlA2t&U;?( zcU(0a`4{jd(c!a=0{)2A?Dj}ZFn#4tfr^Xx0$}AQ3Kq{5n*L;8%Cs(O!i@u99PSc4 zSBv~qC|n6@$|+jT(gKqXSHwvSFY%ujk9&$d1E93^H!yOPzwOGd%&MAe8xnogy97A2 z^cFgT^x>$G@yLJoq~eP1^68q-x0X*vp~NzOShm41i6y}iqu6TkK~m`!YE4Z4L@!U~ z0>EtN+pZEfcCnj6i5#^Ld1vX{LB(inw_vvs6^7}MxDqn^3_zPUHFj6%{$?$(U+dC!owAy`zrBJ60D}VamS`OGMjR&(UOY>WY`j!;l^ti>cAA0M+nj~i zo4!g|2+EKhId!WcqM`G(PTAtloRAX!`^5z9M)f9jc{B%@; zH1}*DnGtA$J1c>Xut;YnO-`buZE+3o4*x^J(K{sS(97BuM@C=N78}y@7pU7^J2GJM z2#EH%I3zB|og_+}WeyPSY(Eb*9J=V?%5!F{{K3h7dDDSL8>pHX#UbX(g#}?63LE8{ zLU-)ZjG!hcKeiJcp~}&*Ud86vZDTDOkQ$a&b)7bCctYY` zoaMJDPG*k*o5Me~&1?~sO0xMP-irf9)(SleGYGD3m<-Tq(_^o-M{@bMNaNRwu10H3VGLXf zN^=-{zEq+nEt=R8IU%dtQVB}ziu03FG3W=;u!LI=LP$UyndH+_he}tnIa-RFR=KH& z{a)WK$Fo74xeuDX$I^j>TR=h7iS2*2$5*R*=ld*M7Z#*8Vl%D}+Rw6u_s=pyZ5rY(jQ#p}Xn`C+9pY8o^!R(I>x2+pg`{1ia|BTEhj-j|K z)xY+=8yUl3x%a!)i#yF60op=J^b4-1DLfB{c|)rv3YoNKfh@P)jaDnDe+8OX3q89} zA2}g(+g2wFZ0W4muXqqh8nkQvEkRF@Z*FHl)24`QpH{(nU)OXB>~SrO`dnH_!YXYB ziDf``yC7RlJ?RtN^P%*Q^Wf*7KPBb4>C8a`gOnFnT+qk3Y6*$hTz)kjMSPNIsp5it=EfcC_qevO(Gc>*jdd+$w}&kz;preaZ#^@2 zHAO&ZMjad$OG*01F-ATCWQV{A&Q&irSFH0dgx+Zia7LE#jc~P|OJR3f?s` z=yqh|`L1C**OyYxoh{MLICpC)lD`rijdG^(_9-eD?x;OsH-cpqr^7;z5WS9qEFEP=Z z-ti(VK*K~(-rl6qjtx~LZnBc)jw9}U50v$@1#%Z#hJLlKEJ7e9M*mxSww6d7ixF4( zJz>T+l*vg?_4M842y|zD;Ne&kxDmxU`|7vi*L41n1OmWJ9u_z*Po1r6-tI;_wvA&b zjo9tb7^^!-P|~Q(B^)_6(ywVfNf%RIjmc0J5zb$MD!D#6mAa^4MS0@AjK63uCz=y3 zuP8Q?o66x;Rp-TS?)5G!+~expetxE

%qqWuQ2JpqmYWjzMxETv9lznfsZ+BqpsR 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

*p4A*G(3H-F8G8l(Ku<6tKuY+FYZ_ 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 diff --git a/Loop/Documentation/FoodFinder/FoodFinder_README.md b/Documentation/FoodFinder/FoodFinder_README.md similarity index 100% rename from Loop/Documentation/FoodFinder/FoodFinder_README.md rename to Documentation/FoodFinder/FoodFinder_README.md diff --git a/Documentation/Screenshots/Phone Bolus.png b/Documentation/Screenshots/Phone Bolus.png deleted file mode 100644 index 6a3d49af7f4ab87c0b3d5d7626d89d9d0f6481d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129031 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,-7FaVB^;T1zyg7)dPI#@=fIfTk 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

VexEkj%61+Y(fi9X0Uj<~n@rHdljc?l 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

N|5ZT!*dMQQHc602TWnPWyLmR8lI^gSvuU% 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 z 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

xThmh>wC_6Co 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�oQDS30+ymVntSG2!_q*~gnj4=v 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 z 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ƴ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

iy`(ozy#l)V3z7|gIhrLD}?5(a;l~$ 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 z

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

IZH*tt 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 z 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 aJ8Cn_RH55XLAcdHEG%Z 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

a<;=H!X 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�~zkOn8HN|e5r)ri#II<$oug1CyZa}(iFR4Op29{Pw`EgK8GhdN% z(yV$noU&LINngqQF#h#Z`f$@?hn*fh6ID+!T1T}N_1^ssYNHEj$m67O+7C)yRG;?< z{VnrcFgFc8mVcKa&s(aGk-mhV=~wF7WM7dHF}?*7@r~A2Od@PyT4Z*n7!(n%KFy_c z&i3jmQ|!WsQD)Cv?(Ir^hl>9+nEU*>PhiRhF{I|1Dm(Je{?aY zod{+egA3k{7N@36C&YG{{4U4&`o@&ds}+Hs^TXmjrmYv!GhOMzYuBl8^YRttXghb* zLBVtPyemIsU(@r49@YY9i<1~umm<>Tm-j|XKx#f9@BjO(7#SWq!!AQ$m-jEO8t`&~ ze%6NlHK!BNk5tzef_^cl%TkN)i2L+V3{8Bf10y2VSBXUk>Otjrj@f4}<3gcF_LS;N z!FH8wkaKYJb!Zoto31o@brgxv z%Y-#au$TP#tJuD332v6#wC$UEr%eYu6+!C<_tq$PD6}?#Y~e+rgmP^BLIa|^LW+y6 z=&V}DMfv(NE#LYLBVYSG_2IN#(5Ww3WD--!nKF4tW#xRya6b#dR{8DyVD^&q`n)gA zTl5OaA)oVp&467JRk<(Ra$*tg`$p<~_UwLEJ^T0FmVYgB2fysc%Gb@B&wa39YcpMC z

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℧Au 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

^^I;G*;;tjvS~UQlwL4rThE1iYwO;f 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 UYPomDFn}LLIaS#*Y15$p1BE0&zW@LL diff --git a/Documentation/Screenshots/Watch Bolus.png b/Documentation/Screenshots/Watch Bolus.png deleted file mode 100755 index f0d203babdfa7053a3dfc3bb495af43a90d01885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13727 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 diff --git a/Documentation/Screenshots/Watch Carb Entry.png b/Documentation/Screenshots/Watch Carb Entry.png deleted file mode 100755 index 18d625d7acf7f6b2da341bbea9a844a5e8add857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26598 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 BX0ZSO diff --git a/Documentation/Screenshots/Watch Complication.png b/Documentation/Screenshots/Watch Complication.png deleted file mode 100755 index c7e6e27d598079e6a7faeb6de8d7aac55989d4e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22748 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 z 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�unpIT!}H z_)2FkHDoRg4~A3oZnez%%|Tz&+V^%r3SAP<1SYMu0f>yt%4jZ#)*@-78uw&`tG0r( zPs+F<#1&P7`(pdZ!R!TuFGoiw-RAhaXK)_SLlfEFo2kXf0;w z%(Tgup`ab5aKpM`!9CQ7HAq$ID-+QEv1odO@bj{+RyHQ#cs&7tT7pr4F>%FS|7e`& zOtC+svW zjsWDPx-B7xWC+fBK-8)*;r!SfJq3s-KlD^_ z_Fplkup%)BiQ2C;vW?NnoP!a!HF>)`Pr>*moOZm1k)f)ix}sAK;I5{gR{<17P_-am zhSW(XsYyOeuC6SE%EJ&$WfLnWFibff1C9fro7z?&5!<#q{^JRPgo2rhuo^Ks(pv!t zEu@Dkht-vpl|L$q_Qk-OFUEc0NG1GIBg3-_$^BYkn}x0d4DO#B9~^3#KbISMhqKQtDKjx3TDzX}iWOLcS!X<}*?dFwWVQKF8WKy36vzc}pzCYuc#x4<<;}bpORm#hlYSA{ zXF1J(X+3GoXuWDx-pZE|B$A*WBAvlqQ%fH=MVVkl@Paq&{wh|?!EKi2`cl--TLx45 z#Sc5N;`#?`b^~i_1GY->Ty#0FqQ`$J9F+b$_u1F?aMU26jk@~VEBJp2JFcQ5wfTwL zli)2T{vE(xwTwBHHYu`O`&W)(ycVZ4Qc}=#DR}blKz_c*$&?aWfj~c#OZUQ*M^~g{*Qt1)1MM9MYYqMXa9;NzMKvI z*qxcuam&5^cR*>X{dT{KRh?ij>t9CW4>A5vPi}Ww)Y6^)KBnx4y}dUZp^6k^V=! zBA-3gkyT|#a=G&sFby8s8(oAx%lIoLdAT8Vi!deeuz`?iEbaq@LPTLBUXN^@OpunU z{{EXZwsOa3R?0pH%McKx^UJ>v<1ft={wi+m!xw++%@euun0~;wfjExozr|XY!<<3aVU6JS?dV9H+^;FwRWhGby2#wBnacbU%g2 zsf(4-fQoSP-o312;BVhsXWOzdRfWHO`^MCs!^g34(gA6HY|8*#mm&MUhsY%aBO#t( zv!eaZeB=^FEelaAOdz_9>V4G?4MisA`wF4&0+$C7jbn%EJ!SwX8 zLHga05N@B?jUAsT$yQBA1d9n~; zNNFy8q1P_I<10&Xo{f7SNJBe0jHn~8cIukc^Jl^4U{ojaH!k-h(p85yBaYPIVqIuE zD?s7dhNbMxJ}>Z!0vMYNn~aLU={nC5&@A?Tdc|1$%yTA)*ki{)jF_z4G5k_)5p0iM z{c~0BCBG1*Fe>=A%JorQb7J0X!9_U?5aMHgQ=C~vgL_?8Gp?10Z@4e8^?6``eBou7 z6(Scn_o;`yo67J$^F}4|(#aMoWCvh;w#5K|44jU9eIfD%_4qD$c{d7#BWUc0uSxRF zD44q(Gi`q!k{QzLYIuK7&KbyR& zezm{yb?4Clo-Dqk&ckd7)fb|_j|E^EYFEdKO?ZXq5(Zl70F0zBkz`_KrERs`9rvYpQ%#a_Gg z{!IMs4(Ga>rP|n3VKCE>9$jd~Zw6k!<6%s|GNJVDIMg2M2a@iXf2^HIB=I*vGTY}w zK@ANmzaTxttPlmL@ncNqM5Lw?e&60=4{55O3JIGY50NDtM9?B=kXOH=rA!Kbz-BoQ zf|p&ufnRD!uIcxpufMFhdh8IXrVXEP6nFX<^ny$rI$v5rkc)<`)k@ zaL4>$xN;btSZ(=a;$IWGe3=a~<{l&;xJMNPGLZ}$VlDEDI+1;wa`F5QBG8t@Z@eX1 zg{Xias<3_tRiB)O{>X5$eR}&lRPFZ0=M`n9Q@e zah!qkr`A3(E9ZnW5D9a!SswNYj{i@&1@#c{dON&6NN7u*hwY)!Ib%u!0Kg0X`@aBS zvld1p6<2B{`0YV;bGe{~NnuWDj4pS!v+D|theEl-B%g54D`>K;jALRZw&7Ogq^?HM z&?w^x)QrD2fV~^p3HNb50e0M|Hl{X>w2b=uvgjK2?Kd~9R@ zt5a<9(9cMxu6Z#=zfVx(#>eETtC-tCSI>mX7IK%Pmp9_}TtbC*&+EkF-jkZC?MEq| zO0R@B!hblSkr$cBg~l%Sv*vk&_F?gT*ud@l{P2JqjEQb~Iu$ZOQ#`NVHRCGCiLYSEm8PYa+x{USx$zKb2;R63cz>=7}?61Db9DWO28PFM*v{0So=AhwQEPYET}%@(lFVcCV;tH70S;(!Tfz)@!cO_vlcyNL2DbMDwybIE0Mm0OOIF zZ)5I8iaAC-6VQ|^cNfu97`qdYdp=*O=pir*XynfTGK>n3OFd5S%fpmbD7i|NVgdNd zlN4Kp%xO?8jiV0UlTEWSHyzaDRCFCiCW+VRn%TrBA_-nx^-#xoW>mOz_Mqx`DY4yr zubJK&l#LzNE|b!#dIln3+l_}-1b&#oHsW?Zs#6`rFo{PrPm+&s>t~D9v$!c?9GA^3 z()iV7-D56=gQSv2I8t>|uH}KR1**MrFt|kM*1N%M9X7r*TRe#SJwDMvV2SJR6?#_k z3BksXKXrVu;kU+8ouSEUD6!L234&E@I?OCZROto@x>w&dt+#2aI|BXAI7dav5+=)b zo==N_=jwU14Tk)wl`{>eanbdkC0x44&qnqk2e!|#S_iGbbd(V-Q+D2wH%3+=vqjxm{xxvZvF)zNOvxHJS zSSu$@{FZ|u*+V7Bb}#Erp5t7;rn8%ek{jv&tBd;#XESX303OsPq4rjz8Y5!Wrdo>7 z8da@Xt5jPvMiHVlYSgUN)~eR3kf1edui9#tpthiP&EUDcAKvHf`!&ar9654dSFZa$ z&)@l%l?BHKg0_=;dq;7xg(2{{g5-(x>INM?)0#%3GSsr#i-`wLx+0IC@KP``7Xg>2 z_Y?9{-TLs#ykCRf$*}g+hP5+U`sE|P12gU39hWb7lHiX+4dyo}v#!oAf0U7^TBejG z?gJyR5&F^1!;}mvk-DlA>lG)qVlY}JyI0eWfj&PDVq?^~P=a((1d3-aqBGr737XAA z94Rk^c{BHDEe*^!y)aRozA7Jde^t%@v8un5958d1$}-THuZ@?n?)KE-Bai34jxf7T zy;~fc{Gf>?1!vy;UtY1GvI0xTtb@E!*6pFd3EZ?z~ zj?#t<&Jr}-@@%siQLwYC$9%G0(*59-Mmy@xRsUNBN_fO^xx%Rx3 z-6|EGsglV^bh|ej+v3o0maM`g?<8vs>NE=xvWs6jN`+oxsNE6xyHYl}-7&B<+1JTe zWJ)hlPS*fGPj$ne65>7^ZN!ersK-b>D;4$N#Kg88j7jh3qTj=wbu*zL9pBEh7A8%q zYDZGuxy%p2J7qkOw*|@L)8%voD4^v0Q$7}|8K&%)$0(bOi;`tm)^}o*Z49CG2ofs4 zQfa0I+a^qaHsl5-|KRtB-mJho$xB(OTS2NjM9W+L(BR?tD!DcG+&s9|D9`7Hu2<@i ziUmE@cdmy$eO{XN!gZq{>(+}39~R9)b-5U|n@y!V*ZQcg5X8VIfU#=%=bDRI9_z$k7jm#%YbV2LZyb~sE# z3Mz8@5j*;b|CL7?O43)-S;x_Ntn_E*X#Dy-S@RG3t>KR1E58sL$4_-qtg^($Oy{@i zj=R2AR(`l3Dkz}GeRcKtbQA4%5rY!^a?o^jE?P1cp|&&iine`|>4}Sr+yNeG;PCyT zChiD`u`e|k=e0ChYv{fG+X1e$ygwWt%6KZlul}hUb?>Y+l`!<2fQOQ?BXk8&v>}w+ zH2S~(Fp_gaq`KcsFS(%Q&D8~sD+`}?!Tx4B9ITQo03jG)rFo$5?c_5P=v%(s&h-G};e!rwdob{$j2})y2N?;;92?I0d zXTHc5dik^q+k^tZm^|>xfz>fz;9kNn*IKibx6WPWy9&A2hs>baNV3{@eY|xyD3{~z zb`M`2*LQk=AUel}+AD&o z_2+YJ4R8sG=_^{i@!t>UqG9^xx)kyLz`C{MJozK9C-OU$E%>C@Eoi=(+h<&SO;=st zI#W-P+3vtGUv;nZ;6TcA3j4>_n39b>mPEiPQAcr$KX#M$k~(I^4CQ2~Flc+^BdW~Y zMT;HAagUJv0KUwc5?7*5;mv8k;Rc zbl7r}Fe2&huf%9>7$XE|#_aKEi)aJ%EuQ|fkH4yz9H@Q6y(L#bO|JAEB+^`y#JdvV zk8InXGDm1u%eMMb4GDr{ILlp`tW+#Hd3~|YrP@w3Ru8FZ^50RWhIeoy-`Il0|5moK zCi6%rj#(n#>A|X7i7VRbo~Z6U1AIjydegoje}P-5wc(g@Xdr zsqcz%RhL{JP!0Xlyd6jJcj(6?5}Myd-&@>w4h6^N&d+7p17kAc5zj67BMl`@ogU7$ z-MwTlBW`*mwrIl988X!nl8=_yN;0r+S#SK7*?TQyKpdme8+~u_qS&dMLB~F;o;PI) z{P#7vPY3ADtgRNaZ`_hn=R^ z89?|~mcTFO#w|NvQH7leICIECIj)j`2CV%0gRrP?=q-XQdZ7zzyVy2 zYwya6bqc`qT2>JzmVO5Sw44(50GL_|o%SJ+$I>6xYxh@Y2isOhECmbhM}!GZeKb&u z_zkKaI)=B=+h#xf_V=#!?Ep;3h#%a=Bk{GIcIw`CX!}u3%=E{fOn)D~9x_m$+HRr| zW9GGPccXZJ&Hr@WNnHli$oZ^CX)o}}lOJ1|ZJ}EY1v#Au5v2{bo1d_%Z&OKm<1`Iq}Ioh)xiD6Vcw$MI6TrFXJTLw2gtfJyZWPE zH`XoC{!L4rUf_3jYO1^-Pl31Qz(WaIq_F3)L^rzn&syoX*S;_nk|Rmg^@n9bCY|#$ z97oNc6(`yns2w@TD`@9l*-Uw8N1ZylT7d4d3ar_RUM`zc_}W6)=0y; z`hvmza5wT;1fI{yKb`}ZNikPEXBOCrPQ3mrS9SrSd?zuEMc$dY1UQB&pPw11Y=_bY z0Ms&tUhFYuatcOBQJok(o?B>D00+|CX!UV0)en~poZhgi9`L*T%*vl9L>=OLt)R8z zR_yC{lCf3%J*qAA-It3kb(3%qbs~;7Xz863>%#o=ke{D-u$?n%w zwfsPU8^d_i@O>!zRc;E_=D^K>85tvgHC?i`=OqfNe6yfKw+}dDUu}8wF8p%&%U}PsMdtYOIo`VA zxu5?uz>j&b7haxxPwc_%7w5pPiix=}n>Ajk=1&X9;kuv&OnIMY%8dRWk_clmo*AP) zfogyOuWKDydym}LcvMUqe8Z#_E(9`zzC>hC)E!K(Ek){ER5j08R8ti0)v`x@Y@zCS ztQ$kSM1`h3XXPj5Zkh2sndHr5na<@Bj>Jhf7kX!maw!Ekx+}7C>v7Ps^680!88Ba) zBcHKH+AjaJt6MrLlHjgp6!y!ev{g#7I5tzud%ki7r+qUqf(tXZ+Q@tYNZQC^!F_GZ z+!U{F5~{&H0FQ0Z$wDdf7>P@PCetqEjI{LJ@j8c7`fS&Ic~HVlqsTT^ ziyrav9%*tVMyhs}ktKte2WWTr0@rB;3HpDWU=c8r6cQ){>UTh(w0mojoM4Ie3=6t*g!p-Fz z{rXnp_mvOZI;N&m`tBTfv*wZS3svwKrG*=0k$J&Ge4WO|;XxcbhvK6n&*_T4qUhq; zAGEi93h_*yEAj*hsK6>77+X(kFVY6%;^>4W5~&hvLhT`3iPb#}t6+X(+}7!!o}_o^ ztxATo>ocfba)jv~+faT!UoL}UH9tauk1n7JAqV#WQpN7G#iH%)!<=@*hkEASD$&BE zn(=pWlM$ja+V?8NzvswE&+`|+)>@JTwYG)YWi}_q#;3oEmkoAs%?ng;<4m}$T^P4) zMy`s^sMOojkTN7mUwVfu3z zNLoQ*rQ%5h2bsU7cq<8`5MzlYFd1o5Dlp~v!6izxvt91oZlqlV)PD^#{+Z1*HoV0O zu-mZ0YwP_?1sYd9n6L4)4sfJG?3u~UO zpp^VbX(DB?w2=^GB1PB;wyr)m!C84(-{a@oQl=@$0Wfi(ME)eHm}!^Bf`>7Mn>6T)W~c!+Aw>VyXH5?P-)Y~2K!G$cmEfNQc?jS zDwvXHC^CC@Yb`b>lOR?UeHL)eQDjn$vX^QefL8lVIOpdadYLf4TbRvf3j!21B_9f> z$5$S($GOwt1|v>}4(*a$s%7a4=G_9$h~jEs=UX1ukVLFpzowFbXFFj?NYn1}9@G_K zx!;Fpo1YVDp}7+=&L^7<4MNL# zS3nf4FOCWMR`n={yRX5wBG|kshg)$m)eENwGj0HFuKvw~9G9&SHS$|r%8Tl zl)80u&rH?cc0zVJN0^Ys^?p2dJ~b>CZ3=G5TM9}O>IcRKu=Bz`aWaE~ol!i@x8oL% zHMoOu@TRsKJomu~gVf7t2pLs0w~pCaCa#8*O3&)yA1SSENhK&ajA4yPbAR^@Ofye8 z$XZqtxz?H_CuR8Yy2rYb6t&8pWVt>;(!y~!D%m&|Q_ z1ajES-0J>5U5cl?l;1?c#2H1ngHO`xV)fPL>iZi0ctMuJ)q}8f8n{c^T^k6W7396d zkci*@)@33LvDn!~xQT0;l_j&h{hm@D<;fD|abL(J*#CWB>&Itrr)rz~@Y5k!4>bc4 z7BK#79Na3(ycslEoaavE19UGrzemaSeoL$HeL^FvPT+wFnkZpA5X#e%y#1TSvEp+IpcZpDhbdugG#dkOB=qQ%|a{hq$x-2d;L zcfQPIGCA3koU^mfv)1}OJ5o(W4g-}06$S`-s9CK&E;A@KU^o& zqmJUiqJVR4Qnwo>L?6jqM>z&40)#vBp0*f9ep{R`wYneHT8}t~UveJE@qgIAV)eRE?u+ub zI$3H#BV?QAXMO9xO``xA-c0On@;qHBl8dt%W|lGZR8QB<5^&x5U97ZBr_MNzn@;w# z&2@L&ygzz>vB?p$eW_Zv-exMAn2XnOkx)c%xTt(Jgdsd;X;vd zoeg}+Xr5TWT&2;8rrkU~Eoi?iHP*8G3yO&MmHb4v&!|?JwsHoijFIxkwZ-qTdS?-% zAx8f9+vR_n*vPOiVBa9Z3nA+3j33fA;imV#?E=|Pm#CW$#5%10^4l16#}2Zu&Hha^(T+GX)OQ;#GJ70yub&n5U?9RP03NrIP)Gd+hHPvX|+pFwkI`}=CLxEz)5B$V zNN_Vfq=qG@=6@jfSiaj|!5RdW5!K9=? zkCcN6R^_n{SusE%WSz1^9<>AEAvWhl_%RxAnl=3yqGs;3W=oy9*&8}k?>{y6=PR%hZ|Z)3RAmM2hilwa|14e{eK&9rn^|h^?p$oi ze%iAz^dN?zEqd7U00*bGHC&66UQCcK%jj!Mtb10uo77)S>~Zi0A7+C)QhUG_mgHc!lHN%O^6jEtHKBfb; zcFOPbwP@cvfq4`l9#UO$_1Yfs%F5GqZ=9x|5#LU;oqB&XmK<_-@3pAQ2+-8LoWbwObnC2Qjx|%DSqh?* znIb-ovBNgt|bRgxGR>Hs1Ct>t1Y0!wU zL%fm*`)OXrU8;-A%2pKRToPc0UH zj&=A@r7Y1^+mF9d4TP&i4yJ~GYXpfEeXwzyIVyB^{n%&lqA!n@OY(pOt8yB?JllMB8zQ?yr)z$mI?3+s7lt>vU(P%!%_w zjw3gRR~tU_Zyv`kvXs;^az;TkjVY)bHV{3g7Vk@TH>}OQB$Luua=KkT2w6%YuFdt1 ziA~V?Q;pknEqP7Fw1!BCHWO*X1$#a8^NX&a;&>gD|Gi8FJf&^xi|m<#tJU7-KEt*< zY0tNE^T(TG%V(p{X8D5&9w!kFblASZ+DuqHSO0$HvU07KCL`W@FU1PyAv@eS#ACB1 z{2WCe1EEOccPK$RAbnN1Y%PyzsBaV?jT4Q%xBaA!Uw#|4c{p&xUgaY6GuTjZAFMaL zMITz~+PXB?(}oZ!FMF=~g&<*B$!!9KF06E3&9n?x{M1W+2d^HR_GaL_^nVGwVYYdwW!=*S2Z+HJYzkF{u(SuMiDf`gg6wZ0T6f zZJ-4o)zK-1-iSez$(_g`prqcq{9*>#*)5CTTgfX^deGYr_Qa#lb8nJLJ)sWUCxlsv zKBu468>`O$`Juv~NidWjvQlF%Cs+Czk0=n1O|IC6)jo<1H2nt5EmngBRu7bA^-KFQ>JCz&Z`13QVHiSZ&^NB8qYnFkJJ{hP{4@oA3dG9^7epD8fE;|IC9bQn7{bM(P)}tah@;4R z)>huyI;xvES*Ww_*BFSzWC_FzuSMo|xMcm7hh_ZBi+71%X}-!t?DAl+t6e)!)Q{JG zzS?=S-%VjsF30DjPt(dLj5D#MG>$J8)`c;fbt{~HubOJmHi|sD&bJ#Fz-kA4DV39oNTbu z5scAzjmIi#E|3Zj6VCYs=oi0oArEI7^ot!v5guTQP##--M&hkc6@odFVn6V9%rBr@4*slKaj3#dizW{flq;Lw$rI*!GoRt zFyIN8E6wlV$kM1?jqIO7u~cCJcoG_OS=iTMUB9xhJ^@oqgO-FXhw3^6$ z-pO*5Ro}uV@Y@g*~OWF=+FpDLlw%X$jdf+ zfb&lzxq!JMsWQTR5(Jr|z?JAg?GY8Da3zSD7MAh>@L#*lO-M(5`SUJJQl0xpUWhJs z6D~ChcuN-Motz|XA+1TM{47a|$4!G}@HkEm+j`jlw?)mBN+=#ehC9|w%={lzvJ z@3@@;hdym#9}`pck*_JMNm-JDGuqxv&$ph6NJP)a*B4);ei9|n@j6D$%LHkTp+=cjMbeo^fnk@U0C#0hP39k|W* z2cjR&)D$)AO$Q6l_$}-7BGFk?@1H(irNBX@)oDSIYr~4Z{}YhbE7Mti#4b#9W2_lY z4buo!>es^X5*syx`nDOkMsKr=z&YTRRO%lzvw}5rNm4<}U1xKf8+;s|6 zf0wbSbd>)p6FTFRbTw=`*U`7)!Z$CSme-AMv|Xj-%6TFMs@!Zc$8>~aMOM{zNvh$F0vA{%7F>$E05`f8fr za)mGI!4(g6Kb)m<2ch(y=6J3IsdoB5#}h|0OnH)jUJKgIcEx-qV&J1<^YPMMY;;%$ z0hZDti^ch;o)!D?LHr^G91vad&z;TTUA2o#sd44I9h#P{ko-1DSJ%FAyzF#QT9$T< zww?YW4dxo>58*Ht_u7o%L-Yk>z1fWudzn9zh$Ip9ZO$P$=?X#Wyq+}(LqyW%jL*i- zFb)mGg1?*p1OG!MN1ut~idgiFK3RZ!FN3ssJ&aUEw!-n{PZZBL;D-IK&u8 zhlD1+=gcPesF#DfqsYi`K?QT&g}*(2U6SjI6$CtOQmltyxw?g684>q$@H+f;d%m8d zNm6?`vKEu--z%*pS_M6AW5W$$6Y+f_8@oz1_!LPT)5g&(mk66!AeTKE0O=+g{k(w; zABMtbumTq>4vFBjp9cvII|e)&2nPURopfTt@5J>EL}lvh^t6r@@Xvk=5|bu<`=rdw zAY;$&2g$<9f^clQ(v5smNU|EswA{O2aV^HFdVaj+%k9TOZyhZ=77vohw$C$pxkzj0 zMC8hyckL!`t$O-vS9LsFu~;`DYB#tg|26P?N)mNy%De5X8cioZnaOzau_cce7` zw03CnD#+>ssQPH`)Sg#m+exe95LfY+UM~a^L;pv|5HWB(XbKkJQL+ z_J?SSq6T`>m|Zojq*|2>XKMOC!yKCdmszXQ>jiqR`>FwE;(fb$5n$q?)ZQ&@W!bd1 zi8V;?J_kClWmxA9IlzI%vB(9JGq|mAnqN@t0;iVn-^07e!Y~hUt37-g%)zyt&EcX~3({&_WC6 z)OJK+TedBbN#>kepJ^nHK zR=3JF=i!!WfXWiG^OAXA?FHSt8VH%m3h5Fmrj@L-gk#G`LI)FQ?jdy^Lz&TI!Q-&b zl4wn*;p>>7h-3c{1yJQGvbp8j)mabLs_*5P zec3{dIg-!EGq50S+w05Y`sFCs1SMAI!%UU#!xxmYj2k#c&QT3|1#kvuC^=#Y+dp8n zAlegZkt66{%SGRWefAaF8;PeU`eP_FoM|~pMX;0`j}Z%;Akm*o(#QqeI(_x##!0B? zBTV)krW7z)V-c|s01%NE|1mjY{S06yaAl+8Dkd>a&+q6V22nW68;QO+7R3;lw3q@e zP_G#YOeyGv3aNDfaHy~bje%n@c-*v z@4rBX*_8Q@rrA)EaHgg&uIh(fNEBpGE|)9*fRLa5dPMAWTKfuS%SQ2U!Hg`6Yx%)> zw>@6RuMk1+2~P`Zks|4fe~gP=xg>L+RyTCVmmwkUM^FF|;M#k--0QjbzA; zC`mRJ&j>J6R$hXSn0NBo`P*P;bVjHO4C1#%^n17xIIjP5WH*pQs~NO^FjKZWmepi2 zl!&^1p%NDePcPz8%t7o&?z!arBhO#ZPsz5#n&Kg&#dX(ZqPgEzfSNsM2xD}m!^f4B zU(>k7c{BtE&yLG_+_2Tn_T6Z&lvJ(oU-8}XoPlWKKTVFS!s!C*H8xX)#9UVPEA0y? zx6~Y3SV^Ugi}ki#7K8CPG_uwHiIEA9gXO!U8C=$YYi$FfZJvJ5cYsowG`O+g(S!G< zisZZrR?I8)8$J#vGaY=?c(cmuJ{l}%@$Tqigxxylm-~8PJQfj%a-L(d)y0^hB?U@b zi5zBHBpX8_AM@E%U=@AcxVUi0vtwA|qL(dDt*ZE-#vd}a)nh|DnXru8RLN8fOS2sG|1S47% z&#(odn0Nn&%Mpy%hj@y^pdv*Z@F}5yqaMt=+HzG%ng+`r3G-pFZ};oJ1GsmrA#{we zT$j6ZWM&$k5=u>r4u?zhMh4FZ`*3VW$#v)B792LDRDI(*y&V2~i*_}`>=X6eD?s30 zrOa+$J#Lf|mdg)!ZT$Y3mX_UIpN|bpQ4-UZX-571)rRl!b%VLMTAb{T!P7lQ6%s6M zJGyDyvoFt&yMrJc=EQL&{b09C1O|1zgBV>PBg@`J?0iDXNI>5OKh5z)?ubUfWs|j; zyryrZ7s6ZdrL#5Cx|;kxTkml#|CwGcpZv`ncYwhaR{d%EFkC|rj7Q@?irG?vdo#zP zTMb!mb%%8wFI;x&!MGp)T}Z#|eOR&c%>qyxa)$%hLLmOmDKfjN3+;dY8E(6gOCxvN zL`g~`7t8%ts?L8aL2lHJ4U>q(Hi&9yn>n67NgQ5nr=c21Vo60ObT%5%FURia_9PBV z%^X#;h|EMJpJolui=)I{3oKy5xmKX}}BGOW$4IOT(>#->X(FBLJht)iuI zX_ED>D$|CHx2c84)vFEU=^OLcr5Co1HFNfA}?;%VK z6W|()KLSq*(a?2Bd`hkX*%-2KEl?Hr8P6@L2=2+It-UNC?!q$Es#BMOLy5);TEE&@ zu+DS%nNg?r?`HB+UZ)fUgQe3S1t^(KwwUjq70KY6TLiJ)Q#ie1IVr7aPbZ%%}#kpr4n-)pngR< zccnzBoXx8f-x>fWgU=U&7a9?Uf=02EM^$G?q! zkN9uHV%zasyL*ng7b>pr*O8xYKk&NFo#+Scv>I~U6M8q*3b`s~H%E6)xE%j&aQt<@ z^F!=;KSD4BhBFItu{CsKH|V$GwY%*THhSiXl&MgdOAf@f1}SsPa#iNI9&)^1%JaQoq;g`G3ltJX+ zd<~ny)oYtECYyrV>Gglpv_EhGeS;-@J*~N^bFakSQ4f$54R2wT_t#ZhQiZfeOx$gq znv=EG6FlLPSVM*(N{ic)RbyFvNGQ&ytIf`v!}Nj*($>T=KgBOwh)k-T?raK%-jZl^#wO*ANI2ypRJD>bUE z?HfZ>ipYxQ>v(6}0<;2LuU5jB?#+m-t4llM6_ar0>~K4=_E7BS#g+BPUOd%#hOf$n zZlbywcXyj{Qkm#gpK(9jXzS~CO@gQj_DXrBGWynG>sc0D$(ttOHh0a3bUJ~nlaK*g zXqJF7Su(#}G+DB^sseIU4BrYeveVgDYq~l}b+D;87}vv5n>W%>_&G3DN!tj-R1dwo z*R9<=Ox9H4NV#2dok$Uxjf247^zLz|^X#B_V+o^hPQ|>TujZ_xHT5VZRwcv~%WoO< zViN|I4}f+i5PE-tk3{;4H`(w+h`gPbwqI|A`GX5GsjA7lY*^1wjzb!UTs(c=u-<0x zc2@)Edt3=oshAhiTLH?6qFv^{WcFT^%UqcMGpoUvQW{%mBua3LfUUVOxj=i+4&y8F z0)akc1)wX@XMJ(8B94!Sw9jusDu3^VlY0=&M&CpadTgvUB=<+p22;*=wl zv9;}7Zh4oZsvjqlH85p2$0&E56QPPiZVDkRMPecar#8@j0#k06mYagS_AePZUzOUc z({{>b`<*<*7Y&^!JjSo+x$b2U-6i|r%V_y$+~r?{lqy$-HnboaLLx9hpRh)rQV3eQ zQ`ATx>>G3`ZKg3y!cAfqahQyAT0!t=83mH~0zvK*t-fO^z7eD(&T=I6zUpmbIC0eH z0+D1(F7wmBv}VQ2mX@14+j@BU7sI~BzO*3aMyAwuNX2ltYt)T$a{8{pFJG@>UHAq1 z*9hGt^Ee*ZpSbi57eJ%##Pnxugy9D)wELSOpZWlE{C*WoRiB#-MxK^=!;gGJ&aGPK^1w^zG)0V@P4(3l^3hSrrWzfWp^N8CTaBshf9nCw(UWWif`T6SCv zGxL;kVZQr^IqCPUbG_*6Sq7PN!(cY_jb4qIBftxXy;MO9MmX6&Ogg;Xm4Eh%o^&s; zJi^o6ug{Rpb0S$i?czB}YEM1w7N}?>LysyVye@ZUz9~wYRRiV^=+q(zbaj;trLgMv z|A{NoUb|y5D*OQS!`976eri)pO(r}Kyz@bK2to=k9f?S?2kz%?&jW;vb7bni?WAwvN^~D6o z;`|ixK>;^o^1l(b9?!0>O7l#9oc!)*Jd#U$8BZ<_N_`_tJExx*4^1v*Vo}WOi|6cO z>)pd*0`cANjW17d*YRZ@GT*ED(-z_@UF??oIVHni-3xeez96ZCdqT#5mQS&;r`M zs0%cs*12H@3Eg@yH;?oECV0o83A%J4w&PzHGl`TSg&(76j+WazZ_T$B$B_y(@NB!j zV$5;buJ=_&#T&rk!F}svRt|57Fa}o2!E~vNIL)tWy8B$86OKhRl9~vCWCb`)1ZlU` zz9>TT_GWqmtDhEZoe=y+fB`Mqvk%5O7da;aP**+rL$wj1kD1k>;x&K8*Wl|^06C0w zUT13~{9YMVgqY2cIYt}~kAjJjILrBCD2mDJrB&nwaZlL=N77 zb@x1)U#IKp2TO~9F|QSMxU5Fgfej=(&=Cx@on8Rq#?lG30{ujylWpkxF(3@J407_t zdV$O`LS63#ZL^V5+q~o<7m_YmnU6<3VKAe5)5G~?Mnv|Lqd7vJ>)oLmCl0!tt#lw_ zSQd($4r{}8jk3!`7CEyrjoI7bIb~iG6fo}-wfUb3$V{T9jlcbw=|Z%-)(%y)U)|sm z69@y~oZKaJUwej9&0_@+Yu4wM1ac#!xH(7-bO|Lt+|BGUlaw75{5wPXH75YxI-RA5 zi`eSjIGd@Yl0pSm`vG{1@}82b6rP^zi!HH}7M8|H^aK)>&}jtd}>svOQ%*hRpVVoO5l z;DB_vVKD;G$Q@3cbCr<5lV)&8W@LyTihkoWBx4)M48Vdr1j4iR;Fb*${D;zvpPbDM zM?(yG=$IvEf)Hq6(yg%J{=@x5fGD1)3;`T~Wy|&I_Kf*`?1w`~(J4g9?z;lE1{3M>PYAc+jm?XwVxV`+oHk>31aMwP!45 zy50w(06<&$+d6@YB~+g%*3X}yTV5;?ZBz>|WM3dp7FSSDnrWt*oK7u8>vlL)IizOt1wd zls9IH2|NCG9$fu_Iw%Nb3h0J?Ou86)9RMJ5D7&vI&{hM4O^*8(QbH`v(sT!tQI>jn#KU|?$OHZ0Z0!bd-)-3?PuLUWZP63)5D8h@th-3IziFUzO?gcs>!Rirtw4tcngy_nw&%* zU(Opo2q)?TfF~6LT&83QMS#vo7>R+uAx}`Dqc7aR2zzHV^z3*-36k!<_OT}GQ!9$A zGSTr5r7ks1M)i*GQo!aZ%qD^wqNjX~MdLI>7nC_U(Yv(}u!d4#o7^lhY_c!WRA$V1O}ypTl((3GzV zqN0E%vqVqsV+d86SXpJ*fudE{Ab1#WAb|WJR#i=www>=0WF)AXL z)l!eC@V0yqK#~w_vt{9t~T6xvmOuh>J=mf~@tDzXh|A4%f!c znFNprq&kC!?UB<9b~vhnLS(?rQ%&6is40s(@soN*0Vsvk-yJy%bkx7V z%H;8m9k2WY`oLmC7n;RTcSy&|pQ$AQw!M&~S^~RVkbqrp#(M6ns9zs}q|$rDH6p|k z3FPZ+)!Sf~iwZ}-k#E6ohAi5yJUbtaZq`7TVZY-rUGKNkxFmp`2)7H#0D-MShBq*u zoEwv>>gGOSZCd&bboGCi=dacgNk(Dq*$#92`J7r|7az?M1qaV~ClPFlR3fpo@mLMU zQ!QoKGbSi}YxTK3Db`Dj!?r;{u0BzbOFpS}3G-!?w?yFl;KHb`uVy~@K5~ijii-Spy2><|&yqvT;0D$n3A5C;rbTPE(DC=su)$DcRh0)l$viL>T_40?~@Q;)weTVw3 zM50`_`^-&592)swuz9aQ#fHKv2XjUon!?&^P}Tp=r?!C=9d|fdA3mFWKjCDa)-ium z{`AbjEU5S8P5IyXfw1WVcINp%jX$g!(_L?(xw~j_#@DGA!$ng^J+_*2iO=nK5V?x* zkBO44?c@Vt%8aA{bY5VL7H>016vV=qoZzE&4x^=JNvP9?*yWzEGYj4!AlQZS{I9qx zj%CSMu*?%9G_NH7f>T6eQZnZt*3~Cd)Z7(-xr=s4Tv)#tiwCq1+#YH{Ksn3snNJ|ra;4*%UZi>oG{3<6G!MJ7!@1ee!hyJ=ud@$viYv8_+2b1uUY8q*9qlr zOtwF2b?l1)cev#Ia+e1)s?b)M&56&+CLgQ=;N^U!Ml&K*`!zO&u`ewq6Iphr{!CoA zKKt;v9qT!FzxotP;n+0he6ce^LSa`XF?ENH(lVhU5*E(YGW#0MJR5iAe)*brK$2P` zPl@1@p-*)@+P?2v5XrYJsSt~8<9~)1;J$Bc?99IGZnFD0=#d3R$+hkQ*<+( z*0JSq?th&x?eE_Hf+SQ5_l@)q=N_{6vjQ`E+5B;N=L2pn7gQh^ot(b!?bh!<;hYUD zm?BrRrrp1bO2{{5;k|1iG}O7`&kq;f2sCOIT#-X=#6$A+;ap{ahx?J0frQrM{Xd>4 zL1K2v>-O0@zlvi6%fu%~f|x&5;|l9d7sDEoAt{X?iarkCboy}D24Kz=uA*^@_L@1)0d_H$yzvB+@ zY^O;c4BV7aRhdb>mdIlHFHNCQ&d1|*P~io)Z~XYzz48Ar$f{6gCCGJ?ri*oDC2`t& z2NT6E(XvB zl^HKOZJX{-7TP3j-fTpFdO0s?aAbxIaqM&Kh;m3!6&3M0-Vx>F{Wae9-zu>eTFzc1 zg4E(-?S}Uf0X~^;5;@+@Xutoe=Xl#-D{5tHO;q^KkdgZfb#SQy`Mh{$n9&Z zoRz8ddAK=arP)l%e=f@gx25oy%9LCV5;el=@Qly{*gE;F?9pCD4{J1+3cWL)qWKo^ zQMYlfUv`1-ZEJ*~f<%yva=|?ipQDfS<6f)IDT`16P%>4`5hRAWE;{!vJ_Ie%*nv8O zYSO?>dLm4{5=EW?!TQUFANRP94a;3Br?W)uK8ieHa({KmvhIJJgmIg?9ZYj*G1(D| zx{4u_kx@fc1HUTy!Ab(!<7mKzDgj z$$}k#qSmQ9`Wag~#p1QjFuPV641)^S!90?~!e#I{|EH^t$^2SpNKt%&a7?0Eo!*xr zfvLy74QBCMc@yeCVCqAuw{_#5f#({kIq7h4s!5^&LQ%bGKmxP7(-Q(p1-@uPIU-A^ZPTSFX z$G6{w_3Ni|)XdT)hAeT4F5{iHfoi8d8NN#sdTE9<#mw>5mRx3(l@C@9Zi}#>w)~ZAFJb32*7tzZ zs89X2=Gn}ahyWWr)4;YbiO}Px;a$=%^Kfxjcg`1*%?l2VFM4BTmt#vTN7BRgkV!gv zGQNPtt@+<{czOyMpM{c%m^)n(-lEI?~+o&{QgwG$yW!23l=XYcLR0Nd=$^TcNK!9=rW~>e)DTAEY_cCYOji z>fCu{g9Bj9DxYq$PplqdsK%@_uy^|OGl#xs1_%=0SaZrY|3-sytWo75nkU~L1SqOe{SUHTcftEX|{pJ^L{oyL+j8BR;7%j zX&l%`opKL1gLy@YP7&Kk)ff2izDl+#5;1;`&`4qilBgcL# zzgg#~>Zjtjt8e05kLC-LC^s~jE$%7z{o-!`F6o|)d-vI4gJI1gh%|g(D@i$jn&#q`Ft3yjzsmAJfuSJ?Xh!oU}rXf@Zz! z-Tzf09Y@f`&dQ-w~IpaCOc~A^}I{JAJRm&Mm`e?O0Q79hg^D(?V->6D6b!t0N=ftQv z)rt>u+jh=+eBA7xCDnS`aNmuvOEV&1iz;K{YAxWeY*7S0TJf^C4*K06;()XsI}TdT zq9Kl~sGxl{6uAjfGFFo>bK;(Vu764@lF&#evafvjYUmbZ0TRC?yW>>M{MJKa^7Nxp zPvBzEMpad^#O*tMR!t1`v{l6sb=_Jwcf zUo?5rmJalbvxybG)4skxQ_&r*L9u^t-TZWVF>*-)iD6GuvhbkZwfx`ED^uLJzPECT zuQrx@YrJ>6T^dA~OcofAMFQ3Qa^QtvICp z7LzuNBIA>6h&4H!jXm#_$lm)W0-yVx-eZW!0qTr#qkz zg27Tl!G*|`jpp=#GmycibshBu*i4uxg>a()UP+X`Q*>BEwN9mWAQu+tdC#-u(BGk} z2<*FIppScQrIS%EI>twtL)r$j;(0G25oF)_neuXWu!F28?YnUNEx%}G5P!@*MkANr z)TwGJx1J63c1b#=CUjtUVFs>6LS;}DNt7e=f~1v;U#vt>vN&D`^Oh-G(i$Mnv7&bd z=FH+F6YfL}eh(M}WO>Q07cxbYRIu$o&A#zTT!L*)w2_6CscSy8KYc3{UciFo)i^;6 zoRsn?@m%b>ZLddDi9vWdL&JV^06u$kRwO`#0$oSxL#6n`<=Cb?Zw-){TSGfvRYsEw zX!_E6hwk2Ff8WQ2(rk&k*aS$=KdXMEU^LKbky=_nv`EqX;@SXs)%|NHVVkRC))b-U zD=@wP{^k4(@Ric{l66+5=kMGi+I+}VQv&x9-q?ZMB%o}qe{LSOKInqigq?nPiwh9+ z*oq6p31^U|^E$t^3&0^1|7Qe11o7BE*quV*qfa0Kia`~?y4BaGRzkM8(dI)n9?AgW zZNYPB^#OLUxE?JEK55=qEq9)c)Nj<7Gvd$$AdbfD9P8@_KR%7xc~b2qN?)BbeViQ~ zDy+fngdBmE#3c`)SoF?QRa%PNQYyTwbG1*z|q#-mW%EVwRgQ8V1l<%uiKy50PV{s zff%NYp%GD()2mLiuSOL~kK0Ir!W}}3=W0K7qSH2B)J7hyp23IKw=Le<9LDI-7AmvA z!~0m1ro(#-tsYHE0UY&gM4hefF#nujbQ9l?jA8W36b@xl%gG1+Xtilh<$oXs%}*%d zQI;#Wk6owS|9a^+Ri~8-V!K}3TTJTgGE;GkgxT5I(vrjOu8zKgVMfnw#3i5@PxALC zdPRmq03@UzfPV6G>}=pLtsxJ#Z4JR^FE#}_ELkIPx@KTb5lhpsV3zG( z=R?oKj=_@iH6H(9We~N~#B-@whTra(Lo)zh<^MemOQ4drq1j-I;)4jp?psqjbI?7r zCx3N3FA3&?MPBFIV#VhQzVCX47IS(2_@Ja;WuaNM1R;;YuxGkVyAY(rvLV$@NJSHf z!bh&&p+h7Deb8x)m_@e} zgPy%;nfKMmFeipx>V)u7u~>);4+gu-NZCT&Z?G&$_~F>cEA^b@eTBBQrF(?IGMezd ztfCT)Bte|x8Ac*lk5Hc_v@F`tc~TVHWu~m>DpufvJDu;NLFymvWU}$d5mXe;7vrF; z0vH8i2o35np_(cz-DaM9eQ=O}y%Cx5xTfCfr`+0rwpNf5Lp~I^LG{Z+fS@>w!3uf{ zm<^JWz=H7(43jFM%%vX=oAYTo=wC*S7^;H{2kzCk$YPA8(1ZbAi-<>2?8pK}IO$qH z9&bzA#{okWIegfq7h_pV7I9n-0)WXx_ms3l|2}}Xn6FSnRVaL0xB0HZUKswMMERz6 zlVqzB2AD}uQJ=_WM3M^1MNo=qMa0c7THT6b17?4!_#)%y4FV?bdf0H()C+yutnWjp zVcFJdV2mMlUv~rLfIYp)jtmT+))cZg0ox>ZlCbw<5SCG~pV%B(@QV|?+Z0Qd^fe`t z>~#AcM?S=GVB=%o)75=S4ZaO^j<35MeVF)BT1hN&($2sdFRCJGb40uRUt#!HM~!>8 za850+>{L!;F@1X_2vnrl;J(vrNw+u`B<-+)0_%yOW^Ff3hD5JnilRdy(S$HjC@ZLI z4&xm0iwp?7Zk;8RFx>qmKwvS@GgoxOmQO>L$#?P0Y)?}t%sA;=pDSj zlnlXP;DWC%y+Vc6MeLQee-qH}`Ko8zor;2fL~{eU^}5*H!=ZPWt2`#cAZbp+mvE!o zic6r6PgR`ON#FCY2d1bb@Og*JQDcvo<}DX4HzWZQPU$js~?w^1Uh)WnVY>3eSWAM3;%}xQjc!J z(TWMaI*2g%5+KOmH>cL%{P`m#+mvl(;21eNC}*Ij`ke@(Ho3LjLP{C7c`?N-J>Tp2 z(Mm%D+Le;RNl{wT-uX7DpAq|x)Mp9mX1LlDErc7;hY*;Y5%%_*;E$fwSs3R}_t=*2 z4t~BJAu*ZJubmd0S-M&+xn|4WKcYw;of0fh@u2_KW+C?pSbnUa9v4|m+I~&`I+1QeA?+3YG3Ps zzTG_Zabx|6-Y5s?3&2~Xm{=4{<5kdez71MWb8LBU&L#F0ff9=kA6$0v{7(ZzndPY~ z`%xJce-N$%M$o>}L3hR4ENQp;voxeK$ZfaNKUbaTkR~u)^cMbLiBoy+Z$4Nx^|9ER zVpO~{1SbN3T;Z`}^eO=D=P!KzsAhe>&aELwCma5R*vq%45BuzT-$_%&^!d)ZxBd$E z1(VcEeE7f=AyXy-W;JrNccwrJK)70NEYJ4xX~L~FLeO5s`5WK>DRcvPZ&3QA2;Gx| z%_s1N01|$No?HHUA9^#-PXp?{80?cU06M98$cX!t;r>AIdojt-_x(25E5w#!jdbc2 ztW4i3kw+fr_(}Q+i)^&02Jct3j^&%PvDEnAm~@WCvuxvHPi1=dseTN$Mk80KqMOIz zzCUT*j5+|xSL5vZbwA|O-$byIr#gQXCX0fv-N(ZNjLnAY?~i{czR2*s3!C+Ad`%sS zP2jeqU5;Q+FFhpJE17-SakW^f8it&Yq+R{3mGfDUC2PB|%sjTY#N{Ig2v$;eDEh%r zt=0FEx%MQJ34{*YsQzU5(VWKl=2s#FYO&4dieE4*e3(;>-y9KJxfcrhER@#@CmwI< zab#(%{x*>8S1c%q+~3hydbkxpgkwaC%ibRR>G93{KS zR{Kz}d-A~{^it6jA!LLR4qT@ENa6s1K6+J^6yiHHZJ)1)%Xlj-h{LXEJe;sgc{Yy+*alo) z7SH@XI#zt9wl||e2A(vRA@Z{1f9K|V5PZ9-r>oeI1biymDfdd30~;tUP=7f7WvaQC z>WdS@S7aWbNf-iZz?de49GK8n-(7=h{*LodhcCA@4)c@7JkY-=F&z1kFCANM8-718 zHoK`nVjhmzaG|}Fx$XDqjVI_ReaDSM_-V>y9809V%HN;liDdil-5JCnl-PJEp*1Dy zA5i~E1Y(zf0tZO#{v+ow+Z`4A)rnf|L-}+*)hJ|57O-Qme5Z1PE(*}~`sLTq^zE0m zE2!V^I<`rrKa=X0`>jG)YaPdW0lTYr{P@{EMyJ9t+LKeTKIo4W?|m*~r6xD(cHX$R zm1)=+<((Gml_O7#%YM)LNpcRgw=U<$I+1;1EtS2`blPR&ZVgDsPS55ok4qB z(eE+5|LDnZiL5c{-|NK|45=I(GraF70eIvT==QXNOO7krtV=XGv}vV8&@IvzsYU+L zNvE`)+`IkCv`peN1OQEjd^ag9gQ2PV*%7osbD98-!pLl!n2 zyy!s1h=It*dAC|{VBrxP0R3`3_hBmo6)G%re%gu0)Np%o_2(VjNM;g{#4k_ck-;L% zvZH;JuALSyD1_l^Z{4p~PW8S*A%OR$u_bfpavFM;J}sqASL+th$em^$1%&io9%KD4 zFfR#%S0xr?H3aapJx-;6+2#tRqIPzYhiE76PUQYrvKW~cRXG42M7;L;) z9M;29fpGdEU;ouvVEVT$6cSTM{Hyj$eFO-Ooutz@O51GXptj_ZOB3prBZxp-tEh^` zYY~^Tq54TR1O|AwysF;;GX^cf9=kCuiC4xz;CzVKeXQNR);s_aVf$jC`l%*-#?bG> z9O*b<)}KSW9&o*)0mNN_)vO%=&?!C?z@Es%es$7(UjwOo4)eKMr2S?}{vR`rgXaA= zpzlADU8ubXKnC8lg5cL9o z&ll9QSJNXctA`=eVxvjB8aU7mbDG9^*~H?2vtw+@p#a;3y1aI>zWj7lI?K1b*}n*( zb&q$0e0MC3#R%@>Zv$Lv?oR(cko>n$7s3%`3l$cOIzZf?5HF}^kbV)Si_%C^H1Nv( z4G@kC#&r}TSb(fN^)W%tx6fZcJR2&C1c52P-$>yuHjcM6cHvGicP-k@iLoO_#o#iV zOma9mCSZyB_^r4e7a6d}zo{fmGFhr}78Lvy)Q&GuXR%C+eOtQJQc1zsK>g%8f+;lo z;vg%F8Q@nE4?sZ4`o*61F?XyiV|T2khHD2D8u9eRy8gx^xDz$B>RFXzMdecW)=NOY zrY(KEdFZXp!t|2I7+_L`ca>k`H@ljJWFC;31?GecUf9os2`JOou?Pm+rB; zAHwmLR>0`%BEx&-zzeIbY4!$QnvtINr45PE(4Ox05aX$riGAhM`AhOzp2z=OhHGUIA zeyb?^lq#qBodRf|?d`MKRw~v(uq``R)Wa~|i#A#abu{P7$3a7Ds`9neYJp@F(NT-T z2CD_Mh(Wyum}$VaptOC+!aN$kC(7dtBrXOw>V45DnBje1zNnLcO;db<<)=FgvU0sjqHm-?NM?s9p;3r z4umsJ2AudYY+mxbRhyTt(yek5`ry0Ua!}H&*}dX*eS{0Q6R;1wX&P@C+WO2aFO|Z& z@Gzlp?+|-L4~Kfc-w9`IEQAU{ASRxt}fE?PKo`W_6H%N*K z8c*xM;VDo};T#HkHY*rypE)AuFE;Hsi93|8@`MCDnxWTOUWLZRJ6@-s0mt+gd z`0knbsyoAr&XwpaDxyznQ!QS{4IG%^0ewb1`eNdpSIXZ7Y2kr5(5p_r(T`ylFN7Ej?)}|G}(r@Lb>5%ve^vxo=yEf0Uoq$`OOHjog3dJB?h}AN8%Ry0*Z` z8YuRs1MiJ{3Car_5yHTwf{FBq+2`BeZ;9>b(FmY4#i=j1^&`F*pbTv zlF%?K$jf6_J9799+~nS#+iLN-O|Wb-=B1TWn6zJv%@G)g+su>OU|rP2Ab091OT~tc zNkfyk{wk8bOPK^<=nTO&x=8M*E}>oNt#o=$f45kz-%K>8ue4V3RS6cTOZLvruMm-AP3fyAR*abMfR(3IInI{s zK3do&d-#S6#4rG4;?#VFI8dz(yy<}yY5&s7@c{N~NYO{o}3fE`4lU+Bijox~IxJLsXj02s$?VlEYI9gN( zpH)Zj`@IJWgy2ql#B*<1Yw$TgNG2#ImmLMv#8^}zQ?H(~w13E?WX~st!0`QBOC4-9sSvBboiQ8VE#sIuoD0D6Fzl-n*hIYAHvbqw$(Jiig z-|0+keMzZDNVmviyO8tNMSFAOrV_P-RcBL|h`pJ6NtGTisOPP00%S3uXH;avZ3H+# zXgP;fnq=y~rl1!1#Eb z5mrb5H%gNQhoTYy=#+_kHOhetjl-XN=6HdQ9?w~ zWmnr25v(E{g6_MPh`NP1JR}JvT=8T-19QI$KzTVv2)pFOa@AoK;e_Cg=90qzy2W`$ z_-KJb8hWjpPg>|3W|NcA-5pDGhS}qwkG$?`Lbn{>r#5e6U)i)YNszJFp0*wTJ|uPO zyY`GIu%fz(%PrUjox(R3dK7@Mc{vE>`H#RmLzKP>9H{UbG~&9G1Z{!5{ql zgl*lJJmitYv)wgrtw0=RGIorkNaw(}xArU;~ z`%f(lJ4S2T$;NJciu@`v07+%Y%it-D&u$h?E~D%y1Rf>=D6v-Z;I+g2^vy_>Qr!5F z?|nbX>$0Ra# zytgE=wP%g~r_0#u)v0jdcW-l0RLDiqDa*dV=p}ss>c@W<@5c7jf7En)kofcjoLrsO z+W4fQwRc|fMgO_yug~b*P(N8B^_YMEj@h(m?7yepBO1M)*#wkV*{_BI1z%*4r%9RC z7*O~{zpnkfEHyn*O7UQaXAix+Z-a>!g0Ndl**0RW!DFrjEnp$(TWqBt``|nt`rpP% zyq}#>RZwCvUg57v@Y&E`#r3=(ME~uo0v#-W_S72} zCmV~S%$qQ0EFUcBa4VmB&aICDb3fwWZ`nA?eIHKhNk?bWk8U z27)0cGU7#O1Q|EU;R}GLZ9a$9l3mEV@+ODgP7rK zXvzY@r+ZJ`>u-m-qS&g{17QWVB56zHAiMoy^$kOP zH9Cnw5no9dxm@?E97w5x?-hmT^?+lF+hBXM0wW%3qNa zRYb*EZDrcd=ZrGKTdBuNp8hXhN7Q?!n7}%%C?UAYh0Zr^#^MVmw$zZ=vay6V3G$gM z@1v1_GnOPwf*T%u=7oq|`m2_nwfl`WEv1Xhp0#M%ujiV+n~K)7ij}A)MU#5tYFM;5 z2)RyScql574RRufj8QtT65rPjK8A>kp8&`zP4wZFK| zSvS+gg7`hfT+f}4YW2uHRrNgo-(qGR$KOkNyax5k3`1MfNqad9nvEah8XUlTLc^0I zC2UX6at$|! zd1U@`)!VO0`Jmr*drv5D%yczcmOs&cGr8kG(}Qyu#a|-plIny7Gv-@^b=V-PNph_J zDz6g<5SY1vS%?LNyi}u5(otN6^L3o`ELbl+@4-Q*P6zRuGpn)eH;nKE00lap`5r~? zzXPQ9QwRGc5G$xofj~6@hhB)ILdCcPA7mQ)@~vk9lvQXMp;f$f+!dmXf7E$HOT}Q{ z20jU!t=-cJeJ3(k`SCxjEJ6Rd!3o%|5RzIdh>c;grT_84KK0Mf8$KZc{NM@0WE~xp zpw`z3|1jQXd(7DnKaKcC@xyHGGI_`&1D=n{mB-)ewa~W4^i;O5)p_hA`4G(Di42?^R~n`V z%V#hC97Ny|l{_ztxpcoo$+xEAa3Bf(KFzNWHb$ET)|WFDX_=I% zX$Rx;Ao%80Y#;{bv^Ut4{J30|z&a*gahXNhOr+4-OTC^6L;Zdvh?g9D&~EK{Z-YOT zS8^4Ls^W2QbcJ;v*_M{EJt6HK*_FYQox)cUZHA%N;%)3BWHGUULBSBi0Nve z0PFiT7`?a41+cS(8w!+-tJ*n@ca}3r{3fRePOcq_WfhHVWokf`|4MW zycO55+#GV6VME?zisad0{J7lfe6F9xjE!j9Zum2LBs0;$vdfI$bR8$SN>B-dNUA&n zd!}{*>I?_|LsBfGiYP@rAT$sk1W?97BG6X_O)vt5Pbi_b(u|p1pw6UNLYV)^*6y%v z3a}1VBUSr0y<(1U7(j2jmA^-hF|$b!X-9oLs6Zi~{E+1(f>6vj(#mf;|=gIVV=vQ!xnSB`rqIuNhpIHge}damN0K#6(_Ec zz}Igrs_EY?lU(ZD{y#L8+0JN!0c~e|fncWL05MRlVrTN{d$v}HAI<%q_3PX;b4|O8 zpt+?ePEm_55L!$>UCA5D0v8(R60yWoJXZ4 z>!|bko(P$>ArU=?b@=~8Dn35xSVLQSKBCBNzzZNTTQ_p8PejDYpGkU-({w<=8IBmx zNq)&HXa5sh^rNKOE44{LsH^L`={ZmCdb!yG! zG1t*+Q11G(wQ)l3JpHU#7|Eb9aXRu>D_H#s$I4k3t(QStZ2h71)<2D5(^kE6#+!9! z>x9@5Olw-X#t1)k_rid#6&uS_c&iyV#-zI@o99BeL`6vt#@ zBBd*m*Z1N4IUa!>7q)cW`+x69_iY#suer@zNpf%b3B0CVp6>ZvR9Znv^8mV=iWcsp z$LnhL{NgYjxv?h;PY#mJFHvld!FX}Ep$|%8jE3W?ndKc5B|{YOed}7M`uLTyz%I3P(fz3@`e=$DmsAXPkF7JA!NmS% zo$?e&P5=mJ`j2?5nE={OGRSxh9;fkx)9`9Ue(N6pZII;NPYXAr-PV=z5@`A33iW=C zIE5TKd)CtsMLL-Od~lvR24Bm22=1$%XUmGSgBD|}Kyh(J-%H;${n~}QCZa*cvcnP$FgV5@ba{YADi@5B%Nk-!J?-% z^`UB%R0AquY6Q#9+09#9=td9DtN%&e{>K4$%OtJ$OZ4jx7bAqto;9@*#hhRYoIIq{ zx?p2d$bI7O-~Y6gr<>lLE*J4e9c-#`W~aBpIBknhBjYd`>;tx%C5zw5qSl&Q8dPSR z!c;teqLoB);{>Told_QoTDLyS7c;1q8(32h>@$0)3S!_g2B03L*DHRigDI8qV7eCj zfD?|>&a`7Z+G;jA)IQR5roifOFnqJQR|rDoC+j$Uz;B>K34-n+`af{1O{n2w^NT{p75|QnAGQ7STupRzo z_^GgNJ9VI&O#Gepp^%%~SndRqO2+JCC zucoX-xtRh`ziMoB@SrimFZY%tqB^72^Yb%UIGZ=Uo!dHmy4~wVhY44$HF^tpU4OpO zx6g33x;8BzS+3kn&Y&x4*;gNH9$?y!M~`QY3f&*C-%vGs$9~%Ghb1f%waYfJB3rNW z(|3K6)-@wTbudG9qwHS#I()#9GG16bE;>2=$$Jv$RtKOHg0^Z(p&5VUWfiv(&;#73 z9dU7WXEe@vE=Ic$&3V#N2!fc9APOX=$s#SjCxr4PS!Yd^-~-=lb+{kQY`5*hYh7_;E6IL6Yq*VplFkR#KDVrJR3 zM#aqYi*gWT_1nSsPX^!m8DqMS!$HAlO0S-3JcLL5GIoTieT8qk14%Y2b1`9dUVks` zg^FIo7e6C+n^%cxjtwe5KA)Gb2OpFYJm1aaf8!Cm+m*@I?hfdnb=F zh?MbLGCNK$iVT2nG}9@~6+_p#Aa%aC@>h>b zW8;V2B+qnjT^H3bD!JMqF_!5b>KLN1`@MYXqz#|yy7O=0xu_L|C`cDRg(LfW^Cj1X zND07t#UY?TTvg=gh7h)y#Y0KS2g`mG6}O;b$i~ch9hr|h7uRX8=9I)O^DZ~FVTZa= zdT_kRQsnO;ld^yS{>$^@#*@(UY&3Zp9&8aiIj*y5UB6E*a3-*_`LWm+R_n{d1qsgo ze4Tsk-@oe>!d8V4*g%c6&}WS5`77>!YxF92MG8H!_gjV>)ka{rk%w-A@Zr7RKk5DI z2SP6s$iHVW1DiuaD{9u%-m9M~ip75mFD?7}ybWh8-P68*U%#ZXdRka+>qNp-QhZ7s zFSvxtYa{(E$A*IMW>sr!&VHGERM(k^vM^PrBJwX#;fF{k5iADvXwl>XHDy>?N<2}Z zPVDiLXsi(2Uork6kz2%0Tsaryh)u&;+iPBT^uz1$KHwSWd9Eq>-^w=QgXPNInnly= z*1tq?@;f~gMpo;DJ*8S4z~)&m&4&Q6zyvDZL#ZHq6n7o(Wrv4^BF~vc3~FC4Rw>fV zatwg)!+`T4A;WOg`mKH^DL)2)?xg9WrhotG{v;B^%}R~H0o;f5J29%^)!klPzfVPl zM0u>Ztt|aAG-R*U+lIGh>xm7eG-rSI@pMTzasfdiJo?(PG^xrXpxJkmaLIqbW)DT_ zhpm>&@o+*>U%SX4g11)Db!8ux3Z)iZjlq4c6Z!q3>}sb^(d1*Q%H(~H!-rIhRj&ZV z5`-jCTF~j#Pv_~ca~?N|GFK+Svta6W6=svKddLu%>Fp?$8y zsIS+DLzFB`0nhSS zy_lxst&TedTk%X$UxN%#ARvhA4>OP}XzMiwcAZ1>Rkfx;#A$GMM7EP0J&7|%Ja&L|!(WjU1@f9rLHu>6J<#6p9Mt+yzy8Fq zmjO}vH9v#QA#^DdaIEJ~8eqg78TqW(XOWbd>CZzW=Z}|F#%7?tk&1o?D6n+ySC3DfaR|^VMN|rVrTXxxYm5{*zg+4pfSf*FP(YIem*GOkaLDB%7_|{-l)|Gk;q`LF~7{zuN%O?U1x`2U_w_ z!*-``mmquK&0T@il$}3W5N@S+^s#*a-#auD?H4ijHR->S3B{`cd~W>VUq-zcB*X5c zdE+n?j&C7DF{q6)NVv2U8{mWZ)C}aPmR_-|V^ry9j6P>ai82t{VfwxY+I`%XJsMf> znXET0#E$0waN(TH8wj{%%)J*z1SCA@*rpodzR~6vfjeope~ZZrK{l&0m;_>M7=w-P zzV73}K{535Za65e%mOo zWXWZW-xJ0dHgCOgrn7M{R*Vz=lCNe(ay#h{hDDGND$EGh{UW9TFj zO1Usof)l*ah$ySh@dTkma1=T9uy#)LKLH>sq|b|{pu%m*ykWg|VC$AhPgp4MZzz0i zVjYk$LLW1K37dWY!};%nZygSlC>OQEUHwZdDqS$eZ-EyM^65U)g*E_=@a{>7ky>vg zRSqhdID|ZKBG(rBR^M~#tY6U`YRH@&u$Dsn_z>$84Z^2%+W)TW+k}3uglLl^!=L;_&+FV8SywFSb;|_qc9!O)dWae*s)gpqku_iut1| zP~IqjvBi;C=&*X`a94T{+3CFr^dWt$VXVI=zRQ!NchoUPex(K8$U9W8cN}XH!;N$k ztv3Ku05Za|=KpBXm$_;0MkxkiS#~{$L<#rg4N558-QC?tNOuj~^WEp( zU-M_qbI#c_`;E2MyY~734zvY(p->gm8Rnyl*Jb|NAUhT>@Uj38t&rL`Z!`7ol3@y1gwBdMvk1tnjQ}nj~O-69uekDnRS%r#6{I)TJ)EXDHH ztFI#uyQM$@UqFv|!?3w7LVI_AHps16FBI6D;$zAG>j zLmH-*HCOr`v?xE>StZCkPR_i`sq%A!6ZwT!dA41R*K82iIQ$Wf$S|I?1k2TO{d$(u zZSW<6NT*e7F5oMv=b`ZA>mQanSd@NT7FZfqAmOJb-md2Br7$*jNuSGvq+C}gC@u=( z57Zdtb*L(ps-+dQkL6#7z+bq#TlDqf#ox3tS6kVvjUpIVI`gNOStZ+KD6vP&3vWk> z895Wv3EPaA?SF7Iii@LIobpx47xI6jGqWa}mx|@KmI2vOcDN%C?aEms`f(U-uo3BA zaqe#+Cdvr}Zg>86=N=Qj1!lBJ!~Ls-Jp#cc`qqml8F;6PjtR&xK$@=IUcJDs!o{!( zuM5J5mWHClsG8dueDQrWMwe!|$QU|A$mf#snUVmWH|-U({Ofb_z_{@}tKx$zf2=&w z&CR9u*#bK-uZ-ViLo%U`+Ad6JPVe?HW^{h-EeO+8+1D%_NnXf>%5U7XhlfO%*&o#* zXWm4$nTj-7g8Xe^r{T-N`hy{mN>pAYu4=a+5ZbLxeK%9}Qch2R=ZM6=DoO6Q_dLij=TrKzBDyT-5Ak zKO8goueVtm<63>BX_mSE(G6}}q=Yjo-+~%^>AGl(#&C=~@1-4}-4QtPo;RH(UsZg& zju<}m`t4az_2)ECtWHU+S0bJADH1BcjAu=oX^VWgVlp`j)aPkTmHL<)TlF`H+VAV; zIkso>M9@AJzFA{h%*fC5algbZm}vLuzzZ1eu59c|HBtyJB00@6E zIBH;Mlb7lqh{i~};?)LT?^)b`1e&NX`AkO*|L|q+;bLIM2;!H?(T_aC^g0)x9xE#) zbNZf4@Zd#~YPm&Y$rv3@c}l9jk$2qV3DoKwQKkIzAo4rAM4m$VzkiNh(E}o7s7*PZ zB!=HGf`>*8WRffIETk`ELK+W87gc2@4Be}C5%v4bvR(q?s!ZPH-8snk1?&k2w`8r$EYcnK zTKWfPXkkH_5g#$@HX>(VgSyJKeEdoz`9$K3bz1^bTx zMvoRt4FAC#N;D@Vv=#OoM4CU8c0F#lTZ;j=z7*YqVfI99PB7*Tn04I?;BJ=B2~{YC zwIGhTWzTMA6W~UoE6*3(8(0VIl|K<=nR0(_dJMb7xqp=*kifXf`zi75m(tp(+pL6E zno+7+558tt6r82d$k$Axm9GCb@+W{q1yL9GVca^I&GkHrlo(oIGV_ z_!~WdZW{{{#Pi~1f)mv#sT%g5Q!TW5G(x+?;oewgM6CY#xb@naiZT||Et~7=KbriO zFBY;Ug-D^&i_95T>bXzE1D%4)_EI7Dg$@9pqmKGcfatv18O6WZtKBzP&=yMrMb6xP zb7V*YZVaIG<0R5eSyIRh!6p?&N^A@ZrRVGFdHYio=6C!-$Xw=mxIZ$!*xi0_wvOs` zS=h}jpC)hrV63vDZ1xFy(0Wv%k1y%DpdP9Ndh6-sEW?B4oeB;(VDn9@Y^e=ujzMf9 z=!;7GZ&hpRe_23xYoYSmCRx2r0eHeE9c(DxCPrye>l!)_2@CGIi@<}4RNU&c&=7IJ zx~~6?Pq1L(>sDihVHP=NgE_>;6EF{S6iJmz)R`JO8r$!qZyyEYxNt}0>{-Mm!O_yS zH6{uAFZ;snJdiEjApad~`vlOJ|A6Qpi0>SA$`nJ!(982-l+d4Uu-1*o|9JSys<{6? zSTUac$2zK`$Z?6vojDdx!B6HVwpv(;Rg74Vb5?UXyF;;QAms%dh7B(BatC#rxT>bS-xaU7KkXd zS#?RdVcE+V(Jb$tw?3S~OQSY0`>h$<1PT>gaf(I7OVDE z>LUO&YFIFMo#+wJI;AeVrV(vBw}H?8nPGt(_gQ;O_U$|J3hq7?WD#`YeeMA>VbGHCtb2-iExZQ_@3tYIG5S6sUAsAJby=WOwaXsT7q^m3 z$+b^MWMDzi*`KV>IY&sqLS^e(FGoCC=%E!5@@tCu95tQq=rzp<_#ns1->2emi?LH6 z)D#)lg74UU>sGv9QDej?g%pVz#l7Tp z-8SBl#T*x19nX$~{lr~X-*vB>d374F;Db5{L>V9BRV5M`KF2AM`we;g@NT@+6xwiI zk@uMxV-v0NGE60gmvB<{-@fDd1AxJQJLd%Y%ncx1hKZ)2_Qf1~?}t;E(VC32K zp_)k}XQeudfW*{HVI;lZfBuH5VyHaRTeh7=83W5^)qr}eFOf+6GrJ$!lf_PG2fGV? zu&fj77(CPa%7VF#;zOFPPBxqvJ1Fc-(^eU5XsupSS9YwPlz8wl^{rb+!{#NYeyLQKZ}Mg# z5X*|whQ|K!NP+ZdUV_qg_wCsupd|M|l{?lu{C=`wc7Iq=mEES!v!}0h&^*h<#@P~M zHDLit5i*qfKH3J((DVZKZ>g%{MgnpP<8SnE=z4Rm*oybHjq`EUa0TAb*_ryxpZ~JT z%LC;cE;Y(*$4)#oo(CYp@g$!uxGb_Jf;4zo`~HQCUr((zDWec_7_Io+AG4JBy}h0>I@VvnB%NbZ#00NMKeErCvx+MRPlN~86!4xjUX_nN7w z_;a$imsebaY*L>_iQ$nV862dy8|T=1-V^zLGU~cmP_g6on1jA*u|rA=r*voH>QFp1 z0iyK#Hs`qwR1Sk|1NG!tGJw8mQn>EG@%=qP1)8@i&(IW${0&NOMIJhD_p)lBKvc?n zuI5`wA%ogS9 zEH=aVHbXi#p?iO25$i~x(Aq5a^slPG=&;e9D6oWnJ1xTp`7aab)-Jo`GIxv{+>!J(a(#Cg5!S*WlHXr`NJ2%u=u z(EQ+}H1cI{dDEo|kO@SDKbm9Tf;x%qc1d`^n;jJxQF+r3 zem`JF3>7?_E$w;x6A_8I?3(pyT>f3UoO4vhTU4+R0LH(d+XRG92rio1YDVM-d?;&<95`#LOBP@}LSsqWwu&?Bs10JA9CSiuVi1{)iGfW4?j1jw3bs@X24BuSNTEm`%`E z7!A^zMX7SfiAe~duOdE3_qth!JzMX|x?b^=P4_&q`0=%nfd$fl0|im!^*Z;`)iU{G zg1YnsE|1V{UZRoaoB&-#NazEza#SJ@qu(I$)Q{5~$M9gYgftiorAr+JIzGXyURf-n z^?pxaqCEYgwvx`(>VW6LtggT-iKWxXCxzZ%qFkS)^7ij0+h|W74!arhZ{F#Z8;roLPBxnb^miCXVZmxD(P zzdlheqMl!Oeumjl+iY396Z#6{C!-s2Yg$CbFH}6Qk1}b9+B`-LUihlWy_!d)>h)mh) zXk=@78&^3<%qc!}P8@Cj!h!~J&WFExJnA)l)jRmLy(gv+Mj*t`6;+7kh9nuCRMtm6 z7MoLN2CrMuYfi!=+wLPjqlBWW0Q_-Gkf;9_wCWj@4gX~B?4Kb3aX)?DcsR^8tK2$; z3Sq#xHWRhEmdivxtZIV26(0^febx563fGcm@4EnbZbsc6dkuvhYZqS)`MU#{zHTl* z(VvTRzgi2QM!V&wBaI(ZZ`_(vADh_3s51P48Gth}uqp?Jc{O^+D7S~vhusHhUT~WJ zsO5dJWY_t$04|CCsV6n$kd|@yIenQ8eTC;7*Oh|}cFo{VbqE`1E#%&3g#nk|JQQ{&(|l;4B1hBw0i!6E+}A6o+?wx8?WnHmRA%U`duJM&gk3i z^XT=wcTI&kJQ4xFB^asgd>uvqOx7d2eF|Pk4tEqr0;6;14mR|UM}Fm>Zc;;Fe{TI1 zTC=#eVqDOR>ff8c^sessq?+}C{poI-WPy$m!PMK!9|mtQukD%Uv9@`>=c|VL3Rg9F z%3reQ1^?blAtgY@Y^>03EYSi(K|{f0MTen4Qhc$X#PIoJ;MwcE*RorE{8hnrY|7+b zlhIo@4X6;m_N=`PA6H+okvik8A5*B*C~src{}h4bIOsOL71~Y*th!zYtR*Q)ADY$M zirr@+sg7N_K0iFVs`^kz1;XQOt@$F8W5$c$Z8gVOIc7O>+M2hVeNFmjAtv)Lqc(j% zUl9Xk5+)+S&2w`dge?0z{&qoRt;l(7wIBgEDSG`CULY>5=@KET24P>t1w}sTPwXhL zKdx&B1lLCh8F_8N+_H~gJa<0Btc z|B~eWy!Va@dHi{=tu6LXSpg5>GhyExHIsd8@^rVppc)mh9cZqE$_mbN2j`;^zIJhb zi9T3pC|RmfKRp7|^TlrPWD?gcBOtXdWEk;UW>&HVo&LJ~YdC|jvr*H_z*)}v~>3SPLy_(B$*cTP!M@cO`2Bb7Yjarrw`hV;Wce}=%ECw$99tAg#?A14Px6(dXUtUt}^|09#dV=?zSQJC4VuLZLE|O zCyBhLq%SC2GsZH7yp#eeqaNU<5!39YE9(H`2zuu5_6ohk!UtGCD@y0kv|f<3 znxk24xKfMm{cK_|U?u`=Ik22wyPS$_RA(VDfrtIV%vP)WdeE)}==;pXk&j>M6pIaG z@3wE5`v%?c0N z&#UkDHfmPTyQj?g?&n>|2GS#Ff(&o=mO5LZ1;(C<%#ucBl>VFRdGJc-;XI2$1~>S4 zPU8N6cLN{;WxQ^;liu9`{;*I$V50@b6g(z|FFp2QvXQ#2DEdl(_U0;;`2+x45NRx^ z<|JDj`gat{0!48|9jG9Qg4X4Q5mY-uBIMDx{o#ia&J}9T8@(_rR`mt9m61Q5U)ha zYu~K9KaRc8Hk_ao#@;S7gU#|^7!x1;*pC%aa+^}$q|JOJYFpX8e%|4f9_@-`r3Qcs zV*}XIjqiC{2q{U+;~nuUdjov}N~H!m*CmyQW8WtYix`PJ2seP^VEi24IS{-82+_%6 z0@{mv&^we+ZlS^8Rw_`JncRpNZeiB@5W7~Sz&Nge-AW7j=6MTtcOzO}<91@&`#V{B zccH`?{)uX>(~44Br!gsqaT$tG94;YMTDLWn@mf0qDp@~;!bO|fsNc=HKDYTBaf)2T zvUJXM$wCggKdqlv(1f)I+()3}TxmtGZ}!Fz$3Q0nr%Ir|681;@9N;?;w0-e(nmM|lR(WmS=2S_WsDEfBcl0w zMMKwPuY045#5v3P2$x2sF8cncv35V?+w%}X*5!lw#uBd=%GBj&R3c8XTkX%g$h361 zZg;I;nT>GVrecdX8uf(Gh`D7eea+jd9_(`8$zX5Y^FlnRsFx!OvKJ9vW7kGKk?*&w ztY)=+^esxJ9%4v=%$FiH&t3@KKL0?tQ)Zi$VYTS9Jy0VAf; zNER}u6USvP*?KqK3>aypHXPI}ayZjWsI?s)fAVpKwSKB*YsBf+lvwzaD zYi2G`PU9$Rxl>5kzMOsHm|;1{1=c4VSc?!D(Tl^{RpPOun5^vv;~lpu^esDK zEc8jY4nO$;YcOvw{BPGG=%iBKtKQdl-E2>bcCDO?sGdqUk7`RlKk;hPAGh2`@2)gQ z(C*w54*~{*T3x1T%2w?;tPcmlG<5`6XR0it@&Jvs@Y#78L+=@gK;QoH_Uuo& zjS-x9w3Y`^H}oYr#6N-dX;A-BO7kLG)HW$fQN<|adVgATI5k-~AtMik!@z?E&NH~- z0R)gPzyX?7MR=R(^gL_z1+f3D$ne*LuZ(bTo^m4rvREho9x&+a!V}ajG_@K7ItA6B z%^g2XALeleXHy#fYVg*};>tA?O3ATLF?KEEmvHX_rOfP>BN;|!8}|FnuwLKtqh5jq z$4gDE@JUrs889U!dZPwfurX-<HTHhO*p`UR{L>oX*H&f5&Z_Dl7VVmb>VTl}dN(rgY zdh)zJ`ZkuSVeDB(Z0mUye{J=4M9~IRkG#q%y#r)48tMVfYVc6N6(TbKG<504-8K?O(k={ zcF{1b+j272)&E$W0$sw01tg&QoD>WFHv0FO{qZ!1|>+Ca2NCKDi$w55P zVrLaayue)sKhmQSGD(SNo7}>AZT|F+A5EZMD?$}`Qt2ITHj2_Cw$8G>bu2z6?ybf8 z{NpSP^L^;_A`n7@LVANfIiDF9bri%@W+)KK>WO>0IB#Il<~1c@mj1SZVt{}Z*!-H3 zj;1|$rj*)GtOOW+f7M(y%R&Z_^g00;RK|2BRsx^)O@q_kR&`-xWDJh!%SaFkJV^9n zEWpTl&a#yA*)SNxduFg;8iR0Zy90+i)+=xreKM1G}DzUehryb-i0 zP{|-ZUHI&}yw~-L4$w4;T_61Ua+2+bFXyyBr?=#`iC4n$a8QACQ4w1_0`N$V5I!)x z4=q@@-`avSs;AoR6~;hI((Ub(%I0IO<`%FkW(G&|#LtzM_w>C^gLDOQa+PTxV;Eo` zhBC!9tSiy2v2AIQgl~0a`!8R1%DFDu)P#4A9{XG`er!@;;V)z_Z_>^0RA)kwvV0%+ zAIhtBYAI|Gv}mydkWBgQF&KokEz%+Qk+`E@caG@FBZg`{Ye$F(GkorfRj5(WSr_G= z>-0t+{y57ad!31EqCo?1t8k&E!nqjY9aVGRKLxi@8d8clRZP>*4Jpw+xgM`fTaH?U zStQRCq7lAdyIRa4>php9TMtQ-Hy-%jU+IJaudtRIL0xy}kDb-?cxx?cKP8z0;zIdGqb4XybG%*hk|&TvW1+4s*{pZI9SyOu8eM>E|vMwDi8 zkB6%cfRyNWd_s0jndIaHLs3V}gVO`zO+h4Z+73nXqlI4&n#Bwp~gtI?R=gaoVUT z>&;&@I;uSGeFCzNLjL3-R^j>aA8?-UQ;W*HkM_ueS(f()j?aJ+!v9~A>XYUKSFqx- z(u-Q>R^;CjzE1%3Z&j|0PKaRUGG{x?f0f`2wU2!*_NEjA$^)PPmq|m##lyN+PsVC( z;x%xWf5E?+wyKPJqu-lsu%JQdM5>5-={>(we-~VRNJEH3O;$QBX#x%ndCbKBsyp$o z{xEVO4n)506h$8zvdDpB@7YDs0dIikEH1eQ6}a_4l-EkQF84(a?g;|@@V}M!puHDK z%8Vc?Q5UBv7Y29*e^}{9&$uAAuzEmJb_Qj|>!kNQc&C{JY@}z2WeXq_9n8T?3wqGJ z?~@nEab(`C5T(yWoqcn<(RH*)1r1-lHM#|c4!1V!^~J7aC_{2LW!EYgCh=G}#AIdO z1_D#^mT$G(yC%)Ra;q)k-T%tD4PmU|p|2hSo3udO!)rr;(03_vwZ<>`)Ub)@j1N@55k9D?6H(o} zb;$esm>UHeBX$;AGWZ(;^=Tbzt?D9eC4VV*?bHMvFTH|77NHO?Iz{-~16 zjYc(m+iSj=%t{&{PoIvR9Nz5B9m34g}sgn^ zq8p)|ni4`qh5wGOS{HX*T6sS+!%DN}F|#i*2q!ZIjXf=KphDv*A25=<0X@Gi2Oang z10l{V$xftw(8MXNTyrANTuBfS|CBAY(Ys@{RIznU)L8MWm)J(xCLYmB-#GKT8%jn+osPQ0_HV9V_4ywcsrvxIH_?!9 zU##S~%j@X0dy{w=0IUvuq@7$iv}OhQ7p_i%&>o`y0hWIRH4%r3xvZcLu(D|#69PoJ z<}aS7#a$$G)g1h-H;RUi4n-8mf+iw87O72vhI%h-QZXiqHAGph^-J$)-M7~DK0E1o z9#p1<_p0WC-_$sS&_$kXf=Kx=7BfBxGX*-Tzz*LFSNyj7#n-u&0s3X*Hxak< zvZp$L_-o|+?;(Q~!G0vKkbeKM z?xC#KRuTEIf!2!&eG+{+4Lpz^e0`0a>p(7B*I!$-p2mOqnV6!Hiy?J=U_TgoxP6Yt z_c~WXNZmUXElviL<2@>bpK8?GK#@d?7?Di?4s7Czmrd}zXtS79e$TMEwIfX+Ui71K z3#F)Xl^@;+&E8z%;fS$E-pvxQ@+c?-R9J!_l;?fVW7M|SWorx5zPKHvDrJhv*X%Ho zl`sBj4j=qt-m?hucfbHeGQ@@z~`=OnVjm|j_k1pHodqJiw=;066*8wk9MNuk%N zt2-IO%v5fhHphEoNqlwoTprc0X1rCO!QuL|Yw_;~23m23=cDpK_km<%LxX}O#9G^M z{LyoEltxbCwMrfYL7U#Bk`p%v2plg1K-P0uy@3+E5rTm0Jzst&)qxOG=UuiwXK%7pnJ}r4`9brjJ$3xRdKVlXkxMi*l22 zI{RRhm~?5VUBlj6v}sy+ov~kHFy@HQX@n@L8_>{Ko)Ov96L3rZZO3F#bN16dteJ-h zcU0!09pXi{<9J8WrP|cYv)S7TAe{E6^x6crVeOyTK{;)JfM4RbICp*(3)fte;2Rr| z-&@|Vf4MgLS+XKkGJdRP3&TmaNGfug3|Rc$O&r-RJyBSg&6y-+nE39%2K2Z=!aA9# z03MP%Wm+B+d0xbe*mQ6=aOk)>#kVJvn`nE+%7qRWGUqxkcvZuI*-4w}*mY(&D(UAHIhhJTK!cH1Wb*zr*tr-eAPXA{iq2qsvP~N5t;WzrW)#^7G{Vj%`JsK@s^jb9 z)6G8*kI3PjRjYDw(omI@*TpEArwzEYbKI}3htuo7@_hEl>N)4%Lp~}frjcriu0e1# zHU|N|iF2UDHnSQ`2)KITfi+$>6;Ov7t}q2ZTm`O&$?7U5au9iM)f2YrS2*2hZc~aT z61b@bXT4ZdMV#F8lO7e~+|qD&O_Tj>x*S6hvYII?89kk>;T)mjSLR7dyqBhyg9v5k z*Oh&QC4e^Ow4|h_s!k5KEZ&!88Co|=w>VjxZb)|lAXfg&nwL9%vbYrvKQ0qvHY8}r zMnkXNhILN?1ZKEZOcp_rGooVTmi7^yY{&1?h@v!j>No=pkq3PVHE)6F?{{ z&k%JBLFG0~w`o89_!5csyVn%$gxws;xGUP(i5zA&{4kFwgmmodyo^3Q6wmy%G&AaL z&0i`+H;DBjp;)2Ao&|)Y`N;+xzxH;9Ql2k1$x(+Fx+%spRmfqp&!}Q4CilFS`ufW2 zldW@gVo$WMVtsish~pQWsLYl4B`FsBj4v}{svSf9Gq{}JpoSD`ZY>^;1^-BxG~*SH zkWpXwaySBp%1{XyR~fneG9ULy+_OTpjv{-oT-H(o0j!8*-p8i|kh&#QQ()->4um>Q z^%eLfIIkNlH#4My$He}bN}mQVX9l_OvAul8n;Aj6>R$QZHPdj^{x1Mum8fFSN3GSP z_5YXh6ViyCw0?Z5hJzT}w(^aa;%bZyHrUVPtXvhUlR>0p$%$Djn1MeYzaX{vLGAZ1 zPq4&=kQb(M*;u%rPL+~mq;J2kTOj;*Y)&XeGatI8-7PFiiDcKHpA*4osz*}zHFGF- z9T7NNO1H)pNB34HtDB$cPWhq;*s&>n?!Gt|QzPmKxO0eGK=<&q-pS*_!L#$0xSo5l zC6+5uu9NP&XV)_?Y>bjPrdxo8>_+#V+@<4lQ`jVP=e-?Cm$-Mx3MD9JB z5CbleG(T4&i0%x2bAn_h7OpuDpKf1U(0ZV;|V9R>-XWX>-Ek8T(s z^PrY&vb6WSeRk-jE%Qy_=91Hqd*bf8@IFZ%FAwsPR9=Tc($ZEryMBQC|L!-Bl86VL z#>8vnez;q7aDTi9zMKYv{){xOv&PHwiTs2{8lDFb;`ByxEtd2pFuAB0b-@uZ?G61( zETEnwtk(Mr3IUYRp&BZ}^19B`2`Jom%RtE58nikkUa@}LReEs}Y~^)Ash|F|r>d%P zJkU1iDs{bC9fm_b6t7yp?;5dzE^#u6M~R5x`1d;^Z(BUiZGALdxDfzaV4Av){W4$H zJ8sX=$8R8R9*scH{d3>n2d>=|Oo*Y>^qkzgYxIpu`W)dj6@!<;AVoQy@%`_Kh1)g$ z&^m5oIGvaq{5$ti=Loe#RZznQN$kf*Tx!0yVw#n<7@zjRlyUl|W3ppJ_2A`G@1ORF1bMNnt@awn9jgIxC|k5i!?u$$t64OMnZ_rT+9}7o{@T?-EZU93RGI>S#tauG1x9@P+*Lzr#)&!9ZUEK8GtnLR1#H#NT6YomgB1SB2u z*r_+Ee)rtn=l!N4j;ldlX|<&+`lYKP^c7d*!Ni=-*eN56&-DwYAv8h=+CoZ=_WQA+S_i(>kpDBM%Y2tUvD4Kbw8(*7_{%Db1mY#v555_xwi>FK3tRX zJPGy@#a~nYMYX!OH~mKz_sz*Xt}dWA^b=#MsV7!SJ9NM#&j4Z zxNjG>;mMJs`qIFq2c1kneivxtweF=ZWraXEQeld|f2M7oPpD0HUaL%;DTD)R_KF0i zD0E<2&~waU$>Sa_g12}jo$ZbsoID?B8k<11|Z~r$Yjqk8wZ4(3ys*=Bi*XLvWKy;JY(!foJ+8%3Y zRAGTJmU}rN^t4L77ZO2hr~9)6t5=~(n<#Q(D=jQ`3oztfOvy*&bnTYd{ncTA2^OUk zD-#e>i^g#yG~%xT4PwsOf25Dmq4lE6q+FWlL51{}Qx}@}$4z=&4?5ccV{M&^(|)Yr zMN&m6y{|h`?4dgWJRHmp8K7V9&r~LeF;4FmtGGZpzDtgAK@9%=j@igN5Ws<0ljcZR zli&4l9<|p7IV=Mxu?qe9j#Wk18PlQk`!Q>`X<|5}D$mEWbf-K8ugip-1}=pwi;-K2 zSAzvqdOEhkQJc9lEArRd=;%vnES!M}S#OuTU2XW3*eDDiN@yZ~NeB_b4X#f%BUdlj zB}l??+-vM&%*d5!s|0l`FfWgy2vXAO#GcMkAf|_EK66nU)zcp;ESP7(S$$mqF4B-L zn4X-XfIcZtZSKPQLVNYu@e?R|oS6G75{`Y5SAOfKXBWSrB})LtYvcyMX`; zIu~^Mzpv&ZU>>{ZJe!eGqvz0VQj!i#-;H9KHU2gi2M4;8ZpOd_K4@8rU=;P)1vh~F zF{hN$k*nWHX5lAimb%FhDWed3%U5G@Pp!@D1T}w(&VqlEs$hu_>miyB0=G_~SaM&W zIL7XBa29KPLP?^ifb3_uY*zM?82O|C5m`VYaX#vJAwlje0%Y$>1=DJo813wO$7|(k#ilks3AWv)HZ@4AcRwC z*=p<+>`Uq%Dxt@y>we#QSF2$3KWMtc9GD*uW-^Y-+p<20+@j}O(C$6pY2bv zs47xo(B}IPQ5(?Fyv(s_{#~~!6hC!4i3JzRE91l4eH;CCi}$-(_Qp%S5Xo27a%mmr zqtI?t$sh5^nEt9%WVIoMOmGDjQoS$@d#d+Ts*-lWt6g1Kuqri{%|u zjutE+scgRtzdxfZ&$5&k`z~_6Qq`Lv9*!`e7ZY4}z{wQnKZZNr0?r;{Giv7H8m>>_ zWP{sZcS}K`hD&Nqg#3j(3=dFFsHK70tmVaz4D6pq>An&fG;Ku!a}vC8`f$(Ifzc(5 z7oZfDOe2hjFAbQXnavUl;G#_b#_p z6M|gd;21NGn*E#k+6{Z>{h13i*}-ndJtc02E$u!w6)kaLsdUgXCf8T!`rz*T-*PG@ z(P}qeOep@QJ0`^WA%RLot<6#6aQyx0#ak<)f}w!~_Jv0F>(Kb$rqpE?p4Ta6ncqgU z%Tb_Ixip}_zrIytHy4wtwJO?dsCrFqlFprYSyl{xb3UWt(W5;Jn5HsoYF@sn!jKA< ze$JKu>(f`K%acx61^Gv5kklmZ-I)I;>+dQF%QQKYv!qM+0B-+_Zu+5_Ap!n>U*lI4YEo5!H~>I@~-05W*Qe zg21;YHd>!q7o%HhA}rR3PaCPj^`SoLt{nxNK|bOfll_B2(hnc;+dv-we(A^UUC6Y0 zYByX|)ZikM8_TV1o=Q2hBqSsdvx($O+(b>w?S#`E9>Jcd zw~GeI55*A`F7|SQ%onJY``>D?(3pkSuhpMn+6(oJAq>G6bI ztw02x6$GiI{w>nq{9$9gfCeurn_DS3$1ZYZ%Mg^UiXq}^Rmyt9zd0U!%h;$ZJgTD2j`sA!zn9k+#I z7SCo72uoRGH~Bt-yF?Q2vQQ#tvV;jZQ>>~tdtg-c=-*Oje4fdd$PJ0^+zJqjGc}xd^k+FP=^hfmL^W`remt* zumJikbz6u-rce2sr%%#PQU0rfL4~+W2-653{bvR9ED-T*zaeGSh*ItyE?lTPc6y1f znmJd@jd7|qME9Mi2De_8?jvw|@b@)I`sr}8i(WbR?F&DIpzVlXhelXP{Z|4~lRhl> zZRdZz_pCjO!C2C0$_(}2RN3J07T)l)ZgZboQFc{IG)*5ovDgCa^;QN@I~nA(--!Yx z*8Lo#`$<`h8N8*l>H(z@E8=W6SdUNz5uhZCoj~1veG7YgK>>w}7@c^pS3x+4IRkaj z8|nmcZz!{M$?kH!@9mk%bT@_m%SYTj^4ohFDFWb(-#@{R*SYa#PG2sXn^Li0P`4x1y7siNqKH+g=t)K%P zs@%_j96ntxetJiN?J@z};9ktz26QP^>N5r_r|A;1jq+IBCh6(=U<4DecY{U zs+Vnz2%wIGW;2}IB7gnn_Lc}ejjUUUXdPVKbw{=GbJOJnRX?T8%Gs&BlTg!B>AJTV zrk49jk^}v}`?P^_*H0x^P>G#^GaG#$-Zd^`Bka3t-6>y~1IRG}CPr7lnN!*|2tvw> zfgAe|uUiF#i|Qp}li^92>q2P#lZfte`%?13{N3Zj_+J9TOcj+~&0F?vzNM#Q&@tI4-pj7*{oCdd zip%v;NwGo&E(p}7mf^XZrzgSlMj>|ScT9T8vSnR24Vu7cM1d|PD@$OC$;~tg z?lgcPemz{6P@b}-Z{+m;p8Cz|!z9>p?aivJA34OG7&bb$2Q=4CpD|b-^BE+wG{vM7 zUVo6 ztI6tTt2Q7sxIYnXCSs7C0A-Kz8(%qT>iNQ@X85wZN1uUPlg;j|?m5=&4vgaS8{c>4 zg;4~Vvjj~HFDIJAsX9>mu`cOxF52^7au@BR?rJp=@JRKT@APD%K#E`6tQqv;rg}mv z?_AlJSED5fjI}UhWf{Cb(x2r8XgiqDMSxH{H>*IQHs5`^Rrw!m`w!oOo{5DEW4=G{ z=E4XPhz%7AcXjWI_+}pcL9e04O`x_X)Hph_REzEt(C#jFss5bB$_+OA5@R1aT3C}a z5BgFN#b3cQXsY+GrpyXwxkXq{M$qK&QQCd!b!mfz>eQ87)e36{+HNP0&Dict(PFdL zLSyO)T)Q#Nw!Z!`XaH2N=25$egdd#3?=Yc)s~4ja>~0%a9$$69geFWc%#&x);YHrq z2q&7CQn$<~eO`Osv6#Po*~hB?u75IMvN-3A$)y_=!xu0A`#g^R(6&V$S^OFtIwD(G zDt3c(7emNtYs6XT4< ze2MyCLiA@_HoKtgwkeDzMGd?kwT|d;ZF>2|O+*NI6!m>q*5frx7zL~T=j9gUhtuPA zK`kx2#-AdOoV`^at`EP3yzTRKTNR#`VQ9&|YnNV)*GL8w9Usm}WevN}I<>DSiu#XN zTRr}TJ)iEC@c4F9c*w0et9ReOfAB}8Jec6qT0*y+){dX9+xqRsXc|n-W~E8qjpY)f z#rdDGk^q?yR4WTMu*k|uFK6f1{<-r6Rt}OwLHyLORcM+#hcQ7;xbH9zj=hgXrze;( zc{?-TA(PycrGRvvvO$J@_)7*4D%-L*w%?A~df0pkIH%||DedxIafqkRf+2d%w^JIe zKha~i2a~Fvc5fceS7+nUdGaPupnNYu&{rm4`vAdaf`;J2cVdLg`qy?pFvfdI+++T`ZX5@w|8j2|H7VbRW~>-U9s%eNa7|U!cX0Ib1+M9&mm|Rv=4Wq zKH3lGGZdv6t#0b!D#zrWCEM|Y@_ig#D{V^R5uW^*_mn^T7LjJkUdc1I~b~{~4)Ws!qYY?E{ zT8tba+#YMU-l_Tr9@i6=yf)H)WONtjxdF+bhJD-;RN+GXxbZgLlCs#5M+}BuAv~2F zoC2rhhRxEPJluw2;^m*;P{z3UrEg^L6HX@YrlO)3@Q6KbL~z9l$ok%Sp2??iLd3vUc)@1x(by4{d~ZuN@WKJp*^02Jdx>*NdaUC&vb>;62S`?~MvW~oPYh(Q#kw5aR(kh4t* zANH#y4P1R)bc1Qxv8dYS!$dvmGi}2;fkK6MS&81&Z8K1r`zzBAeq_KeETW**pfFD1 zB@G_EIrMPUAjD^-)%A}S%SdkPRsHgwh5bJdGcF#y)oGMx$Iat=@6D-1@Ju_4-BTxh z-!?PQJ;!^*u(fnyDZ}TCgLakjYKXOTRzEpzBc28-W<%OJ#xrP4W7ZBT2iFAcLOq3} z++n>fy!A=Lf6ej9XLn|vS;1&)X@nPTTu_wp_>6)kzmnfEm_78c`b!<&MGPw}wRod4 ztPFx|DFr+3BbqlVvtAtBZ_d_NZ=9_1>k>c}+ZZp|s))TkFzgEv6cR=VhEqFaveFJ1 z2Wb^V{w}0scXe%2U)1I5WL<>O=JIU|@Zp;?Iq~6I)`u2A3eE|$@N;yx@hM@sOQ~5) z;6U@qcjmP)KH`4Cj8m|9WlyipB1lP6c##9QC+=p|4PxE%2`T;Me%{sBb(Y}H)Y7B=jlim&av?M_#P2xp z*?T-4cbfCOH!*TO7q`EL&oirAzIREGnOX?$i&o`aIhEoPyg29j_k?V-emdfGP^L?| z25_jM;oA>aYJ>BaBZ+4{N(~~;jmIQhPgUt3oD)E)i)5;QS3eD84%|%w1mhY>^~*YK zbKs3{H-{JK&x9VUX$GX;LAkYKA;L;~%HYu<@mI&-@AUnuuVJErJ@|f`fsaNJSWx(J zYtqrqjQK3t#WmM@xBJpxo5p>(Lw?IMI0$lCZd1d&2aPniI#+jFYm)-GRn(nC$_!6G z_Ty#01y@Q_qw>+W*dCh>8aH}1I_=HFKCGKtdLFIuM2tb6}_WQ_6u_iyT!X-<*$J=Im?OmUmKlqs~BYJ=sZF%>eiBdIO zlhud)O=w3KlwSq$Wp{%c?{znz^R`%1ETq25>(vj9Og6}?9jfv8`T3AW1pe9|femT< z3WV%kY(~FNpLCqs=?lP+73gu&{xFdNso0z&qPL4*u2Fsw{a3J z4m7D22zk_JIs0N}N$H+njWZ{od+hxWkgpy*5b-)l^EG7Y`!lqdGC*NBBdoblfC4Nvi#+n~@;;eQKRfUvGm z!$~O7=w2)(bM0|0>;9vl#=8ft*9QgN#-=r9f#?-5EbmCCI8{rOVpKH#TSQGr^_R@3jqMeSu}b7#** z2vz4Y!P4}Npl_um@VBWevz^o=BqDnv=MZ_}CUa>}`-{PfqZlB&!si56c%2BId zqLSmx^c7`Xa4ui(tGwQo&y{ctAg*T&Qr?4chj}{{V2We-dhJ>(+B-0b8UKkVZjt_P z?S#)(_0ZMR=i>XE>iN?PuCJA^FfhEuwcDBsUZX*c-x7c+Ccoo3zAID3($xje*&mn` z83;k@0N+kr_Pxf<&N*XGTwdq-&D5>7~I#ioox)8oa z`frc8=igi_wmMdGbzI~9q?G@fP`It9?Wc@v>0a~=D-E9Oq1&kQp9L@LhlcOV46=;w zGaY-08h;aGPu5JeBcKKkSQ`cI{~uy%jO=yozl^@8+1obhF2Q5AV)N!an`SnD%N9@g zXkw)?zuU7j%|C2@M%7NWesDhDz_p$$u!nK>bYlJHLjy^f9VN;5QvA-(p&vG*vSx&U zG6!_`T%N0ad$BeBAFvUmoDj+CdF0)6=FnErVhTtzp4 zNFKgjf(qz?2kd;1)18caF#+Y7@P!CTJPw zf(`~wNt*c9QF0_Rn-To^SkcvjCoW}g_3m-HXWa^0>lS)=BApg@dX}1+VZ*Va^?%Dm zXt|=>k?n(2iS*J5kq03=oMhL0>C>ssP?Sd9!u8F3A(U+C@6~>~1q&E^RFVfsEFr@5 zy#1jr6tk@ACzb~Ui^O#6Lojv=L%5=S)rn2ywVo;g;R9JZF0fPbz}W(Ehq7La^JtuP zeekX5G)W2&&0=H*7;OAGoJSxVW;JWin7-FlqrY;nXXIG@YBstsICf7yUk0%5W$tn zqQN;7`mf!H-@|!4s>)?NV?84;e#DuTZ|t9|3RhE`)hJdDk)0Q>0;n7qhk)WT=h|jl zPGTGlK!eZ({(elClUfS8_x_#e@zEz2>165~b`? z5M_O1JAL}`nw%CWl$5%CmD4$&%jm^nfVdno;!kZ#qj`URM&8-eB|ebm+Y|6$*R6r% z_w1#uzs2*RD0#DN9qCj7(7gMuec16X6Ie za)CQ4a@o6*o6-7y%395G=Lp%{Lw400tmj#vM|ba)3K%MKrdPR?rnsyn(Nc){DVh$N@J6*y1f%f?|f7XIm!-pKuLATEXuznElBrL(QR&#fS&W14xKf4)MMe)=jN@d%%XDw-+wDpDe_mIV*e(S>302_a&k2RpYp zlr%rrL6g8f>~zOV)$`8+^DO_gDv12laW6F?<(;?aH+BBe%!XN1OeTBEyd?*>~Py@S*+8Jj8GHrF?RNzLBU zJFVs~)3HUWTLF?NGzoc~u`%{b=N1FRVqwry*c306;NjLEmiFS!>QMkF`wpYk)a*Ec zF1Jrs5L)W9lJd#lPkNW`D!g-Uvc~K@Du7awimtRO_>`n%9IgbYeW!;Rl>m)I(k%s( zF-HhrfqIN=qk%+66B@uF%cM4VTS%p>jG%ku1-o&RwV5mY2XEzMT5?>MbS&N$tAQvP zn($Q)sI}6Ft+A_f7A-VLur8m&7wyuhJO0A-$uKN4yb!dw&F@mUkVm1Rf5W6U#v>aZ zDq-)~5f*kFWw6IAQyqY}IMh|Ru#^Z<3a}Zg%TYgbqE^I9Jm&D~tEv)fRID2o{n298 z-(qOFwA;pIC~FK&r{EULq*i{V33P3l%|ESQaZ7z6xgRfIVg$8pEPnYFhVTzK%qm!%3%Q{xw;$u*wc(3$omMW_s2%KuGIN zoT2Xh-1gE^B>Ie^DMSp0y{ez1A5<3i%f30_1}%yzplqxKQY5ym&^l2Y*$;1|feXG~ zH}m%aFAWBlF!zB&Nc_CdS`i?4q;xJ2xCN;1Wc+Cc9jS+PvqQna@k=SQ4U_ME$qrF<{IQ@6oN5lf0v#s4hhsBC z)m3pP&jb|Ze}zZaSGtziZ&h2064TxJ-VoaN)zA9}oYPJL#*Io~+B;K7Yy=TXfTD_+ zN?4aQJ)iOKf_r7K!WOFoKKHaAt}g4)yb<;E78bPA_H`uwaHQ1{C% z#9N2^?GC@7OptgWiKUX<%JqeHz~YO&ItLU;@aX@3!CI3FyvQMf_NV`q_101-9D!d< zr&{GiremW32k(K;{VqM1S!4Z?;77^OmUMLBm|HM)w6t$41OGn69s{kOt%<3CX2j;) z#uHIEVxkU+))M$PqJCr{p44yu1-`aF>ZO&7P#+dMjt@{=8qQt}$DSkJC7!8K<(5~~ zm3h_ZKgl6e+2)jQ69Xd8VE!>G69ZzlIZVdqTDzKl*fB%1#p`YxH*agS{G<8mL59zl zKf7~#j2p!W!Y-75_8ot;+U4H;_CjVvND3PN*&Ct2xcu^POF`ZDJX^D!2Przf_ij_} zMk6Q&YiZZD_dLMA*Q!9<=3J5F^wxY3b$<0A+vm&a@cui4*-l$L^+{04c(f(GE=lE? z8G%B+AyZD*`RJaaSC)DwCJ%h9D>qDUTyAD(ZTW%@#aaZhj7n$KxYbk;HpKIR>Wid3PZwIv0BU ziWXE4BZeAcl|oY8jQe#`mg!tJ7prNlvhMSC4L2cGM&VY0 zHtxh?AtZXV?hW^a6b9Roe}?#&D=tjGr)AaIISjV#p`7;SL?6D5)#J&u#RwQ2ahnxr8O&L*m96^Z5lvYb za8jc6%UgRq&Yxa3cM48CDxzFQtZAu()Y&&}o+Uheq~^FJ!BObgpT-{=DJPo?x8~ziBoM?WMG!)Q%{YS&t$LPDGtTw%-6`BrkRwn1& z)qYi!f1B4Qv2U7k4)n<-Rcg>|j{SXu3SUciX9FyUg2 zcr-ts^h-hY;v`Q4bDb_rT-*$d6ggdg@DTlt!N;JM)%{JjV1v!LV&QL4#hpa9VK=ib%}QBG&YsUEfLL+De1f zMOAm$3?F>3PXEX6@N%656;7($FNaCnS+|zO)iJccVMp+WtUpGdqt{PvexCTEW)ai8 zZybCtjcJB@ne9P8w?gf`eypLfFB{ELvB{L=WIl5@?G2W)(8iMZlLF2&W?h+a0EXeV zBSdr9z(t&84`%hFqcGgUJ|v?U-Z1B{itB!GRw-@IXBD-?h$qdfRdzRf3Gz;VOLvbg zw)bJzp{1k-oZlyTb&qgWVmiwb zaf&0zYS0PtY5udM08i>kDf`8+N#>aS3}s9gu{t3E?}R|6glJBw}Yaa&i4 z$?tT6HDCKBfLeLn$J_}XEE(l7x68t1mMehfd@Ju`M&>s&Hu$M8s^xqglF#?>625ND%?@N0?S`Q&PhJC#vdxry zM3hci+3rw>l?c1IONqTD@EI63tTWg7hEhgQf-dY&D4sB^JFMzo&7XTf!1L6AiMvVp z5Nr=~>mzL^GO}m&@$l%v=7X(`!p&7wL^#v}aqw0f@qFIRuJ*umX!f&4qvQLn2Vv6n z4{Z!i0-qm;-iN#v(96nz1_D2AnLf8Ve!uLMY>j*W_5BNbxqby_g%Wpd(f5K@holO+ z&+FvBQ&zrVDTxS^|5kKMlA9$LD+Z&-t%sC5PCeV#CyZAx*ZJ@|Izl9Ty5il{O7byN-o!Zm#&e z?|q;6PQoz!f;M6G)P`zCJxN;(wVXIi5m$0b_;B3Bp0y}#q(U_Gt2-EISreZ%XN{iH z!XZ-v0D!f)jzpwm!xUww0QfE6hVik$p*T-dxtKbt#Tl{=uEKK|mk*4+>i!YzIrEbJ zFn&}hUJ|1CAVbl~)a56z_q}ULw{KK{Xn8h~m zd7;Wbw@-nP1O?YaBE_>SB;gBtLvXb;Tk@v6_L5iF4Pkt)c*ZO+? z=VG|NuWO_dyJQeeFUddbe=A^-g{1xfG(U}2?L{t2)e9oZRe?-wHb6B9yK^EyP;i!^ z2E#U&o*C4?=>nw+40yiZS$*{fDk+XCnl5y?d^4#e9W5$;^mHOrG1dVqUufLgw*vcW758w7$n%<0C7|_9lTo-A-md3JZ6F+;i#^GGr zwg6ju`X>X9go@EeA`nNj=jU!Y5VU;R^x-!HYJL%YA8$_H+}8yJDW6U$&N&FfrV^N56 z?9I^`I#S4#uKa`Ko%&Sq@1F~9PtPRJevaukxcsub%i`@n&M!XD3?{}lm{}PpG@Va_ zCS;pPXdPqs9AFzrHzwY9Pz%wJFGrw0ge$DUH?wV1XP0=}_>C^Bw4ifS&~tP@zFdsU zzU#6#nIhO7au+d5o#Zjq mOBRv$p~7EVfBz)=0vl0IE9f5u?!W*59v956nC2V1MgJcizyH+$ diff --git a/Documentation/Screenshots/Watch Notification Bolus Failure.png b/Documentation/Screenshots/Watch Notification Bolus Failure.png deleted file mode 100755 index 0ba07161a8458ea05bda3336314d35421e587a16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36176 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 diff --git a/Documentation/Screenshots/Watch Notification Reservoir.png b/Documentation/Screenshots/Watch Notification Reservoir.png deleted file mode 100755 index ec1584ec5a797871429d76b79763ed14d13617db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38592 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≤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 diff --git a/Documentation/Testing/Images/scenarios_menu.png b/Documentation/Testing/Images/scenarios_menu.png deleted file mode 100644 index 604b404de84d74629beb2632950e92a9a09857c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153072 zcmZU41ymf{()Hl(?(XjHnxKK8A-Dv0cXtaO90CM)cZXoX-8Hzo{GEI6d-r|opVcr! zPoL9$q^kDbRfH=m${@kx!-GH|q<6BCDj*O9DF_7Z01FMA8AA5s0D%zSnM+70zmt$4 zRd%p7HMcSWfn>vzG+;DUhq1FhsgUJDl9N(hQ@@XArV7Fq6XjokeMg!bl!_{O{4+1W z5(iCL!%3|VN<%|*E~4e|FmK^W0xc=Yc@m3&-d06){$HPCs_9x7M}}@TKA0K~o z36YJs2Pmc6bzTk`UiY?Rw6Y2*svYHOoo|EbFTM@izH&ZUhP)v}AFbmV*>$xzj+e() z0%)n`LYkDm;$a|E3-{UfgC~jf(W-q9lUI4lFZAMrxkY3pbHO?n&nM*$=GFO%gHc{> zW*XkxjM|G8fE|g@9R96&B{~8p--$z2yqX(oH^LkhV1#p>U^?5l}q_f zm1T~K2{C+r)SGTBa{7Mzqk(SFlnqpMaT~1|2M!8j5Q55B?4T^dHu|jlRvKShxc#Bm zxgjbNFDYh~AGifIEr?HaWpaKBCVPfr(+|d&lmOO0a)4csLW+yre;!g9{MAnuc8B6h z{A0ejGUN$~Oxa;6!jMWdcCqPBz#!^=AZ;8>Hdcw&*Z42P8)$W5Z)lk)j$?r(gil4$ zNKBLXk%p-$1suok5Gg{?DZ)1;WmX_j`d%)+xFLlc#yo9w^e+0`(g;#Jp%bH5ptZm@ znug(wbd-cbQTsFFlIf^A?xk>TyTr|6pmal!itG%eHNn|+5BADh3BnHC2C2tTJDS|+ zIlh&Lu(VWM$45b-H@NRLX%5yV<9!m& z)QhZdR)w*^cg#8muDQTghSlmv^kFMr?OL`zA|$`R^l~^@aLc!E+uV>|fX>z0?!@^e zhnN8qo1rt-Pn9&23BxQBUd!r!7pJBP{dIwj(N%*-50v;uaX9huO=|WH!m#Xau>rNC z5yL4oBm~*Jp??&V6qY#Q38FL2l2KhR>ol!TQ^;bgFfa!tkW9lBbWI@lnoNO zf%&2$_H;?2BA|=mry{p91{`TYoBB8FqtQZO>2ocBO1jmnh>oE}{9baP2%%}ZST+Qk zAS?U@>~608%yLNDpaWq8;!yE>M5E9U`mpV#SI|f(QQ;)=;@v2bhDB@8;POQG$mQbT zjhR%Utt1ZPN#Z4j;C2Y7!dJwJN!y3yc7!5wmwtd*ge>K5E0ZKfOXr3kaB>o4h9~C~ z9K5fCFPFH>8#{oz7W6X`B3^JdS-g2b*8hfuCA=ktDf32ydK*^ z&HQAVzw}1*D6^rXA%R=Qv!p@Xv*4EbWP7Qx?k#Wfi%XrpHh+0s!&h}Bfp@J+o^oct z2B(^xz`ViQL)PRw<$Wt8CaY%+j^yX*CW~kIavVPtDW&9D7L82q{vMw%pA`D;Dd8#_ zo4a3#Q<_rQC~h0O#@Al-Na-!`!s_ksQ~c`klJK~S7-cZF!FnG>6-5*^9YqY0=id%C zPdb>>vjG!`9OxtA-Fp!-9MT`c6(WP!nuO>h zNd6jbG&ejqI(`xX7v5(M58F|8WR7tzU85C4uL(#Vd-gOd_7UUAVe^EJN$C6+nJbx; z*fo*I20DvFV|-iwL8sQ=P}5)>jlv-gjY9vGGm@hxY+*KhLJbe zgN#0Acr^=Ug6ddDn5FAeGwf3;2F+tNy$-*AuF(%$RI4S-3R#xa$2uq9cpSML`4Awa zzvFha#<#LrRBZo>=Ipu5Fa7{$w$4csH{)lx3-BxUTOz@4tt-!#bTizF9&s zIXTESZ(qAjMKd!z{ch*uw$mh@^Q{B6fUV0Zp#<)>fHZrd%_tI%HBN(Eyj2AzURLAqTHeifqX`qCS&{-4E?#oBUO zazeZ3x&t;cyOkDVjtOsdZ?912QMHD;<9G-~#s$YOlo>h6>jdj4IgSxEsIQgZncFM<<;e*=au9WOAAPi!@J$Gf{S-r8vz=1L$LZ0(pCP-74u5 zc!&Hh;`^;}=1%eO&9JSCxawS?Q$dVeW{QXK7^OnS+&9JdN{Z`g!mLzQKSSt*RE3I? z721Wze6%m>9H$iu_Z39gCCs302mBGmrQZ)^MWM85>Jr(KCZubnFHY>A^IT@b1wb7^ zwfBHFwKo&W{L1RJlxiVr=1uM*0wk02gxO?tn0(?f(rUT(6>O|dD^_yb659&B9DJl- z$-+A*H5^L1+H#t5R1X=M5?scv)0+)UI~m_MsKyKx4SzyF+6Z|G=n=b!-V*zu|3P7L zS!=i!8S@BBE`nv$p?07)st>9D2=1AWNf3hdz zdfl^XbI$WT{CvdE2o#2U2A`L?ljRcIP<7MtW6j-qixG=0i{Zl~%YeCK-O|PeW9z$? zcSqmmYv)obed`SdLL8H}85(WA+kCV-E{UkHST(LSzbQnS%{#Q@BI8o1FRUN2T(`ou z>S&{KliOCWEywz_?o0D}y4Mh9J?8Al#dMCU-f5y3}ReiP1JX}$+ zdeN#h>p4Gv#LfZoKm5{h;9Y(5^{k*_94=Fa1?ID`J=OJ37L8_&3BAbXId`Go zk7ER?woa>KhRk~ z_?rsNpZ5u2^hrJn{NTJNBtR53WEB+>l>SI@$%x|0h0_iO`nvn;*9bU>R#`+65eaDk z3CX)Gcvu%|<3RQ1L4{7zjr(4)-#$&N4b_Y44O$iC{j%O@)(>zCI6GM_M-T{`>dz0@ zI~B@v5C|;G{G+Cmrh+`bk*zhefw8Tj3A3BE9dI=WBk5A0^Pkf!?A}^{^v&jef|BMCT`~c-pR)CpJ4$5Wcl+A3mY>l%YXX@nhO3o z%dc$iW@4o&X>M&|;|SbCn3t7R@UQFtzi-dOWTsE*&M%KQ zNg9>9pG}@_Pm)|tSG4TU*4nY);o%)z&elHLPh<%J%%WJW&Oq(}xg7@#4fXHC-x$?T z_Q#k9>%bzRwqC*eBzSuDGR=)P^>S@z+ndALyP0BDGuNxVF;^~|6*rBMWG2_y@=va| z^%k@DU5UOiAUH3QCS6hk^!NNiYjS?y2lu?W@MXTqn>;MjI5_65PKy< z-A}(0QWh1j9qm6)EQ<}s0~TQ2;1MN8D|)-tj)m>Es+ubvyoyRGz@Sml7Fc<|-0cjT zz{F)ax1!SOa#D^&z`Zh6rd3;hvQ)o3l`j)(4UB6!8s6MsljO)j_k{m2sQ^;>r$;=9 zE?)`6gTE*MPH|q(-Y1=O*6~z<+$ZfF7VUvbaMNhDsDk2)q(AusruqYpFEE}%QRA6i zh9D{D8MAUqOnl9Kl8N}hJGYB+$9|K|hvq&@^c$iAUnx;Y$-fU$Zhy^fBxKFwoZw1S zgt^%gSx#l%<6zoF0%!CR29kIOX2zAJ_41nEHEG+y}^EUtR6nSKFkmHpF>m~ z)ebUz+q51AJixau<2ZnK5#FGNSp6%P-KMr`zH~GfDrG5|ta|VJnms=VWK9IInq0L~ z^<^@37k}6{TFGOQqha{>c)#G_;xK(>$?|}^z(Y#UzDuBR-v2|WAw(r6p;|;xsHAj+2#Xrae{3W!9+J@BkckKtqm@k7Wy_WW za+n_W>#p6hwtwnZEZ_|qt!8T@5Jfk-QvsDm;FnPZnzn3NlB6MJ{k$KfEd0GVV;n;{ zy1L!DbAJTZY{$c1`XdI7;tEXn7SpEsEI6|o6IyRI2_qpBEw3hWB_@F&Gow1ha^1gk z;s@(Su@Uxl6%|w9qA{}K6DsA10hpFfsd_n8b91vC+DZpxa{O*6vBwwTmHLKUi$VUa zFtq+?x9yYWM946+kJSj`yvm%Kkx;s&JyRdNj~A+ME*dBDq#|zv3n);MW4Nmv>cozv zjS?%7yFVaRs(sL%i(Uv*6aUZl5rsr2(_gKpm5tD8m=ld+3^Lhq)s)8G+udb4U98=| z1cQLyG0HRyx}Z=*go`csG5M7g3@#25Ok5CBTY#3bgxsy|7KX&@m)GO$9`I3#W-s0&gx}K)>4irAyAR;tSbt@z$7I5OSqDEFq7RFQlD!eA1lFD_#+aQ#vp$*uf1ZYa)Xj@GdY^Rdq--CX+r$Tp81!+(U5?ab|X$n|)T@KSA#kZGW zl@VFbmuXFdF{@{8>dvB@SiW;gM6E-{_>Xy``p;lg8AA3L!Z1>dmenINYdfNK2^T4( zb6=q{)VQ5*bX)3UEk+b7hiR6={u~i1h0KnIl+E}R5d>qz`Q_wCh+E7z5}$j6S~v{q zxjf z=ZI$MJtFVxNd|tWgDO0+ljTWac(mjs)bQ=zsjdZzGStlvFDZIH#T*{j2iU4biYH;s z{K%qKGCZ0B+V+abiOzdF=bEh%;s2dRKiKbNU<2OAev#_JW#o};lbcb63hCpL@7J4A z$>lt64(oGe!+z0|lWkoAah9MoHQ&N zbh&`IBpdk$VSS|J{4W0-{T$w4865F&1$$_I&rNJ=Ip{Bkrq2RmBGgabt)UrFlkpG^kRUCTvPkoi0&j)=cJd zJTCPL9j&9Ac|F^Ulg4$I&o##Hlwe~|QHh`O&0}~S?t}~qxC3PQbT=OU$#?kY#2bGbu zv)Sw0HfitXB7QEX6a;TFSNpg3pLAd{VXTgGZ|WnGL%>D|HN z#wp;lFB)NxvS03GkCQwGsaun*Hf}@3Jdef~6Fi zKFt!d8TR?4Ha~9^$fXdsI3LYbNO2@{Ab($}1&8=Q(;g4Us_6|gbyp#+%+F!^@~cQG zySOOJyXyv{H`j z->SxNye|xo`G5K*-$?4xg)Ff(IMi)2QRrzS+m7Yk3d4i_sF#+We$-@=^vP1T8Iu$h z`~4p{Ae8qU`G4X70Gi^wz@0{xLLMZN^~rnR0b!jWQeJC1M&Ptb4G8vi zbEwBG8fi5@XGL3wNUDpv zm_VZ>YzRCD1lrLg^b_9E2WCym8$}h9|FxY9R9ZjSMR3a@@xFklqow+zMp)%+=Y!nP ziek0WIqZ)gnRRMve10L>cau6CIRuMd6{e204Fb3&W*LA?wtXI)13m?F(fbV_wEi`C zRDVg>g#}dOpW5MRGc=7htB;mVMhe1bZCA8RJPx40tUvfyk0(CT`I%aXYxYr>;;2C3z?c#Vo5X0zICmXN0lL|81uKrD$b zIrs#Op-MNl)YDhz$sff3GjcFA*&xv88W+Gzm;>Oq^K7nsImP$&D%+Ru^?q9;UnK%{ zAlO*V&O;pzH4Nc4l#R%lS}|h*bt_*WU|eaf$==8}EH-4Jf>FaS=YM?=X*;Z_F{|7h zy}S-DSg}W^AC>WCI89a)diU=rgyE8n>oPP_sja{SggLP)cMf^x1<%u!W*UwK!VBV? zs?Qh1zn!y-x&C+IyCH9T&}$k@$G)keWxVo14nZ0ZYll3DbLTA}hb0DVY^6OgGeFA5 z-~R}S%^6R(?Px~n8_Z4Jd`<)qoAY3Y_Cglc%jl?_d^z@iqa+wwSRhFC#zxfc@!I=t z^^PMf?rfa@s7xe6a_H6yl?+dWl?9yyk-qZku(Yzl?WBGlnn|-tf9UpPxz&J#L*M+r zc=`_y@Rui7Rt7LM6Rcu39NHz_mRJYh%k?x)T&8E**{a{miG{9uDnb6^*t<%S3&;<^K2e7z^7 zaK5M);8^?ciR0o!)tWF#pvjEPlT7!-B-zwRv#36fU40Vh08DMsja zfrZWTF+d)h439=Mq7Oz&`m?5xb`&m~;dxIm!W-hq;43=GqFrn;%Kxq(86+XvC4-^3 zZ~*MX<0!|3&O(ie+(3}Aj!T(5CMhP#%^I)*dv7mizOnZ&ck4=__XqSBXbx$I<^ST0 zFi~!_s#DD{I0OAh8JcV_cBvuq(VWxo2V<$j@Eq^`M2+pfcDLwx->6Lk=IMpH_rOcA z2yhPA&X?Ua|32zZ@gXgRdDexMH1{ z;jNSS3V8c^jsad`Y^~jM^mNs;YJ7h67KN?l9%ME$=&aZiLX}j5$1cctz*7XXXnW(e^h`AA_#5HhRXX9CyK71tn{S$|~yL%yk z+6z7Jhzl*}EBZ}!BGBNYC2`>5?qQkrI#vXq&n5P1Cxq+uf-Z>4r~Y;Zi?TVYMdN#C zzMZ|-$BP_vonybpemFtNa$;jr$x0eCkw1IC?xtjyA6)}9-87DDR$C>HD4Xi(Ry>Gt zVr=Y1Z@t4?r0Man)J%V+3E6uY8trStUTz(6-*%7TKOER@Os`>?zJ3M1WN5R z-lNQ+{r$9BQhwFR05VR;W8ax6JJi@2{~imnx1`usq?M)>2jVr&RWHi+*j9gJxoocf z@RSLP&M^+B<(w7g)Rm9dW-!ippq#LooSDa3-LcaWJgN?55?ICQLbXvk`N1=-j_kf; z1&WmstH&H8=dyS+z7A)h@7t^CMwfq~TuKGEtRSauew_djtk{C2$%);Qtmy*uR2&dt>?bG_SfKP_#7;qK+lSqZLQ0t?grJr8gRE#> z{1MG3j8AsZcD6H|z!IRRM`ATm;?#;re701c&S!D1Ki%p|LLjI(U*e=iDN62(el65~ zTq8I7{BT8qGxayl@Gqn8f(hnX_bUApziL~u;{{UIz$vR%M?0i0*bI75_5jaX_s%3W zoFNjsaDO!bQYwMp<@g@CV)!gR&lT@+&@E2r_uNDs1}Q3@l`7KnZ0GO7^cM1sJMbU# zMyP%tX;wFqz6&|kmgsc~8}hfLV<_^XsmJXek2bLH$GTxi zp2ziGFH?%cpQTQIcs!~+S)my3K=fIS94+?cG@shp&X3_g4D5WpsjMa7 zwrT=zTj;v(efPm}Z?qYfnq$D*&U1hn6W^PSY%)$YbfN1K zpUc8jQt!{Y$;-ptj|-foF59$9(YaF?{k?QU7T{)C?$|YYFGLvkrb(f0gxOlA2&hH* znB)o63fyPycNLj;kynw%mjR*60(d9^zwy_EpMYVx0uX~q+LznFb7>UiD>wM}p_>xy z{imj@aRE;t%Dbi*n#wD3r&hainPG*JWOawyLZb-(G;N|+h?L3k3v;26s4o{-O;}X!5-@W@##ZO;PbjqJdQWB64OiRWc5+C5`Mf< zxEKKsd!s|~6l2%Fr;iy=fl2eM=P00~bX-~?-xLge53?18*1b^Mb}^Q?~3WdCmIwn6(C zGg`m}?bLmRUrO(%xoI$z0gl;e{{+m6zGu>Girzy30FS*mMaj%>Z_6QQl+~e<-d9C_ zuGIf2h{mC)7e%_>;FoBBY& zurcv7AWi7TfUSyJnX!5dFxJ^|+N>;Oc%C-z)lI)zp`NQ!tH+A!+mMsnb=ICzGp@uq zGwjcxJ!|i!sM$HHT-)r8rp-ZF0-%bHKd=PrFO)8;0S@3O9@kapl$SB3dG2Jz)*4km z-s8E7&qixLPefOMS)?a1Xz-?U>|t$BkD(HY5IX%5qhRTLzPtcngm&=2G*+p+**li2 zc*FQ#Ki*axC+dCvIA;IiBSd3di&VC3M*N6GGw9#rqf{w67LPYamh>9qv?qz+GbTP- z1vyHaY7WV>3>8hIc8aL~fa2Xq5VZ5&>(iS70AlVhXD_POOdCN4u6((hP4?TP=bLX* zb7gdC*iY{?%68pYU*T#DC$TKC=h9r=Xe4FRyxmOrRf6twBGrhDTP>paL}I!zc1Jdp z*726v2W}z~;K-|B9L1k!yZV9)Ls_sL(9F-&gU&q+t>NmmzhCN9FQI$-rs;ZAr|;+X z0ikE?SFT3dVy&4cZ8`ZrK~@sfakH2G_MF0Z{R?byrrfXNyQ$Tm`k9M&2X53kAJ8<6 zX7MgWV+B}Exgv2`*e68Z+8)k(QN{pJB1Eip+fT~rLMEwidNfzQ-Uk`1*Y#;1rOtw* zA!QLV*n}UxFLW4Dqq%X#K`td$`0?NpkP8Su)s-KMFrhH%dwiC^G*lG2;p}C}la)J& zPAp0PUN??WoPA--GCjibx)(xNZ87`a@uc3D3t;@ni}{WJJhftuR;}qCz!KT*tcRy6 zsP+6HV^s5^gTY7Kg9*xoE1liw8hu{)n~d5GbiHq|YJG%^S~v{pf*QvM0NuxD8W41N zDq2rlhBNt{wF8rFSr`~()1pCSoK_orreD|gU!TrIoVx>{aEyAolkqOt^5W}UbbKDL z_P!@5vLgz{HUzE77Pq|1xcXl5`o)_u_9?aEtT5eX#_C}AqE{mu$UyuQ0voN?e|=it z45`#^L$e#8V@VWm}QJWMYt`gk^$&f{w~ z6i1d%Ccc;3X@VW6n+*P)8e)P?!pIgfOE0|ZN&+nJ>pV(l*-y3;T>!x&dL4}Vfk6nF zG{d*Y=dC)0Uytx9l^iO4w_bE(gsg4eju9CBWZRw=y{el1Hv-5*Jy>bx$O`B*J^#q} zp6&#mawAH$iD^lbs!C_$Vsb8j7U!ht>&XaPn1-~@(4AfH6OB%_FOwEmffr^O(I>Q4 z&P@P1co8`UMoEbB??W$!oD>kp=~9D3&Y{3ZKMv8x-2u@otJdq`(vh9&ybVyF+zwxS z3uR)7vubsM|D8FN4kh+2r&yueRQJ&IsRG>f(L9ORaIZoV{jShO z)E&wYUeS5j7o(&u2VKip_3U~6wv;QRY_=>eAg90zs4J-tzl*ZjyU|s`{H{$>OKq+< zx&zn6VEY*R*lqnli@WV-!*p8e;NP*!NpN)CHaCZ;?Wn-rJ#qxhiQHmP1_6jUvSQbZ zr0ylzbLKLgc&dO_Y(llFOPwP7j^NYb;N+t{5XFo?vT7GgOu_y2j0kWU_5*2qr>$of zJ8<#AtFfhWn?@AAUhg(=>DqL3io)qFwo2(brZ7oj1utRQjTIC<0e5~pemGnD7K9r& zAD8Sp`bTa>Y-hTuYby|LaVjIJ?0B>|qRDdGBLBWBguszCAAXk4yb5#ykVp2$RhRU| z&a2l{GZuF4#?Ssd8owI^Cu^ln&GNX+MlQAoV|jW*K3n6W{G$-$Jfr6D^cAG&njU;B zr{V`|tVXjUy(Kk^+R>%s;SDMQpy6}7bvaZop;$? z@R!s&!$m;;AVEDYGhB^eeX@YRC+L3T!Ge5Qt#^dE^>`@T_w|8ZQv|uMLB(3eD=ezs zZN=+qEaX(fKXN(v)CHnB389R}dw%-S=pBMpBsLSfS+;kfR=bC@cAZT0A1wrsm4v_| zVgQc*lhAo)GHbP3b-mse2UWOLzzw|Hv zOEC~eGui95`*eZa{N>~(q~~vL?w{OXTcqFEO};h*U}bEj*)db$_x*c@p+i89_JU>@ z8X~Z5v-bdU372xy@G2z~@)1aVKAe4!v@(;A{?2R71xq1r6#>{x+NnU?gITPAZW7+K z!@#!TN&D37w)DZpWcoIrPJoikY^}jMz4@p@V9fKZouEd>_Rr=Mg{(;uy*m{`b$hlA zOe|bn>i>Q_Vr}&?8Jw~>vo`5rP%bzaY7fx1*Z`7CLd~p`@vKT!EFBiTnkwC+EmqNT zSi&N=48KK_{2f`U1bVC2w8I0?hP25XfAuq{m+{hMmXjz4!}4}c0*YZVbV6g3%LsrK zR*h|Tbr|GFq6=KYznh#Haaq`Q>t0>Tv7`Ykmb84Vy!tWsLo1_!jvwg&OGJryDE+9Sb?q1Y*C?uU)Ax-8lozk=twA+feyk94fW=w>YSK4e#o50r7UJe0 z4Z)xmF6CvIE5nP+{k=j<#b(8ZdAMT%C#&O&NzAMiDN-bgI^Rjt@Ew z^LnD4Cf?sHwnr0VSV2L`I)9u5sRwtQN48o3@fzY>nCWVc$m_g&kL2w>ba=!vNx$+X zRL<{L8UAZxuM+LmJTZ{jyL!HwC_2KC--A#``4d1$6<}GJF%xJB=1)hS3}HS_Svkqv^%}r%=?DgpVMa;2s9KqZ6rH@fnRhx z&PZ9*m@2EAG3hj&UkZ8Na=v5k*qNCt)8c^4T(<KbV{uKo-?&~U?(O^u!jzi-&wNl;&rPhKfhuxnD zcZ+7(jY@pGiFa(9x3*t4O=07NimlAeVNna$#)6O3QUKz9^b<(ji)^-gesrbx#Lu_! zDc12kS^tCd49~^-Xo=QOMZtO~YDbV5ZmD*TeBTEGZQ^%pn-q^T|PEW2maAJ6;J$^!%R%H#8qnOS!D<-EI;f85clP9E0={^e@ zuII#CzIzi2GiL{MWzHe;_+&li-%83%n15vHYwE7*9w5^NpZ)rTM51ka)U(ck{B^Tj z6&qxr0R2>IY7<;eI+XyW&u|;z*$C8OX5*_6aZY9^R zI0{W7vnyF3O6Cn5?0i?3s!hl69Y>gW2(%@p?C3S2}Ag z18(Q@5jDzq5}V0S<68GC(|Pt>0=$iRpjZW0&n8zU>BW;$gSE+iEQ8PSX9t^w|KAKv z1#YHP1I5u-&<0uP`q%flbmXK9*Q~T}yv3)0>M?e_SbKtNxZ2_z;y?2|Hi+Rsxj)S1 zrMz6C24rsz*V~`NLBci1F<{^NR)${7C7zE#}Mt5uV-(sC>5F=7h3dBn6|5^pG(PJTXiMFb?w28-3i}DXOG~VWrxl6lu&>*Tg11+S0=H(7e!>{d0*shxCtcU zBPIf5IBsK=;{GY{Fh=nQqLLyf6%Vx z_PoOuJwL9`3&qZ%S1b8;dm^BjD-|2NAZM4o`ZM7Ofkn`E^`5qB%G`fp0cbz=4mF8I zoHAPIybD4j-Fua7Ti&81)2pb1eghc%V>@+%CFjF zIiZshJ{!8YU+?POMpB;l>?K5e$Y0|ex*`n81`pH|wb?U9&J%e$<`}iNkItn-McblIakJ|+;Ts4Ktd^bVB_46mGTL!J3X6kf-U|#(+EML zPt@~P-f*HEP_8#dU>n7mDe&Z&pD?JQ=WWj1v;l58P@v3rIYg0vS@d4hg}xlf?6wEigP+s8we0kY^AM zR+k$P!;*;@>@p*ln`o;l0MS03&1hiZUZtgx%X(?XYG_^GryG>Xte=Y@5(o%Q+C1mK zyoWuM#Cl*NFsPsPSF54P1T1b2C&^*k!ciJxojc!NJzX+H?{1y6SzSg$VV^IndXYWx zaxql9`AM>mDn8b+C4mQZ@HXSRAwO=0l7x^W=eW}I$H``XJj%Gr|Gqb)$&)nQ@DV<# z-SbWqvdzk-;{m`zjoLUr{2^fQzp;qiZ$KM7V+Ua;Yt$!`!^maL%85RV# zN+FOtmKtLYTAs5@Ukq3O3S^P4W>l5%T4XNdLPmg$(CATRr)g&*-g>vA@XgHh9*`rW zE9t$vT=P8p2ILDD9v!oQk|b0*Tg-X1kF0WQthaju1h#d0$Ip3_e^&&=HA4bLi$=sA z=VXq`cY*AU7*b4T^3)`4TgxbucCXUzHtS$*VS*^7-o6r1+fALP8Z6+Bht}p0t(tXLsC!!)l{}Zu->!Lc@Opvc^r|({eXkc+V6Tfe2?fxKvi%_ zsn(;<4xQyF`gw|q2ojbFZM5wg5KtCbkhGDR+s?_Kpn5Z=bygr@r3QiRpNGd|lffi$ zaXv)xR%ag8oLg1Z^?YLM8)&jC^|UMgp?jls12>lNNy@$tEp(ZM{oA{@$N5h2g%#VQ z>si$=W>M`x#-og6Ukc~5aj?9-zm-n6>txf#_W7=ZWwkRcL2I$_pDHQQ28<0`V%0J| zyH}_}L#j?sd+OVCasRDAl%Z69VY^LSKNLD8ffLT7g04RHYjHb6RtE?Ag=!Fq?qx0| z%r8XsxAnJ>T8>fRG4ilEv8e=uso3aet0%|+el3J_|!nJLTc zCZPvHb-Zt8U7j&;DZa{s_4u%V@!ITx+B?XPtxm>U|1A+Zeu02m^SGDJ2JL9`ef8PE zu2&m$gtc0=HkfKd{Fs5xQ>GjdFMQP00Ks@RwF1~!;me;|5iI8G=?mfVQ=K*A#`V{` zpe@8HDL=u>p{@c6u!7ehqZLYC)M-=~wtlU^xp z=8OUWqTX&&1Rm1~W~{p>ueZ4)uxr`WcN#f~m8g{#7RP8R??lyvKGoyx%_c?t? z7kbiQ5dDH==;s5F(7^F18n&KqAFyQ(I$kNsCqQsJj(gvF?)aXfbF{e9u$% z5e_x|1zxEYW()3#RrFLp z*k9ybd?L7SsZ0p%B)TEXx88T_W=0~o3GO3IjrtqwL_HLP+C;q6sr=3*{!fA{<=Bff z*NDHQwbcnI*K#FfIP5k+eSyTrKzu~t|~Zpsq!qq>7zSu{R|8SH%bJ@uarreWoQw;f=C?OCyb1w&Kr&Mc7V`l zw%OByPv4@|=KQ@zF#8LDhrHpmL^5uJk!RXe6U5Nz(~MKzO^c<<}7 zgwy?|h7AhzHvQ0A$nVC zWW~rt683uL`&J9K>$H42S6)ivB0s5w!#D{3H4L=5zwJ!8w_A%?=f}!14+IBLyIMCQ zpGlar=iU4VcC;Q`97RQ0o8NUC{ugb)izjaJy0`Orm!&h``dxM+>u+$#tw3jP(Z@OO zO&3Qha0iyYhM&K|lfm{eN&eJwv~be>KC#0fjh{M~7Iwdu3rt4ZtJ%ZhtTn$FIRM1E zZZ8szuGybw)`J^PrYO1Dv{Fz^L|%E~maq`R_ng!sBI_*{AHwP^X5rNXVf1f>yQgt9 zc5aIXiGAFs>*VEN4RfdRKUf6+%?KpHqtHwQx3$bNv7CLX!my0HkRza8g)bUYyXVe2 z-#VNLUIAJ1IPhKN=NuV0Vs0bh`cf-)0^-37v3d)&-jc9ueU3$N%Im&xSafY#UOEaR zQNllnhWhAq{JQNl(v>aXqWXbwnrI~=^>bwcS8Fy$^CvdlPrdKp&<3v_B~XMok?L*x zaG8n|(4|RCl5<4-h8MN*H;QdzQAD2YaI+jpJ_lH+xX1#@a07BLbkklBIsq9ijSLGg zaaBgs#!!oWtE|#v99$amHsF6Nq^rAF@E!xR?0PQdGUS-+>R8hu_Yra{>H1+{4(h_H zn3rTKvnN)IXSCbUbhsU^`j7MnP-d(Xc;?<{f1|)W@ms2CNLU*8 zJ>K1_UUDin_%ly^Ux|4h>!mOIC`MhLw9CJ03T}wAeIegRUx1<#IE5QNBalE} zZjzCpGi%lKDSF6Hin47nwtEm+?UP$BH&{;=o{PC{EOhb3RHjjj9&kJNp#?$|GQl1r z&G$YLYm=V~HJ_6)3cbJg<55T!ZyK2B!bGC5Q}T*|gp!-AC`To`aAtmQra~rqe7w*4 zSr=S`pm4n$WB0kBC9=6KTlzik8s|`186lEx4-3*7F6T6mBrE6k z%M6GK*m`{;sp9L++=l2h#@+5Fb!WcL9~&8QMB*&!r2AZdU_0!Pp^(w-ySU>i=ab=l zJ4}KkO%Mk;2c?+cfQ6sT`ejFp}eL(-U1n$D*LpkK}rO@ z4d-4`P{v!N7R$QN6BCES4lR%{V4tqH)Hqrac02z7X3{%Y4D1HK0CQ&1XRRtioH8If z8sG5&a=MPwASg*;uepaL&u8_ad0*26XkEPc$m&W?9islu8WwiBCiAw3iN4F zxu^%KKlT=kVv$(+VD#__1!IX{$QWfCwJo9h2ki%m%vLLw>g==J?)95|hb247@XE&B zWpv$lu|C0FDoHR3XF4n8e$g!$!RtIW8_%Fa`xBMB3EE7`>jfji;Rgn6b zXWiRsgTU*`l?_j;YDKsjHI}WB9Ia6ygBLBp5_^x6Z%J`z2ret_rPTZBHaYgmf79EQ zWq#?uzM8YPfD=;+#Kt1!Z)j4 zi^)sqS`YvE(j7rK4@GbT<@=r>edFq_E5S!%S;{(;Q710nSHUMJX+4#1j%gS4PPxBR zz;|Xf^y*u`AQ{jbeCw;V-o)X{CVc^f1GYZ}di-fRwMg}k6n{iNG&noIvARm9R(w`{ z(JqLlu+YAhZhuOceH~2^C?uHE@t$rfk|w@D`BNjjWM^z*rFq&{b-PVl>cD;o9B3c~ z%YTizVQZ2{3?WE!wBr`u`P2~({bp9n%P#s&m(okq9VnjsHV{p)d~5Fs=s5q6ytfRh z@(bfdVbdU8BDJMKQbds4A}LBscO%^mn@(u~MWj<2q@+`%LFw)g>8`u*uby-6nR{pM z%)OuP%pN`f`+e8D-nE|ftmhZ2jB1>}7|jNKUB~RH;8kiAn!`1#nyQXlcHi*Ip~z2o z26nH!#F$AWTL#;LRk#Yj>s$cFHPo>mNi<82l-1Ee?%OP}>EBR%g=@&-JQsX3FX9`(Cet-c~_ikVQmgx#_*7et7Q7q|0IwUK;7#*wXg zol!!+iq9kW2+i+@Ta+}6%34y$+zF^=Q!Hwk>ejzJwHsv%`(<1ipZ$8_G-|99RFW*I z<#RR#?M8d}qRsD$G$FLLlGf-ZES*}_F!+m1^F4413yvgB*`{~z=rdTmfs-A0A`@$4 z2U7nORLjtabHE#E+sE*5EqrFbDJQ{JkMJxpcA8HI8QrE3AU0jH_rzji5)(~P-s@7F zz9{*S9!H3=kL8EOM(r|fM>@Q+x}d%8SF11-+{}SAE8j)s5dmI}!p^h8 zfiCmd$JA2sGBnq-^EBpg=%N?ryXjX_yzb1ecc&B1ilx3iK*AunVB7s4PR-Nq~{`_(5wH3fDKS%+Q@4(}MS z_h|Y#a!*)Dzpxu5W!9g_1tg>_#R8uUR=8*$@ z4H!KO7q#KGX*WQ>qZy7iGNl+{M;@4zOdMbkzJyoe2d%d%!`QpeCKB8o$Ee;joF0s0 z>qH%;9al|2aid^1#FmWP!webGZ>h1N_uG+tw%g#lrH?vUiLq2E)NQ6YjEvsQH7-ah zS1y1Yg0C52} z=~lYd0ck~3Awu`XGK87ELnlJiU5x`iS-w!g_CJL#Q&30?XJiBUkd#vJRJxfxc-T?{lQ*D z%$4!GzJ#P<_kX!)wa|3HIb{Qo?Aar57hrEQ;8@h_T-W~o$40o{-97?rWQLQR$WT-k z?7burNm*f*&oVEcsoH7;pL$4sLJLH@Xl*hID`0xr>@P1I%~qO9=o4)5qrj?*wo(>F zGr<5mWogSpFPZPS?rim@Vir$J&fggKS2D(KtQ*O@(#Dr2P1A`)su?=w!dm<@L_#?}bB%RPHP z!Vc-*GMHvLc#{al?g;S)sJB%&d3e5-<5JX+(Q{_O`FLi_wtIQ0lMAy$O`Iluza2x< z9@?NsNkrwVLVn$OAQ&0=0qM}lsKwr}-C<}ZJb{woAYX0hLC-1Lf{|zsj`%bv7qB5= z@>KcylTH`OHAA7g`RZ0CNgj>>TepXkliRn)`-NtMd?u z3Om#lJrHwC$+LBwPO%fs2rqx0(YJ9BU+)QemNz#or*aQH&K=nE)yUkF8p(!J0|vMopjn5l{oDJm03;|`XOIcF>m z_$?1_R=cKXuM<$hB8@_DInFzBxjnBOin&gzx(wv^8xK4$--v)xs3m9P#hHxDgJ0RT zrI3c8Ze~f^m_gAGDcl*1mLEgKha5QUe7|=fd;%X}bT)(@%m> z=;k!57vHPjVm{IHVdH$<50M`rHIx@d-*xFETYpmGc~@M&MOFAH7bVrekHoX9wG0SM z$6W&ea?*N~SN1t;gh}a0HKQ^9h$WY;Mn*5HQB`Pa2J8p-Px-3IXWt|XjYc_NVGwE@H zi97}#DGdLyG+YcJZZ(;iWnDxDUzA%!JYVCdkE3 zQ|gO5^u<^w(=0WQy(8}Al-wdzBMSK3`rGVwf#PWH4Y3&?(R3dcGM?NfLc!BRZM#Ir zg?VW4!?NCGGq!DSob4Nyar0#I35^}!FCRQl<;Z*}S}^iQlm-hT+~v1?Q8IVA92PB) z+P(b%Y2oH#?#AHUPcl4?IDSRkzwA(gPWqGpgHl2-LWIm}B81DJ^F4fSDeYpA|4L7#)|T`ZDY}EzXuHos;{o1WoI+a$wr6!9JDzcI zw0JAvGG(Xarg{efVU9;UPi9uVjIC4rd~|G;Y}Y@5brzy8wAPnb-_W-d+jwMs89ipO zANfewH}c8R^7vW9ubQQuRlxC;O>11H3{xI=0L7SteJ~I&@#|Aaa^ev3-&n62tPTO6 zi)7wA8$#stB~$bz8(`PTtEy#(vLB(!>PFB1&>GU%?YSuY0_~q1%jhm*iT}AH8M&*K z&2rTJSCDoeiT<%8P|JT0GVJe7Wp~CnNxyo&kT^YmXZrC>xbw%seOML4-h@&}#RBxVMHaOI=0R~@L|gunFm_Fm43AErW&UIC=1^IbsFa=!wc zp{~kG0%*vUnfvjCsqQV`vnie+DlgZ3rtUMy?QfER=v#sH~~nqBu{_s+ZD04mtZ z0I4$Fyb~;y-4Ll{8~bObkC3t_pGPc*=;}bK4WRRJm@Kpg_Dg^JNenSEZVSSeqy}hL ziO}V4n@DaPf;s%~OCNi~p(189 zVFPmmv;EKAj(l=r#DbdwY}jgPkeAFI`gq2YbiL1>9ExRMQ$dV~8K9T0gK1Ao09iRx zY2-Qlb`!={+<3le0c=|Ar1RtKo-6#T@lws3l`m!a@OOeEr4r!WC9eO3%M*SY{V?eYDidL z8S$VTv@Ij?pi@EN&t{AOY zD}m7(FR;5=`X>^^Km7M1OQ;R!lZKjjJlSfOr0HB90vdKjUl6f(@$d`;v77|5JaTG6eYt&gH?do7 zW*W{P*(mH7tP^Q+iDkZH$LAuo&0Lv27N;8aU2!iuJh~`dl45A*&_!M`+xQ}=qmdR4 z+=odB9(`95$$5+Lv~f{Is*mT9HmLMM>-Rd7X*|VzNtNt5lF%6=3?2BZ`-;eYw~w}Q zZ(^l+JFTwklP8MOH^;lz z7bkAI7dt+w++X=uuHZy(fujV{Pat2h;WYLPpoM?|qD6-^8^Q7$QDcN(waF1l#lqdBAG0)GdgHPs~1}-M^ z6f%23a9#a(Dy({&WI&|+QBJ>J!_u)ENxrj%U}(2ug!~d zz|SpqS@5z2Z|TH4D>C}^AI-GyPbl7PcO~K8^a0^lJT~#kW69StuBo(d4{dOFntW1E zKHD^s83GRR!yUA&yewoX3Oz6piAPFwoA@G`!ZUQ(HhsK(Da8v0@;31-)%=&z>QE_UYDysR!y_g4L|`cJ%JVb7n# z+Yz0==kdM-^sxU|nhv%y(2r+#{bLAf^PftH ziqXG&kkyO;y7T{wcUbLDv4|8ARurY*Iik~0gwWymfj96Lgzr~-_Y}~` zkUIzOPe3L(u;VaJn zG8ZP~Z|7W9!2dkwG|P=J9@gRP|9i#LHFi1XBPMnf3MAq(_6m}(P3_s8eYWXslELMT zswd{$i~glBbfV2ue9c>W!i@KXa^wS(?tPGEsxjvVdPCS z9rb-g0<=LeWZnbdp~Fs0o#@Ef!NcMmatN<13;n++lMJus3PTPd?_Q4R28wAoGrfCF zN}6)DG`!vSVlCB&3kbX;mqN;!Hn&%gN6VMBeqKAgt+y(NpEAGxYmM?S4qj~sM-G|F zP5!_&0kW&Ur)ZSx&VGtB44@6a%tvyPfnvGyUmMgx|J>9*pM8vhCnEm0Z(t?_yN_|A z5$rA;OaYb?8$A`4z%8(|9h_xK)u5>{+Ofq_R`H;Q9uzF zk2e@hUsQRVSdZi@N&b(fd=%&Q-Ps^po1J@V;L>nbfz=;Q;I#O|&bz2*}%>d-Bz1VW$gsm)Bj?K$Sg3PA)H{7Kq5$trxk%1eD>H~lNL=|fh*gtiCB4!| zF)ac3(%usP!!iW=*8j+L-6RZQ;)_ek#$dXaptg*(daYiEFV7XS)UKXzWN|wa3nBqh zwDUjHh%6LeoIW{&;iGet!e5D^N&6l)Gsd!+WL8|48F)AoO&5b!fZ8vH*)1|00E5ILt+Mz~Oo zX6xM;7$r&Yst0;5z>wW3R95^GP{pA9zUt*gT?pBz}Y#34>N6@E0y**WG{h z-y^S9wyGDTrpW%Mjt5J7G~e&`SF~G8qflVWW7ycB?Cw~=w4cO|yjgZ7A84nlGL2jmUw;gMu4vRg>&u91(7nppI6`z>w z$#N^PLVqd%l(*i6Rh-@!F%+o~Os7&BlD7z53gMYWCiEf?WHnRo)Ai?OF$_ib0L1P_*LPzty zl(HNiaDNE(&xP=O;|Zft=tvCIVHtR_D0G+~7PZUaM45wOe}_LD{VRmv;9fLBsGk(% z_uqvP%d4A{W=hv?B>&@XE^Lbx*Sg9pQ>jau z0cFI8rcUX#*Z!gv-W6Po)JDBdNDtJw)=V@1t|@rFt{6Y3YukPR><3my60rlxUa)w3QPtONyQ#Q*h|%L3 zog?qGx``N3S()XX4&p1n@~)8(%8^78U}z!Sx|%4W_QH+|P^vNE6ezRuRJ4*MQg z#EHY1OeX=9{PD6TVr-mJ%cIxdr65_Nfk(i(FZBo@TKy@mK!6_m?Bp73>`d$SN()zZ5XKR*<)14gLN2}$+Pjakz zILsb;E@VxEGJFA^4g=G!fz@y^GZK+t>Rkp<~AV@kaGI@rLu`@?Kn@b z09GodOVH#7W(VP@&fodX0RqDQ8&+tG>K9}w&ZxYdZyIpRfasc&9>~Gb3thd#r$rI9 zXCV|LRq0<|8BVbqN?a-GNxa}R!CHK_`Tfxg zgPu?jKA{R2HeCB9T48RQp0Cnv^D5M@!;AF&XNM@R)3)Jb|1&ELckn;XUeb@(Nz%aQx*kC$9b)l+; z?&EkGs9dOqKatJSK|BqtTU~Z^YCeX7qdR+O(ecRF`Y>jyobw2dR4ZJ^O=jzBR($1~k=3T}?Q)78HWB_+Ix za62A&k|S+(V;Av2y)1vQGr_Z|Iq7XOo(NjCNN@X$&SSlygsaQ>8`n#ueoD*_8B3&D zEmtPq>F;VG3FPQ^*_{>`Cd(VSf~$MDf`29&7ND7w91t^KCz^-8>wA4?GpVjU3A^;V zH0p=#3(Z3xd2++^)mNOKp;Ds2+eDtm{jZs3D85tyG}#mPyC*F_b&`2) z9s}iYDI{o$MbA$ZMg|v&($4_#eVy6Op@`Jf2^#w`3XCir9ivSOH5pjK} zt;pn2!kag>mw4zQku4+vR(LF?^;%{L_o3J8#hnym6G=XAxJ))QM5ISsP)^D>FkT$N$hh3#bc52y4MVc${*5hD)mNO+y zTI;+}E5kuubaQRKGu>HEZh7N(IrDHaiWxH z8oLLx1FbN@3l7P16s&IAnb=Ajp21 znmXwdpLx4jTe-APj?~Hd$QB9IB)zYZ63~rSGa~u+5e$C`*7-Sw+E2>a?e6lTtooYRDE0eta67_T+mJ$234M54Vj@)g&DaZS4F|<0HF=?CoJY9UvaK+ENlh%<_3* z^k_W)Nsg(E&xJ^;lHRY2X;RiXA0o-`NG4?0cePhQw|~ ziK3QTo5?8fG`0Ttxf+GpM~w%2qfcLlyv=8RgE@K>W|jT*Y%famVEH7_q@SQB@rUpF z6XqI90w`Vf-&{Uc5=sUMC{_gQ7iRm~{ZQ08siD45B+rlj{+=3AW()J8SP}rpEOfPX zf40yZ-z-Ze8}jwxD;Cue zfv`{pGRDs;B$Df;g~%aMNys4%E3U3=GKl*>10V;jCr@hj=J_8DCOx&1Dwsu)gTmmL&a+W96llUdU61O* zwYnpDR>VaBO|LxE`IAf%&_?GWFvIEf`!;!;Id>|vbQXy4&CSSUwNPMY<>G5EaElAz7!fAq|QNkmVs8tX^_LuML+HO3U5}GzCvO1{lo= zpBkKV@Y05w2)NpE=b&h1=m=t!5lU_JfbsVzXk~Hk+5CRMDNb0#JbhP$rkbAh*5m018h&(VS%*3hW)3yA@>;TL30#t2b6vOWS8JytxF5^il z!@)}0!>ZeuF;4TeI)~xqJ=#WEF}}1~V6sqFtPn9UFKXBPuFE{dHbE~u;6hD*sq@X_ z#x{Hw$CUylv|>WFyZ)lQ?738!ae(91MzBQstiRUNpu@&42Blq60@7Y9Dp;S8jiApm zquP049jjl8r!^S2^^5mSaIqL`EBt820}K1Q`dy}(`uxR36U(EyzJ9Jghc{&2L0o;| zkY*$lskH{wjDYP7@=LY4aVH%2$roI$Pth|y z&+JRmgjw6$!%6GI4qHlJQ%uIFyrCc$AW+U*#}@A$S;FeOKzBAR><&4&e7Xmsb$jLC zQpa;yr~;xW*VAyMt%cU+UBKEy>oDRg%48a^vGXU!?SI^b9d1BpYln=i>*eEE!cw}H z-b1QgSd-F4jD>ecYoB*nvnNQ2)c^a|Xy8tDPwNuUI2l)1*;ONl;Km|{^mGuIE2(2f zlQQ0~ac2d)Ls#K7Jfqlq(M!xIHd&3x*12C#y|mNc1szt0AH>9x{(AXAz;LRV!eU`O zGHn-I(-U!b2>EM^6_%B)r%>+%zJ1h^z)YeNJTbfxgoOA8*7l zW>1c3+e$7|O68W7(`J(35;_$OhvdtD;7cERSxI-&B6C;XQ`U+v-!G81kFFT;9T| zVdDxBNI-BqZKp6A+-HZWF?ReIG4zBiH^#+$tB#YqbE>hpJ-0(jlteyzU_5BxG2zXD z#qBc_pm!XHyGsdbHi7TI{YC#=AfcGidM-@8*r*mrML560IfSg!Is#fYiJ*56HGH4$ z!4#hDEucp>*HNS|{=_1J{>19QTav0NmF*0+ZH$tV@owbMOF04sCMK}Qt<%t|O3X%B zXm?M1b7&m8ISxS_bA3IRm(!(CC8Jvt>R@t7?mM;9N*szoyV+ttm|xox;2+3P%`kF# zFF7!b@U-DkcapkK77RYG-?{a*{Am3KJXfb-^cyV1^#zi6^c1E^L5zu_Vz(Ys#Ek?r zQjQw^T9mZl(bk8(ou75RQj_AqrZMZ}?*e_-R}4ie4<&#ETZ3{s(H0Ax4TR2&XxpBg z4w#c}oz~pXH6r5lmd!{k6=_zea5x4V)V{@D7@!)#0l{PCL{JO-DO(iOaV(YdMUr2_ zhzZfhv&iU5;}1Q)PZkB{u(00q;*8^~&>mU|<02!!zc}^Ob=uK2as!UAzxfu+A9cs^ zqR!gUmyDOu{SLZz>EdVj;QMoC1K9PoF9+(fR!!oSmEI*6^k8AO<8E{jx&-w&*}+>1 z)fP-9Txtt>e2i!)h5K)kE_fgeLJ+Aq+1QoV%Bk4zoag-T6}|7tTv?* zELeUEg^f9aIluYmD_4>YH4(oe_UpTNqb=ijCe`*N{rIAvA{+`UQc74$?nc9C8l5nr zZ5i;Z_NUq*m8%trdZHCE4nUtNd-VofxAZ~| zaBG|t(zLvixJXZeR$7i{*9X{LJoNp~jSwH%#mj;Pyalz{~9~ge5Sdr`&Ga&RaNzuWPHo)*8Yd@|{3SAKb7gx0jhe$(FLErMNUhSi@p zC~ptOCtjx+h|cwVSR`vJX$TlHso@L{u}H*G*(kM`FwNM~$w{`-El7&UwLk^cddsdy zNBmPDhjp83up#1tT{;Qb=tzwn;TWsh?;OAVost-EHa6298+~@^HQMBJgMUj(i#q+_ zDQwj^Lw`QT8^ku0e(j%j*8#Ze%xnT@Hi|G<2G*s=H|ru+6m*ZimOX6hdleKJz>Y_k z2k+N&^l|6aWn0>~riMYmYwh&2bP5cb7cXG}ALAf?U1%EYYC+boDg}|l&@{*ao^9#hPH7=MF9;=qR%US?`(q8r-GBC! zutq)&x!=D3F$iT;1MX_nq#6dBV>Wt9SEw4s$FMsqB?DuEP+!~dQDa0q-`kjug=Z4s zZf>9M_DjIfdEvc{d{+`yOjQDsS*Im3JB5)0{OVjTa5bDvDm(mcl$So4>wEykNNs4z z&vp^a-p@7{kZRl@@fBI*D&A@b(^FuF=5R{LH#cqEIH`0WrgmWZ0fUkzm|dAIW_+>4 zKY}cvSJ~H&qKE7LBDYlP#l$0B&0@hjD#`v=qJi&9t%LZ~v3OM_SGMwPVkB@eSW#QFw>}!OBx&H$XwktuDGp2i)L-brVR;A(@Q>DV=}11+2SfG> zKu{#`iBJ6N#|+CS#Jln3Ksi5J{uIB}Vepm3NY0y%1cHyj%&r^W9Zn{78Kt(X=;>;C zn$^Wc{#!(xMAUZ_O||<8SYS0X?=VujY!~*xE}%?>xOil-MH)ZF0RT~mWi?-ANbsn` z#%~fnBj{uCHfQWD*N7hMRZ=_)2o(jl!Ot5V~PfG z(UazX%COLhp*j{T&2x6CiwMHN$=uZ%Cl?3j*b8FBfsBfZ=N!Z}r!$A_`^GN-rvqi_ z83h)G3_s%fw8TQQ!>fEPlqFW(1Xf-|(Ff==wGsL_`B#3~*_3M&}%xY)(AK!zUu8Xg;7?rmn6A zMmZ~9T!Yqcl8JVZ5~XD@d!Ol&Rp7O37Y3V~s|Sse2r_YgP%>PH8G7rW@)oDsD>A^w z8IHqABIR=0vN8Pv_(Q!~UBb7q#8Ku>EU~vxSD$Vm%i#1NvpcT26RUro{oq&o0^0u7 zzl+bypo-(TLi|~cIrc*n1i)5%68^t$BP}tu^tDjM0|=GyXGQ1QeJeizUkqx0AHk>C zYGx?uM}FpxNa7(%0S5lRv>j&*D9}4Xk`eUJtX$uB*E#>%?}+Df;w!1#EydOvEppf_ z&{Kj`cwN&wK3bYv(p_4oeCktA7`q&zQ)}v#Sjg! zR;d?sE8%joHmotDeB)RdTzyolV#i5UCvV2t!LdemX2-QCsAsp#y8Z)SvdpJK)L|I$ z$*Nvfe)a>>fzNU?q7GXzt~3fgs$~8xHW!u6mu13Tjy9pnHNoeQuWbWw4HK-}#R7Fn z->=xl+(X|&?FnMnw8iylDsA=@MpL0cj^BY@2@+1lg?k)HsXdC^oEPy~-}4-Jd26K%~ew^9Q~VZSpvyi!BwKU zdrC(cLk$LAg585Himm!`+)C%drzW2~(H~5A<=~&Ues3W{^4u|As5N_~F8KhTr6|gy zLDq$%)U(h?-8gK3awB&*Bgw3r9MOWhFwj#@foXMJK`|qIkp8Wk9%Aqa$oy-xOIg9R7l(7X5M#M#lY%_9U zCV;MZdVZB&EYVIKxCuF+gpEGZ(u#XRzZQr!OSB~jqpHIe4cW2&!Yu4+ zv+DU-{{~L^E%*_h1%M*-ZpiP3sl&n)%>Gs=z_pAJL*1~Y;9^ff8T_{47|{kq8vm0e zJw|lW?U_A9Vg$dzrdR}KiFD$>jYPx;u*&}rzK#cdbDKo{x;2J;4S*I?NoI}LU%YRw zT;$eRSPzw1F#_peu?PyU{_aQ6jj(+c$pcXEW&T2E+5QOK-Q5$w!>YoCqh{W34G01F zk#=}d5ZPMDIfx8Z9v~7B;$zaGeC`PaqsF22JxNu|O8q1d2L1)}Lh+|+ zW(FuC0hTSl8jQ1lt^#=b3G>)3ws#H99^pZg4L=KvUS~yw(ZdY%SFf|uoS!Hx@|GZn zV5wLU{KM|Jevf?fG*$rc0UXpn(EwK81`GiDpVR*#;lPk%#lh$$k^a9y<>*@8)YIVs zfG_GjE7Wc`7NuQ)RUKAep(y=#bom~AR-j1;`*&|1THgOiyJat#Oz6LBLV;2n6zzGH(y&?dTT)iTmB$BA8M;e8)fWIm;| zSVgcZ3-V|L{);N#czlQNHHigNq#|HYVTqSK8J>+j(S*xS_4Rl?RyO1V>&aokHe=f~KJ_bUfQne6d5NQg?c zJ3eLT9C6rhyO)f88uJimg{#JANaG=k@%s&X&?)=QykyKWjVqeqzd1QG8Tb|N(Es6G z%FINcAoUBA)$co({ZA@(9A@`p5HP^GL(#C;5L)A=nv(!Xdy3qmR*)V&f!&#PDiVQ> zJY$LQFt0?xHQfm(zj4+%*_;R_UhY8)pxr|L`{ZLp#9uAW5@O=H2!}c_!w5oaJaZB3 ze3#rvP{8qETG7Z-An1V)6a^78ng||i!j1d@qkA4XNDsSQYDcNwcgJfcrp|ZiLJ~LR zgu9&{V7>o+gW&ecu{Cq2JBRT01F54oRME--2CE|gCZk=7B7%}-E`|MT1_pp53E)|m z&v8SrXxw31^ELfpyt~?@Z<3!V^4fadtRsdBU|fp+X*69liEm7~?zDh7Ziql?d+i~d z4m`0e_%6jj1rtm#bJ6eLm6_4y;aLdrkCLgP>FE3k*AdB#VrFw)k>)PyXq}L{PNJyr zc1%NLV*l$(1PnTYyUZ8#c1?S88;GH6F`MK<(0ufc-dr>~REbV%X4pfCF5>_3jNsyQ z2-0V7sqjd}4&gP;b}7U*^IzES@j7H#&!1ioArZI`oCf~uL$=>9$|a2IcW-YXO4BXw zr-1MB;Z)Ss)n!#zt9lkZ@@q+R3%wJDCj)mpbo#oAl)MaYOeBu)j`uTH+~jZ?XJG_I zk=yrv`?-BO56VHLMbU`c>l9a@zVR6Ah&3^}L7fE@mHMk=5@seQ&Jq}uiJqQbQAg)~ zb~ZiB^UL!vXCuQk_le>2NM!ft+1!IP+~0D({#>kOdG%1}V;0gfGGLVa{`mSw!j88S zU*HWP#ZvLO!-nTUue+#GQc{+i^kLc01HboDJ>RfM`-vu>CP!!I=TJO(M1t5bz}^=t z{ZTZNY%FsjFg&sn_jrP1p`7et$+A2q-p;%fM>&2WD0}-l*nTeYKTwK# z>TILuDgqqh(K>ccdcgS-5eUp|Y?QkJhet>6GxG`yW50cS{seC$`Y7ei@b?+Ix4xM9 z4?eOPpZ81r9V0MEKXSQ66W>mk7mg70mnXs6FjA~k`-%X#ku8AXdeJ`V5Z9#I#m%m4d>)Jz&Wi7<(`iV~uhCNVQ!Rs_m7+pq=$q zmDT%!$^(6oZe7VPTm}0kzQ1pIKLuVLoHZNacF}b5u`iG{71PG6%6apR|L4l9FIRh0 z9ONQzsiIw}?B>9rZj0$me8I8V%VG4T|EXG`<`@&&qh(CLHtJpSvZ2{gcEqDFaLT~b zK*_fZc_&gH9$$z^6Q$JEYo!&V%tR-yKYEqd8irf*(>P`8=cB7kZg-k!I7hXapnVYg z+YQn9h&GSIcnxQ-cZ5)+HVL00F1Ch1+EF66SZ#P+_8ETKEHAGp%7u!ZzbNjS&0(0x zkY49D?fvcdG|8IP z`J`DgCaV3>lNoj21s=;7?eGcyiVlx~=@6`MZE>Hl<4{q(4A3mUjaP61&>l>b5P^>M z>E3NhOgz#?BJe`AOx?cJ#_`6S1yVE>g;eGzW@?IyL+?fx|FTvJB0ZxP4-_AsnV|QAI$?2n-#c5!j>)xbRwd3>yDY2S}+IXPYo;N2q2y*T+bLHmk@?=?dK`i5ZI z!Q>-~Ps-1~h5f+VuR4@)&#vNQMY;C-F2E~euH@v8vX6z>I7p zI{{iE>Wh~UI?fLu+GaR5*x8B@zMB#_V};FsO3f*eEAVx%yJzQHUS7WEivTM8%n0X) zS{105{I&t!-+h1Pv_|(iWg^&#AmQCBvMSo#V2UT;>GXdcf0(~#ea98Mb}}bj_3i}{ zz1uV6`{oCqzx`UB8E(kc%o!DXU`#n^b$ERE+|Di3Okc-*M;IFZU`>WeezozyxAxs! zG*a>)E{o@z#8u$y8Vjl_-$btWaPvz_NCnTtPwxhxM?TO{tWiEt{bsbk-2KpIRuG&Y z7fIoLx?m4Z9=Q9obueD7{8BIhWB&YRk+g~F*5Q87l7XrRNa~iWo34sj!5KMrBu%%0 z6Hc&e(zB7OireR%uJtZ__S}*(ffr|V_;}~I%cjZl^1CMqw3K0BBz)PSgP(Io%qqKs zUdhWBh9Qd)ErFKCZJRtbsqp}W>!l5SGGMS7B2E=r1#sW288MoC_KaSR=&TgC_t6C+ zvgBkMBKL)(yAY#bOhgYCR9D3|f6X()PvP(f%*+Wu;}l91{@vw~RCuxKG)eR~q_+?4 z6yIRfZjL&<*(Qn_3-lAlZYqd{W0KlfnRVfBgnz9&+FEY(*opJ_)gU?RdGPXR@)6n7 zMXQ@h&()$`Q7fgT%rWkcs5SI zX9K}b5WCmsLj?%tN{GX6+hZYg7@@LX4>S6IiUyG)EJ$$jaygHC627`smhZIAyJc3U5Bhm%TXGxl zi(!yVINUvB1spvS$Ki9%0sRK8naYT#v&croI{93p%WH{uVJzrl_u9ye|m6 zY>UpID8oxT2{RWbQkro=)}Jfybv!X&6dT%V4S4iaFR0Dw-YU`et=9ax(2)@loRB=A z`|4@BxoGMECwSS2mT(!G-Vyl7lpi^0IwEVoxMh$x=A^<<}f;;bKR==EN4Sen7uu>9X01YaheYT z00~pr+j|8{csRkN>T1!KzKClCvWt0pa89&#ex)Io<)=XB*F_hnx&ik`&*f$jm4n_n z4a#vhA0J`j#xnidTTqG_9<5&X`LlSH)m)AnQOaa z=qM;K10na@vjb8yK9#*vOuS_mm?t&@lB4eQ+HDz7n+ChT#Zy+Q6o z@CD{aiogX>bZM`0i(SxLGElhwW`(VgE1&tvjecY>UMXvX>XD>HF=O_da4A^j z+RWCZ_@k~1*VRXEl9Q8-O-FDxu*8fEI_NOo21Lj|wdWnR8kR5AW)akQWKQW%obgS$ zBFGMfXUwoQ;2w7|!g1AQ7IBVe$q6-)7SHSyKwDSluD9ow!4BqeM)$@0cWfB=es|Az zymmZt&Q(n`7c}Ui$sxP0-as{)c{V zg*W~e#&I7T2)`78@p?eq&eDTqK>vX}{*-aGe!YG*VKf1g?jd7U9>U(1($;LddK*B{ z>B5NDAo|KeLNkg&jT#R$-iG4(N1H=qro43Hb_dVMZmB?0M#j=d zKJ~>FUz3w*eEq}W)lF`r{$?kJ)x6CPN2WhCQ;TT#J6kj+uV=1Lw-eu_z8`=X`A#N( zdPFBF1YPK8HekPN9Gao%EflVxM4~}AJUuxo%o01u49i$CKgnBzpn9y-urQCr*5&jT ze&j}%j?c3ipMdr?usyWUO4;*vl)(AATGdxxV%Q|+ex8+AA%h+GQU47S`1C#;)5a=ygfs1{{T8RcbHF zIT5PD)fs&;BX@UHv&uTAZ)z@~wqiB!#L&|bPilr(@NSV1<#3HnoaO5&rtM++5tf{< zS;Nf3v$;>G*`|zawuCn}&Ev{-iu`^kF$-ysJ;;bGLgB{Y@+S&<{*6wV0{e$wUg!~y z>&;VXFN(CGPqmD$8Xmyc{L89W8Z|h!G{o~Tllm<<8Bh{W!%v>@lh0QtL{eo)o9lhx z1`~X_A?FhdvhpvYU619N*MR|I7$)CX_LDed2}Z=N^RA=b->H2*hHJ&kda{FKpPhy& ztbC6xCk&e_r^)xc4BZw})IR(6-Aen~a43dQo?JhPB_Ye|AL_m&o-K^t1Q)y0ZUz0o-v1JBr!uz@J0Mqq@~sZc7ABC>Kjnx}DdW!dQ55 zNQ$V4in$QFnEUQ>$VZ+%r$si{h`_nuzey;raG6YrHjYc)U{%@;Ow6;=VUT3kr9|ytE9x zf@p|fL9y9sn(L|^Gn^zXcifGel=~;iXwzghYC(YP2VjW{o*W`<4*3oZ(v6_kB8e0<9+c!$@H z8IY#%IaU>f$Qw!G!M-}ab|G~5G4rs+*yH_Pa?PS&Ar7(r>lmXSFH8T`zn9vx*`U0;@DhEe>mIRe$dFeOx}J=w>kDU?)@4PTj7=sYP){P* zpkf`fE9{NHZF#WBXpr=|&ucpFp;)gT;Cxr+TPHUFT6CW>=Cv6u7*D`Yg*k%7DgTI{ zs&r;`Q~*@@WPmF(z|%{~Cp@xRw2)(BGl5~@^!+^bc*Xv2?Q_7g=#2@t^Z7!O>tLC5 z(;|?i_6MV2s^DN2zL{+gbqQm8UGe=QV;j@eqO@&kp}Y7!CsXERsm|gASPiU>~n0b#oYDo^HxBD ze=v*h4CxXwM0UVqG_Vw@p*m-G^!D{F^}8MBqU3gc`lb0a^;$#cf`vT&N=akY4(?+faVGR>sFedxZAq?cb^;PdQnY7OR3A&V;Pn|CN zZ>TcYOZgVd0`8va9&LMa+>F;ZeV3P@dH-uQAV4WN#hBMoO#@@#ZnUXFPt*f#9X0?$ z2Vj9^7s}~T@lojOY?5pRKH7DZui8}9(gR|Crxh!_g!0s~R{h95DEnjLZ)LW2cUB}N zV6IiQ$#;BuvOW-t@QYs#W8E*&GWdR`ZfD1~>E@%}0NJ5rmt*}tKWUm%>v7l|-~e*6 zl^;)T3F+aN3pWm-MGhfIX@JT+X@UcW5!x{${5m1ny(pH{UR+gv(lqLuJ0p}D+3iT80Pp;Le z09AJczG*HdPyRa1ri{!Qbs~74YxtKzU`$nBexG1 zVvZl3{B{jpW|i-PhkF29GP<&1nY%(@A&kWQd@_F|O>DC4#nGb;eHQ|f)a+X}KJ@-r z!iENdJQF9lP2CYIN6%u;;=+1?q3IC$b9$H2L#)vQDmVNwKVH&c;r`(L0N@ny_0lL7 zBXOGXIvuE@ZoCmf!D`8Tb0j48v;TQbxGR_U;k!{s#eF!C(}6n-$^w>D@S9%;%Ef|= zoEqC!Dq0AU@ZyZf7JLbyo}CXzWAXj(oXS!zbNtH3RkEP-2HsPLn0;;aubUp%(bk)= zag}%5Ub3=rC3Hpwy4hJYsc&{o?;RW@B)RyrellQLUmYkYexK#$`1QjVM#X_B*|^kZ zR`=I(ZW62L91n;QLuVIVtLuuWJvX=kSM*fe`{C%fv5(DfN9dl+k7CU6qvs%U$y0GGKO!HA+UZem*7o!#A4theeE!=Yxid59zmR#K}me7u5_8f;{K*ML5^ zT`RX*PrBg`rX8S`wb#28!!p0~rK7z^m<=MXhTVA#6fg3<*y8+wvfqynPlteVljLcK zj$An88hCB$U4IO?CJ9nxoDX{!%3IfW9HhuXAUVw}$0ly`q_Z$M_Mr0_F9!>ZAoPbK zW)(0A{0S$#Ut^YXVVA{T_InaBfXJPpm;?cS;ABi!2jkpeT2%TowmDjGqEP6rH^49; z^QxttTN3E33Lz2a-WH58MqUOT-vGxG>v7yY0+S3tEX7#zH2qH>paP)cq}0qDJU}y! zob^D>MB}#M0XwN5FRh);nhzEnYrUL#y{;+B`U#~E@jEd$Bu|PGhpXc{atG&LuLA#5 zk5wL|!bXxRqEcSAQehtkA90LZ2-rVp9`6zF#5xFAp?x)bm67HD*M|In`@59MJo7%9 z=-On_K?3vSgYGv2`7XTRFQRdZUWtS$#L-eq+N*`e!Fi4)X)gDt zI%=Y8q=Q5w8lf^pYrDU1V%{wQ!BsynxAMK;HGMDP;Q1MSmB^f>1WRfP+uEF|8_V?t z;HJql)rw!y5`2t{v|aP*zSL{wz+Hkpypk(s;{h{xEGjj&(|tX37?qbM%9UFO4d52~45O__hkdc{`L5oT4)ux^^$15zt|cX@r%I z*hD=LA}z=T85Hc|v-ejC4DqCByPZEIcS1sL*Pwv+`7E4LchM}rGTZ#paT;Pl@Jz3q zpSoHFCBKeq56H9C+5o}h0pK{CNb5CP>Tr^cjDw1}5bM?ABUHD)(%rYJ9<;x+aBJV< zjl;}zLT&||9~gR&KCcGKp*?CWn}?dSGHAz<9Qo!mA%CmlkwktLuBS`hLfyKAs`sLm z1#NSQK%6FC^07etal-(cRrm$5&6e7GTyY9=lZgq|%Tg~GwdaMS$nXeTTVP?{E-73T z9?q003rDu@Fa4Eqn>T>^URhpMNrFb#)$CpR@15+5oOtVMsBbYmO6FKB_BPf3Q`yA# zyT0~D7@$NtE*h$6?!!%IM)~;X@h%=cWd~!LU}$2y*ysBiXbG3fR@xc>!q8icY=D+96#Ex&oHfUXu~; z73}OuR-!~Od(zj)2h4S|j2rN_vpTC>z5)?>lhUNJr$?dJAFBaDI*qj44ql8su@o-> zj)25WA$5cevopV(6ot?T_a0q9KeA?G=cGMe#XlzC`X7ZLi3rWiNjAtMTE+&xx0HM* z)*cs0GTZJbp>n$Lrif$Bwz;M(+^EY)=zjii1e{>H)7AW~mdoe7;qQZuJ~>rgi!Ht$ zjf%`6O$2u{!pk~d>6oiPqUpIp5vYec_i;E17aTQ4ZU7Aw%v}Gc^{jR7_O~ok&UIfG zF3l1q{jyVqIA?=|cTH{Gp-}!O!xhSwxAHm2IWYQha9F0H?8zm`k1KhCLSD*CqijhYKm+BQYFw1I z6d*ym=4|Bpi*bYX3dn4-1lPSpld=MUgFdFr$sBpohYqx5xvmbhAMSn1($f^knZ~Dd zFhD)UT%4^Bsp>>xuU;Sv5jiLR@$&KE6Lis1_*F;9w#S0A`aIwqrvRs)qSx&bY4;00 zpQASEc0}96&^=D@=~6(vR%>tJ`P4*Z);s;p!K|VDQgXH|JKCmX|I1U!;C$4ej8;FW zGIhD`bD497^DlE)XM{Iw33&u}uxy{h07Y4`RQW9-6dm?kuO(B^MdUV`AhJol!cUDl z;9MmA{g#o4{fLDhd8|}D8|T@9-_79WT73M2G*C(}KfoahxX+0%z8ZG@My{!=e~{d% zp&^U&!m2gwTJGXwe{GydweJw`tFP-Gw35yXbD8tLx01|`%dhOckq$PlJT|!Y& zMZ~T`j0k?CIr8TnY*a=#=+liSzR&i)7=EgG0qw{3Z;4@T?I8$Vqu>jS9Z}a4G6!?R9onia5Jv5!5sgH(T)t(mE`6H}cJ<$jqP13s0#LX}Jp}IdH zS|}Ak$yacmsH8!us}5XoD(30jc$h^=seA#63#!&5 zv4sAXh|@SaoFkcKTI3-iWabk@&H3MDQd?-Kl=9PWn6Blj?$_VolkOt7Qkjn~?98+7dL=iM}r z#HDrz@>?&PnrLzPsFEpStR`j?ih)HGY>_5jf;+m~@iU>0<0SZJ&r=a7! zpTSVc{vtx9=kk&8U;>6wBQ{-CzO`DB-e03$;mYn_b-f{#Vqt5NvkvUpG-Tov3Naqd z<|Gh$7EqL)FlA~eCP@ZK&XQ~bT*lg#fBRe<9_E9{a|7NC>e!exQ(0lX2i}wRFXlQm zWKn2I6~K#~K5U@Vh0C@nc&>g*KK|upxYS)orHnjl5i0#Y;MT%tuEU(=99+^Gx;hOI z0FU|a0j~kUYf{Hvq+?_x3KKFhq*)-2=j3*M^vBd+%#VXVWl)V#IJQ=v;#Ruw2kEV~3&s<~%vVY-?E$YF7gc;B=Iy)PRk zuyk`uDg2)Ka>g?<)W?8_&43JFW+ReF>?t7SxPCshhyZr;1SihnY)pC_Wky;+8ik<0 z=fzpB%3#yX<@AF1eQywN2$rfC7b`r)vu$dc?j@Z1eLhJzxu%h*3_c|eX5g2`**J2f zMAVHih-&D2mE+}7ySk~#mvKl**Ap2xOkw6DjV{@9XYFOY`5w)bK4&~yMq2h*ae)|J z94!s~=a;5jyFx$AyA@$S!*PtcB(YmC2rqmj`M>1by9Vi~=#FUen26RBD__@dyPlM; zTF(UM7qICF9EFRWR}~!8j0uijCw361ba&*>y=Ft2w+Y~$H1m{2UMi_)R5+?7yryTt z!^r>3Ymil+EPS8+eu3xLx00OSGFX0ht29EE8SNUu($Rj)o@UTxRw0X7O``rmeOaxW z*bE^MuDV5td8n1Wv#YIe&*k?+Kc;vj8LUMDikuVKv-`a_Qhb)G3_}fVUF~iA^|Mcs z29pIr@3|1W4M-`MB7?YLzZRW^?QcTE$%HS}#gE~?@Q&$*E2&5qSt9MGG@`DwKizz= z)RMe$%^-dUb7!HXDgW4wst(3_Mf%%u)e|OnzoYkqxA#LMHWwm;2UP@~vw}Ror-GT; zYDTpj9$O(TG9Cv7B62706#j|i9QjGI0yvYL`+&1g?>g;7Ff=@{XGD>V?Pq#m9Y?w<7^-ElZcEzh{)7rs$qR z8+;8&d(%7W&OL)ZpZFGja+hv#%A6PlUb#U#M}r{jMie9cdc}cX=#Y!(MR@>A3lvPb zusoaj+lGcd)yqY?yyJD({z&HM+ksc$zIs0~s|i!5)TssUj&Y3QbP_%B~^WQ!>mTmIcv z7Fo<#V546H^VIeMQ4doON+2{4bgBM$rrzURCzGV*fO{WI8|5N5houRoVHoXF4tAz4 z3S+)kI(nEt^xq_9L(B&+Kz06hdRS8A;0IjreM%|xQ>{u~m0XRK#1au3fwVy7@J_@b zGHY)3o+tM}@c)q7K|HHCsDNw`-mmZ`+x_Jzk9j6IU-~B-*Yj2G{-^eh-cxC*+vCj= z-%WIsmat??Sld$8ig)|@@;HPXOivU%!rF__!#>2^nTBsDiiq5ce26NJKpMz1+1F5S zM~!oSDFj5c7X|mD;m>DA(Pn|G?@s#i0w76!WiU--=XbW#)NmRM&TjHYeVUY|r9>B7 zh!sS6*?HOqkI(P4aPXumKH#^zFS(Hzgb%CBRsL5xgBe&(Ba5Ykkz&F_s>ma_!?CGg zP)wzAHmB>eY+9CQ>#yF7haQ54pw{iJmsuy^u|>rVyRF5KSqyo0MC{;%B(uhP$0~1; zvtt876}jZ$V>D6kV=~VS_`=H(0SsiNJz*&QJL%W{7T-(JS1o3T_N#Y-W(zomSvNm< z)sx#w6L=75bU95uNVv`tyze{Zk|I_Wo(lgvmKs*z{kmkY*eS7o9!wYie^H#|jTHK9!qEkVRSJ=Mu{dCckkWN;KQErB zQCTq8u+$JC_3<3tVNSehmXnNCMrM=AL_cdki}3o$(T+ zOxXzhPHRZT;rNn7kRDQ=ya{>FMmvFZ!wbzLVzW;WhpNGE2p!3Gq}!ym+?w6pj<}nT zfF87v`s{p+{vDHav00`EBI0Q!)tt5mcF34?`?QxN{>NUCKvFmSx6_Z-AB|tL2{BS< z>VbmKHK>XGWcqSG3hID@?a)_{au^x_4g~LNEM|C@V|2O~`0%#T8$nywTI_l)IaUul zhv=I$vb1m0{F|c;aX=|APK05y9#S1f2{o!w`$1b|i@r|tcp3lY^Qh1BH+Hwa%t5~N zFp$M#1H<=Ss0#%lbV-Ob_=|33U>~oDrBtS;lupN}3ycLe+OpTm9y=UrdcUn80@+Kg z`6E0gp58_CCzt8{p4~i`kd$lm-Tef!F8+n>RtgShF=Bz7q5zjxykY?ft-c?Ah7M5W z8$Z<)Q1ia9(b~H?c3mm3Twm)-9f0@0#jpO@*3D&Uj2)s4_>SuP1TwGne==gdTzFrR zzx;+Hb6YHiX3fBN{h29`xo~7pew}f5qooSg8j-Mo_^(iAkV3(jhsBh98n~503GU9D zv|JU$1b~-WS=Pd_BFP8wfjE z-WHZw(h^uh@Y|B5;T1tqv#-R)Qi(V!mczx{=ty%PV3xj$n;rAD@3IBA$o8dWenddT z`OL+`-uDe5s0d?aVizG{YgPjV+_|t6>#FSE>y9l;ZEj#vZkNU7$qk*J^XxzhwZN$& zs)8g%REmHVi^4RwmuF726i7A~%W#DS*Y2O%)dfs2P!bEZ7N4>S-BUQs#-(tS(#g>0 zi{t&(Jcp^yTRXr4O|-8m6F4*b#XRvNK8_I-ttA5$Ftlhiy4 zp^@Q|7hOELE0*e~)J>-)E&Qy0u^;qwp1*lt#NV(dXzh`Bs;Tt~`eii)pJktCCBOBv zRsjct#O|{-xJ&OZR^^Wa1un_wwM>}kPH&)I-b>xw+$5ub}L1{u7|56`+=46QoD2+S(k4A%V-lPL+=L~`XU;aC>1IxfuXlC zhe02mL?F=nc|;mg7r=$GSp4B?btClf2rB$@%}3<(w6z(6g$e>gd5>gbU22EfyFO!Q zzAzp$8vMkuNM^-!Jx|`O{;kiZTk3noi-6Z>8PDk6fz%mE4=KJ^;%1WCY@lu*N0RJ!`Z)diF-V9ySiX6Q*jyD zRUHa*9rZxDP?{th5#3l2kw2p}fgw8E{Acbgx|OZmJ??NnPi#!t#}2$a9YBmSdU@MT zC6y)i+$?Vz)H#!-5YkYOqD~+l;^`TPH>qib_&n>#mbP?=GoZ)d;~~&D+$P9Hcut7B z%@;#Hda=9y4*y0*{=^6SIr^k6_~rN#My$ zj_QH;p5&{VZC#Q5HEpYA$&p>%E<|&^eYC&p>O0q-(p}|uU$V7oa+P`pSrW_RBxin< zs2h0Lj(QdUiNJ*$OZ%P)+SQeE5V?B((h|8p(za3<#8S^Ai1Xv;b7h8E+=i0+iW~c_ zr|2Ogk#u_YwucsLgmycUN~Q}Mwa`pWpUZ_1&&ov*cZZH$9FPA!5j7L*n$f@^>G`T{ zTIm!+oI{H7;j23LYt3JM&#jgl6Sxp~h;KhEL?cK~W4*|y<5{qib>)9i)*Py7O$US0 zX;_dT9ZL7Dpj6M2@^Uf{GX`L)wp` z^3tT6rv%tEXvK%Ny*pk0G6vEA#%p>-%GYBT5*PxL5hjwESt<)+#y2+sUw7RnI6i(q z$Q($7wLwTZ5Us!g8;TtzuJxKHuL9eVs__vSN|Ep~DxWoqk8g2*>QIq_!WE@5Twu-H zAhMI6Sbusg0|H)9`>tz>JWQ{y4L6+@aE&s{cgPUDcK=g@+n4`Gs#yJYwxF07nwJqs z_;%>E947J=edy@eJT2quy}|xhouA=h##Ahc3$aAi#Y@~G`;|oaIg~HCqAn9~Hj!Qk zehrsE9%$lwjT6HJ#%Iu24b|+RRWbn_V`eJ-L(pxy#_X6^`yEfgo3K%~6QWYoRe~@f znY=7=EU2dvgqSxAyC;h%gFoxGYE}?S*pnMVOmyou102EhsQ}NyOW3u3%RaMO7by+5 zMhz`2!7y+aDRKlXAghKe7hy=Y*8Na$BS{Df{tPO%f1NU=TE}Jgpn(i7XM~HZ4i3< z|DNKXUfq!otso7o*C1^F0cnEpak!$w41ebHE%LJ~??VPbHX{sf-Y|QxSI)Rgt}OMd z(*p6kega;n4x?Ai!sM2*pi_(&z9+wLiq_*=4nAyrSIuxfNQNbj=gP?|C7S-Y zjQr84j7H9$*uTSe{61CbawCBqgOZb($~*XXHV*)uI9@lDc+Y9mF~ST3^uzK%t0;M| zjv}Cu_kb=mA5k6Pn9ZTSY`|SzHrkMi22$_F^G6DqE}=yRA3rL=XogTbLLc(jv^mL9 zbGxpv)4>piv7%(f1Z)r@5*4jADGYx$q^L`E7%Oxe7`2{>Mxb9jm?p4&X3m1xJx~Yt zK`_ArAGuL@hD2r}1hE8eGFM?x9hiGwFL^yDidz3-dNeJ)2JOWZQBi7DpDX&f?@ace zty@;&mJq6jOj7*L(z=)*?gC4dlYnxIa#WyoR(<~DZt;#nwlYiDI|GM)Yg;cT`PSqv z^LLiUe%eHEGT&8^TW(+{(sniXwdt0Y;*i~o%|2hBw^ znOqK`Htk-|TJ_e)e#Uz#x)2^_SVG?w<7`5xc}%M%&Y4S}W!HHP$6!5483>A%=Pj~J z%o2TMNH-Od8dyP+pvXi-mQV~ij$|$?##(=Qj5a`rg=sDdo`-cMTVTb7Wg!=#;(}j< z_#3@b3aiQEGQAo7Xw=nF89*A>HNx$I8q+z#30uOJ9SN@RKmT?D=y1P*BdQO&NUfmI z3#4pX0b@mp>zb)?GgZ=o6zqeF6jC_r`~!+NKZxWCC{|~pA*rn=;4y_EBCzb<0u8aW zy9#^o^DOnf+akROokG=5sRwy3Uif{=Kt>=d0mve&A(v4m1ar$&nmMsOJ4Jon^H7Tn z7KfGwuOp8-c$=D5l=`g_UEk9;JU<^tuilHu|I(-=LDWyuL~eL#pDZQm8{JbR^p#w5 zIWJG|$d~k36YDt7TwnL8du7$FXk#8)TaMXZdVz9sz*sauTNjQMa#blscTXW%NdA?o z1Nu{+&~c*13`+uV#0{=)eye|h`ROru&UqC(t`}1l8;Ni^LQkWSnGA{aF-?dT-5*bU#$ zltOZh;+c+{T@F5JXy)inbZjlw2J##elER;mahMQqjC!?eYOwbv>kK(3aQ5nxZL>%C z7OBi6Hv{!)^`$*wzB^~!pOF+^Bl2ZiB@OTA$SwcEHvtEbMovx(d-NX#|B{;g&idna zwoHq^Tt`iKLztCCXDVz#)AMh$qN2#->FWCzeq94v`bM7vXqSC<$O&okimzBQ3s&+A zRbE816iM#j~2jhCl0|uY$)&car_E3edPvu*i#0 z^G^Xk?HCH5)m_uu=DRx*srRkr=D(rK#3=#J_qcDm2yApXU7LHMxl0{Y&zQw2@5vny zk&PhrAq=lu7FnV}{Y3O=pvYlJW*>SWZHyh(X9mC%^->tx)CU5g5vsKhJWp6{Rv;zv z>^Z3D>3#%1zpxFKV7U}C(X?`Dvt85sfIAKn4MTHR2F?Rx;9CK^t6~}W%(K0{4 zlU^Ip*N>}x=Tv%rt%i6l*Z%F;>5_Ta(YR%O&+~7YUBlegr&Kc)W;fvMc?Ury zW#0@b2k+Z|AQYmeJeQmjz1Gx=Ad46ts*97-@)RLcL~jkhb1wx$?xg1$-II-c{=}|) zWBIT?0F~5XXEE`VG!QjdH^KhpeIF};&vG%4H}IN*zIb^8)p~{zMRe5bSeR-TNrZ+# z$Cps=#q6wqdaGqzmQQzjwdbTcJ)5NSO6!BCr^qkTEnJ1TWbQ!e2w^t{Y1}WgSx5@Z zGU-|5a2$X{irYZmv(P?f(ZEglK|>y;%q_`K^MZICo}IJSi6FPKxArT!th^6Ef4pHc z7twVN4wNx^1X|Fdl|#<{q`>euAss2q0WKJE;jzrOjXB&yU}QtKRdPmio|{%f-NLF3 z5QvhH4|e^wXcu=N%X1}?X_F;;mpp(%g9kh1PgXZVxxBWbc4acr@!f*DMq?NgB^XYn{%O&nFF< z%(k1Vt%mSf`)oU#2BoJ}PHtAsYivgu#6#tBLbZQVkUlHsb_Y^Y99APlRJ{6C2DjlV z!0kTW^OTJ5HP+cFus0B6@o%L{1s6?|%IyOfYjS+}#Q=!`?Y5_htv~ypiLC%yaf{pdHmdI+4mJ0L-JE^Hz!8?Z zNyqNP)kcXHfvQ0*i)4N67r)E;Uk;a5J3bPNI9#*djH`BG6TWUINx0u1JURQO{_C$^ zPU?bE#dBd?!q0Q%sWTip0os-7FZeg<`SC<(tl5kJD41T5j(s}qp~xAQ$m?aEo$F!l za!URRDQc7Ei@Vc5nf?4nU}1q6#-Nc}zyr~jekd#TT}E6{E2%8f^9D6_>nhG31ZnFW z;6)##+5wYA6qJ$7BF|Z|XhjBNh?}cVK&a2kocsoK{KAI|Jj?_JK|{zvZ)T$tr3G#I;ZolLSo8#&)c) zTW*v`!Cvbj??Mof`i`qkZwzipqX98G@?X;sIyLM~aua;Gju(1L)S3KRhFt{@wQK`K z*l5i22%#e$b*OK5y4ovRTd!8eto?)Qg{$$Zw?ZS`*D;axyrpS~1!@Hy0N?{CE(64F zru~wlosP!e@5KdL+$G9{cZfeDxQH_LH5%&{BH;~6TF? zc_+=$We7>kCFWscAG1}M$Z&S_l8hSo^6ulyAAfm`hti5xEQ6RTNo>oN;xeXaaJl9~ zg5sI;O4x`y5EOpj9QRUjbs!#Ib8;&jbyHZ9H+u1yB|w8H=;eB&z%fy=a09Fapqr!9 zktPDzJRE2&re()jt0eU{popDSkT5pkJSd?%X%-}69 zQEvwh3E>vouN_-?9WMwv=_XL`LzB9a)|M10&*w31C+f9GF^Ee~IdcItxL(7$0l#u4 z80w3PfHKqB|}o8n;R*ky+r*|#i1Eugy$&- zNnIaz=AgHsL_uvenrbw4SzLLjvpXvF*LvpO#JDnB)@#F%;DkJi2a2o@8f%UmnBj3Z zm~xyMk%~p^-lhaV7&4+bO8Nsw7eb^1{@-8Vb0WU%s74TJmG#}5Y0z`@S)m4idU{sd z%gWX(@Z)ATIkp!AU-Z72OI+`aos4HF@>k??Joh!LJ;f)YQ4;2ws{EF;l5n=inowP) zy*^G>)L*3>m&|(}7GqT7qqFSK_sZ||gdRy29EOtfGB{g11ePY@Q_n-ba9;i%9gBV- zu*wiE?HcCiw&Mwc)bbOxP$V=oR~;~d{Pc^$`E;~Bw__SrsZ`z*_r`8&(&iXm z;dgJ>(_$_}Ggf&3psgGmyU7i=Fi$9+Y(VtrDMB8k;m~m8JfM7Ab$Zle)}nStTkhDj zo+|8wRWI@v8SIL1q_fCzhPv!p9F_|BcqQV&d3rhmJ>5_J&AvZHq?`tThFotcO6~Mx zP6@O+HkP~m5vckyBb;Ud zd)%MoN5dU9KAwFE+e(Lyw;SU4q{_%=FOR499&)@)W>zH?W-UB=?az5AdLKt&6Ub3?|P;Io32;)YX5fLf;wi3g&Hbc9EAzB6oS}%S%umwO;I}Y)ajC*l2 zJKuyT`T%ghpECu(KT!dvk}JQagd{)aopj}PNbzjKHn(AL4pE5tdwg|L3CT~Uj|t~Y zgA{S-`BfM%#~%D#FUN5ER?q*u*xwUH|C46(pmc-e&srMQx3Mr);4<~B+D^M>&v=m$ z?c%*{Tlmm3?5H2bhEZ(t{XjEh{B5V#tEMx4lrLxd&s|r#lh>w0d;72Y(VM@g5%5x) zCD+?D{OF)ywmD8iH)+A3$91_Veqs6E;itXp61{Lcv?E!?6MYFgNE&{A9Q@|z_V#AG z!i`i6jg*Q1eZY@YzQuQi^rkUkI7nCu@4trG>aZMQ`~l@$Sx}MwgvdIYn@xI{53ite z#xS&mC9vwazF40KViA*8d~aH{!XQ1P3C4pL0L0zdlW}eJ^j6%n!NER-Vtg!}wO)pL zAkNPAONcJ1UneFe$ehsO+$v?1IWJ$T>p^jyrz^nSc9DA+RaD!hHJ`lrZar|3%^ zE3subK}_w~98lzSZEXcP(+1*ro5zC-i!~q)Htujn^{T33e_h0&l4-z}IE~ z99GbR>Ic#mCbgN_9SNaRV55gvz(6VopNWKcs~LTeFCz@J;<2%BPh;ohB$xn@TW^;H zfwGqwWr8m4hvj|T4&Jc*>Jfg(@h%bhc_b`a&W$qR0;2`Fs~F+eB5&(H)&9xW-=ejP zH-{gYqL)%|4SbFJs2wlPsJMdE5Ie6b?72F;_5Wgf zIK8v z@M>7YCh(REvinjY$GPp_TL-_Tn9};pJouLweB=4Rf-Y$65BnceOG zZ7|F!f6T0P-{+q&y32@I7%NGs;1~blYXJLNw41!`=RodHlyK7Tnuvsg@AXY4u0s5| znt^wc3bhoYVgO6FBW#lbog{K%6b}jpbtdb?{0S^Nr5}L`CzN7aB8xyv$dhUlGhKGe z8brg`zx)lG_4TBHe2k-vpPs{QaSvx_y4vaxy1Ih7q}OjgQ!u5>8GOCoUoTW+IeRB z5>PzSLGKL?9Z#W@DyTBQTWc9Wm3sJ$@8vW5vgu^#FP~~IduTHrwHjsowCYFM zE9!t_yqPAu8p5~5x|J+YJR)|KW_#%pb?;`M+LIJ@HYO5fRpXSa=8(}-gQhHfzo;zl zaaP{EuL{v1K)IXwz~}Aaykn(XgS|0N$gbCQBAJl^7uWX#4QVv=3eu6;p)ul?I}J(t zR`g|2?w8+nsup{Ow&;5YYf8ESjWjGrImX?CP43mW~`F75diA@&+Hblv=HoQuq zlNxIhhFN4{(~9~azsJ%ttW6&_)S=#uxo4a1z~WD%1Sk^NQzZz`t>CA*V>gR9NxZEk zoSeJ(FW}~?G)6y)8Waz_RzTP1md~ucjmy~6#Y}@mJ4G0jzQwsd%t zO%((`4OFNh`~Vz0)J;LGDUl6updE!S=#=22_HK(;lAxeVe z@O^mbm{w#L>(owwM{A_Gk;@@q34TcZxtVu{LfulLU6cXZG2<5Xk}Q3QeF+LKx?;(W zu7W~FKjIKXgL)zYBWxUOQV7(Kv>$M;q2S&Zn|Ct~xMRa4o@Y?DBGt@|TGFCqmuwGrzWb%6f*`teERo(V!C$~kyYIu6 zY7rOsGFWj7Fkus%Xp0lsAf56h-4#~&h9LduoNdPMNII_cqL;wGVUcN<{1pI8MsE=X zpsv_RIywU+AVkMh&o1{^HnXEUD_4%Zuas=F%Le^&YpV|d*Xti+i|`n|M{pa&DbFOT zmi=Yoz$YadKM#O|3jeia zO(p-Kc%+zpYO_}hN?mqvF9}WwK(y*gjXk+HeAK(+lW(Rou6|>f{DH(yGAJssp+Rtq z=FpK9i)gEOBXo3Tk{0CGZd`0botKgOL6tqV`YSK`jgIeKJ}mAm8~WyxXT3@~_rwGF z(2Y(eU)Hf?k`s4@6t828+$cZWS^IQvBMMloQy8}|s6AOrEFT|L0AE#eh*&}Lt7b=T zt-|Th_;AB6^VdTdiv)0nD-6bO6@t(!MTK$)(qft8bbw^BOhTQ7*?VaMT3N}WH6UjK z6xiyOJfB5`Y4b?bs|ap`@AZ9;bja01H1WXeb|joeTdX8KJ9gUI$>=H4>nufKe$d+A z=i)vgMAPqU45HCb4|2zN=_&~UdlV&Bc^60ChU z^T+?S*kVS+9H!^3bLlq!oS|?d7UDtiXTLJ zzQ5EJI7?a<)?*oowv=}ym4UiEt{U{7BTdWw zWkY-~H)x)3&sjtw(~lO?Qrx~jOx`e76@5^Qk2}rlc@t@hMl#<0PIV#PTQXR5Qn3oo zCZn~aXI@Y@}-m6ZYb|!k$YOC4$Z%#$ zV(RAWMPiXp5(B>neJYchyYK)B`_y6Y-3sBqVIxA?w0w7v4ZNJ6Sm?G`a$C6JUCIc! zX(}sCCXAA?zsQxIUp^fL$b$j!09tvKs$oN)kkd^Ya+g0V%d>>IdJk-(t<-y;i|5K? zk|-tUn_obzC0J1vut$x!sTX?5K)xR~ewsHRglz5Kn|QK7u=tFx&}=S2hvcEXTyZJH z&@{`5>6<0J3kx?pt;$iSwq2_Nf$SOPJsGwixvF1PIbK`5Dq{Y+LG{7oh{t05U`@Zt zCLk1o`Y;Tzy$Vb0k(}Uqh*y>Ee<+{V~cRHV#{|Ke;*y1R)pYy3Q z$BJvpfq%tcb`IJ7o+Ug{C)OS$e3Ln;E3~l6E!?hA)il@Ez)dkFnaV8l0mL;*ZhYicvK!eNq`f%$6o;iU zQxC(TN&W`QxOqieF%}P-qCY@PP?Lvm(dc4iI?*eip!pj2%XW@ql#rHb`(0M9oS0ZS z3Ilxa3vck{V|M&J^RrLaAu2ginx|qI{QS9tp0PJ{-$zHA6-93^UH}E~bzh4_Z^;*5 zU|8ZQ|dUH=HVqytvXV?uXdS){zt`z7~~Z8G~g{b zU#hWN&j%a_W->NBen;LaIbbrDCtgVafLUMp?*_7!h~^w!6oywAMF>dv3f!NCNEOGC zMi)NoRtiJ%+(ER+W&o7Vbz*<&g{56SrS~}P%Cj?NJD+d;4JKtRv&;_FvUJuy0?VyB z%4a)o$1{=e7h04SzHiM}!v-#h-(Js;%*;7*|j1{UUyXdYKH0CNv(A`>3T~P6Ut5j1naZ4H>N@GRoID28~eW)tP8>{Xv)5u}OOsnFnv-Lqfbp4hbW>9*%L46eUr-L;LF_gjf26pR1#kFFRF z_0tIXb7t=s`cg+!22dvO^5J_26sMTS_UrXrk4R~9N%P?-eN4?!wSN*n6VY#DemD|d zltUZ9I~D$q{u=NnJ7S~IVP^g8lx#aUfY{uA=|7RR1HL z#z2sZ#*q3v(O*Q`^w9+H=@M>hZmw{hYrO7&h8b9T2ob&Bvk;UEsT;JnAJ`#T{AUsa z6EG|~Fd4yRfd(alk0K9H70j<;uQKCE!5%Stx_S}YO^t0fqx?hhkT<2j`ud09lNeu z8vHc_g$XF%QA2iDB29#Ukz@_zd1qKVEE;&eB`K~WYWtUNA39bxtom3Tw4$O*Q+oM3 zOXTz;z>eP2Z5}uAt6W%Vt!)r_Rn^uThgPuYJ{d5tN$T06)JXX6$M7}J%bQ93Mb{U{ zB?0x&xhaZe1g*G|dPzK+wBxI#V5{IcS^A$?w1)-?Et@+4U_UzZQ#FtUl68#g3&p^0 z&deQd*4J8iE582~2~tDkw`f@FzM6r73(^$96T_99+dH{DS#T>enZ5W(ilXUt)R!LD zOZ6NdCxij(ssG45ni1kFP2sfD4iiU6Boab5G9u)Ywl_z%KuxDZExZzx<%<7`93XDO z?EG-OxzUPiyUB+>zx&GbIwio<_`|^eUJ}Lh&eKUKB8LPhO5{aL=Tp05`Weyxp4AEM zTXdDq%dJ`OBM=#4wE=K2Dm&-D=Lq)>ppV#?l{AuuBm)di=l?t~@YrVK094XNME*&B z?tlG7ATlo$C~hJGy&)7FK=k?FqmBw}J4U&hfYjqM`@iNcFvS89P$Dpa+6#$r)<18$ z|Fd6_L4ex?0Xbz-JPb(p* zC6iMqE6MRFNFAe{!JUYv!&6_VBF{=zSlC&He|1PX#aRJI>9gE#|w~sj-$HHl||~J{Nn(mv6_O zn@&uf-gLg10>I>i+r(;dY$K$ERI*F5WX+OgFt+Su3zaon*+PV}?@P*_ea#lKMfly* z`+a-$|NZ{we9w8$dz{Ykc%J*d?(4pm&-M9mZ0sBZrRWzUrH{3&j55DJB%71pE)%9> z6(%&#vzujE>X&?zolP>Or+QmZSt6>8{BZt0C*!F4Lk_2PZb zNz9^ru+jmj^1Ai}y0Dbz5}5{_cZ{xmlqGFweaEh&>r>Jo9YexZioxzgdVZK5^M}x@ zTUJzIKQboHX0TY>+1lz-VO;xm79naN-~7wHO=6IPgpD|3IxCnS>IVNynYY73$J!IU z>m~D{$j)!F`y&x^U!O5R{4#$`Bm`Uueb7)!&#}`%+CLSv|1tYuB10}|zWmWP_I~{p z(+mPN?)txiN$yDv{Nu^$Xg+wLQdWJeY-|ihhqJy-(YRNzY3e~+(PO>e71OR2fuNUF zS4bsLNdjYY)m_O6H3E`Lz=!)It5NE&_l{oYPI%7PLjhy32*K|k*x2Zg_QR<#J5U(9NRI`Nh4yP_Y(;;HB+?uc8{q>%unA== z!D;XR&ICT*>V(bS#-3(iux0|3Uc@sK-L}+a$60A<|)~oobM>?8AKk2TK!Jn)DcK|RAn>EC@{y1stEyY8V4+J4> z{;v-Ub&Hk;A5aV6j4c4Eau?(*j0-9#;GO=EXi7hxz?T%KTO?M~`i|{{;S<31@lOG* zW!|)8Us(UzB{5{%QRID^{i?Fmu~Y=q^1(!@HgN}89a%lmv|=`VXIxlG2<0}Y#tToi za5KwYzwp=7GPUqFas|EH(C%7(oF(@R7r|4)k5bZ$v!cY<-W{91zrt{|njp{nGgIq> z$%{|Eu=i33ll_~FgMTkOBcT)n@{lVndE?hxBg&l*0LwsEU;?;b=mc&+w5`L5{3t1; z6*TTuC)IOrC0Ylv{};vKg9bDFuS-+H+Sm8JKKUNAt{e|Jpi1J2#Eeo|^215FDX1_n zyu+(ZIvJ5qPS;X7V_2L}>8yJ|DEmYpLlJ`NCJv6DY(n9B+0X9)t7kS^T3Tu>z6UnG z){a8A$nSy#lzf`F}c8#h>7;4)yeI z{(A_`$MGX}dMcO-+9->Nn&d56yay`%l&CRd{Me@7mR2@tBhWKC;hZ5fjD)@^rdjc!P|A@)5^<$j+WzT*`z;V%9uyJTu%^)Sfg7%>E44tZ3Mav2r=zAL z-${o-DvG}%7BP$9GZ_wy6pNURR#sNX7IRx~(+L4?H+q53tWhIP@r$DA4Gg**y((@@f6b`?KthY;L z@+D}y0;7kvUO81q7T8Zj^NCWahVA;$b%j1*bxy!jl}c#7cV5x%2vIcfRvEaggJo1z1=^|yim$dmgg+Cj22d11(bQShzt`{% zG(yHv?doNNbTA|1fYSJ-t8vqG)u$hFN&vN=Z)~B7rHG&EkM51$_4T5}MEKSwKEF?i zxufiQbMT|ivZ6TLYZhHJP~iS)MB=Zc6Jy*-ExDA#^A6uP}Rc?Cz^z}wVXkl!WdcqW(7dm;WZQg zl$e8ZKhn8083SW&j#XAF*Fi}Ifvm~r^esi3@R@VC=i4 z$>sG7>Ic{s6hiiNv2PF*tBeg{FEdm#oiF$yt)75y!DZ4s@MqJnkqn5X1C;Q#k+e>Zs=5 zm!>#0AI6~%Dceq6JvKSpaQXMdGV%iQQm?6e^1~dztQqVztkTbQqZ2O!($}Z>3xO%P z2orvMA4VU+_30>bvAP*tOG{d4VRBqUS?Ix`a3Gg}5z~U|u@W6G7_xn1r&rg$g`V*^ zxiH)Wcyk1lN*GXzXC@?`OY3SrO4tt!On3{U^E^Gw0>68yJWs<31tPRBM1C>vtGv#H zagRhF?cUeWbGq~1165Vk`{7;SwR6?`QI&Fp;cAOq1WE7z@@W_Ge?kuyPZ_Xw4_KKQ zI6-gD=R7TdM+IEj-c7s4ubr8?1F86dpv{m*+7YFP#^PL%=$S{p%S3FaB;~gPsDddzM}kkc^FWDJHov3% z`%?WKXakQ!9{Pm)<)aU|SZlLmuJYXCVv~0yoI3x6Wg=(UiSF;q-`9`dQFB7w7Kf*@ zMJdVrI(eeO5a;hF4LG3I{W9vBjs^wvx8q5nhE$7b zIiyOyVo<@<{3jhJvyLb%k?&XXC>lDXGB1>TK(4+hX7xB&{61wcIG@Bw)FVmO?vLg| ziFx3}SOA`6J;kCh(#8T`-3-MvuCp~pIPr?N<$BIetWi1|QZG(8F)Y*o4kE{=_nF4) zy&*KKIsb)c=7E;~gl8fg`a^|*CP@{(_Co4l7P4MI|IJMr%fH``^dD1EkL~S3;Ud5h zkL?|Ny}Gi7LrUJDvVNSW=pTXUFF+K4Mx&hhGvn9Z95nAsu8OHG3N^5(2fX+@F7oA`geP|$=LX*Gpt|>rI0^#tqLx(MTy8Dz4moobB>cm zQO>XY-&;}!OOgKy`fHg3F~|i%CG~YvBzlnwLx=LTn^FpVu@)r!@<@BXfMV?W+UAOi%@zr5YpCOxk)`H4!sZ5ldm zn1+a2xVdm|VS)1j!3+lpMMKFQ!>FUS0zV7L^yR-z+!yaAB5;N}IyvbLWOXHF$1bc< zfehgK6M8B^)k@eelYd2&GC0tt5?AQ#A$B74zQH_yQDcC0(HMsXNCFo^r>8&!Ns z!6>px8a`cU1g7qQ!UthjKeXd6Y*nvfT-J(S>vZ9ab4eS+h)h?EA&^N@$tSDWM zdW#3p$GyF2&l;6xl#K^E7`XK7sqwyT%J@onV!b{l;tLNnXW+8TesiYB z;1-+-O-;QEAx%QT8t0_oRf zVi>g1QvLu)jyPt8v0S?P{PCI;&|bKDIx)y+_xpr!!rezn1psK3vK}g2I|M_#s~b9b ziEsYCCW|SR^a}`;UIf1%KJI(>#^kjJDhl^pf-1NTqQEq6pGt<9Sqzr?c3sMxC%cHE zFx{8nXQ!ncEgx#WJC%i~>yWEjNw{_|-N30!qHlCm@Ws*AtGT_INLQl}r;|Q_QULD) zc%%_&Or(vCMolln%Z_zf#B&I~75c?VK*aO|0k%YSoOFlj@RDBmpJ?)?22}=ohT7s! zYCj1bh-uyOw{N2C{&g=ULjDRN+|l^^+6^V1iYo0LTk)C2f(PRmC2tsw-bj6(6K`+S zjssRN7KMA$!4=zZ&jPf>mb8gO2^-HyEd1s7P)|YZ0Nadw?SL}g9UVDd$0A8H1rIp% z^MO|ySdv8Eo@Q{+UnFKlZU}IL4DILjz)LJ_h*@7i!arE_T+HH%HsL;Cm)AreH-^w= z6%=Spo&y}MuI4QfXG$!4*mCpoXgZT++)JLu$Ey^YCiqaXN*WK0)q1_Z#cr6O7R#GN zEt#L6uPIjDu{3{ssKVz35KO-VMsPYW3J3~jWoN52N3sjg)X&Hm+*_!&sBT}9QANb5G$zU%+iyh2NOI4~IyBID?k5U2j6nJT1%uhk6F(zR zuwQ^mEBZnYPE~LODb_7_U^5I@!3>V#I_AH`Jb3`zo4TBdJQC}-uxkuyPbL+brjUwWfBt0ym$7{{W@slz`8WBQa=@TPb&C~v#;e+T7cR2`=>HXEPLNQ{}n;_KT3 z3Glpf8a(GjxJGnp0i{;kg&r9$es+pa5G^QRj3AQ{Tz_fc@hxi;5V4MSvMdIB zFD@>M5W)|FS_luD_H%~%$H(oeC5K2Fd+}7gMtk)Poif%e?_F2pvs8s7Oo`$?i0pAT zp59@HK|$+l4?;xI+Im84=_eY0SFKiZdT|h5=`fZWJ{CZgu=`0Q;>P6>CR>?YJMB;K zDMXoF@~Ai|_XH^?s~W^{Hd>Xru&F+PJbc#}uzWQi6af!@qnUw-xt_(LjVGbCY|v0} zZf=ffcP05@tyMFN`(_)T=Hh2Cm3N+f?<2U`%Ljsk5{x`!bSQ-cK^|my0A#;``zr}k{dZpvAPP`m zeu(*4{a8%}WH@SnXE+mp#5a?`H(|1#T=*&b(Rxs`ebDaAaj7dC_WHmA`>{pTIX_AJ z=*ED~szO?`UGi;>E(_( zkbkjIv-^(KH34zn09`9DYgc{nqt?~E_IoL#+a-}BtNR!=qcFfv_v3{L@YNgNp6(vb zU;4o0{jfpubSAR@1$&Q#>V^a9A>`GP_t`2 zfYc!Vl}beTa-d%>5^@ida*wffygjCkkNEWK>(_S_-%nqb`0-d;HoEMY&l_`?o~D(V z;>;{RWNZz~C2dowV}y8Y#_rB!=#J7Wq=LQ5sNm3tku%e;;q4+-S&5|i7ob{LHqlBj za105hyXQHdWcf>CJpAm9Y@E7q%@^A43pdewr|SvR>VVWFxy()f!GdEj3}|nn(Ar-< zYM0!vuF%~ct;)v4<~~c^vx|Z?{bc>d7NvP{xY6jag=)8X;|GtTDPN^HK3UMgyE!<1aNn~W5chnQWtlbjHAyPJ{wvI;()l$}D#aB}hq)af_eE%sd46TLQ+t1w zY!49mz5A#bo&RO+!_ju(I-W8+wyy^eAZp!iaZ+fd*DdFt3Jo%^7<*(^daGr+DOA>A z8F)|_DZ6J8IZTEviO8Y7n!AOo9&>HMq{f7Bl$Sd!Vhx7alxF-!2z5{tyL^zz@t>ln zVk)YbIQSChTd``M`NLL=;~D?^5qZYZ+y)|4!2!k`sJsrAB^JJDD0`I#@vtGc5Ii+e z#PoxkWkXEwXrL`A_ngp%k5j;_dsU%o=wg6z<8`#=(+NBCD%Ng>tu;at~A|h zDAmqumzcFksIDAnJA~%x(;#co3f%wOQ)H&y9(|~C*(FYK7JyG_@-`nih9?hvrQ*#QF z%_W{ld!i`79mQX1y3r&NegZT2Sd59>{B_|BlCN+fn`@#79?`0$O`H?)~ zre+|+E`C-9IPA@}o-4GgZ;hN*B@ERG#dyc5|a_&ERtV$}7WlU)9$5Gi?f4_bC9F*M3zYi>yHNp`+?Mq;lL7gUp zWSj+B2|t!}w)z00mad8q8DhuZ^VBoi^ZG@|#!3d9rUlEad*gFK9Jf1Hwfym~9}TxG zQ|G>)eSO(w>5EM$Y0Tg^T{L4n2(Xp*uR;H8o*w5l8;G_tCB`D|8`Wvl)q{zc-sBj< zOnbG(S*(U4R$QM8?fQO*(oKl5o9gjoXqsd~&6XT8brVam$nE^bZc{Wu{%Fr0xadku z)!uYyLvagRa#>`HKb73#DRMO>%Oow&Y1;EB*w{W`QD3P<`T#P{yRGJr1YeQSTX<6o zx;1m7UKXA>da`&2F*WZTpxp5^iC}~5-OkEwWY-a2WqM_0?gwV-X9QOF6NB5=pGIoj zqmQ>ZFqcBA3&HQQMLAR9Ri_Z;UmZI%Oa*IRJv}eQ6n3c%i1RiEKl@eY^6>`H$a7L%rN1 z%p8GYvVx3FR%rvvN)BJZG~tHK@SVfTzW8sG7Edy@}>hC6O-sydDMJ22xW%N*TK)^xvV8 zMF6Wvqj;#Sja7R8tpBJ&K;OyoPL6ES6!8{TNebB@0}Wk$2HSY0BdI5ZTF2&)(Q~L> z8h6VG65h7I>yj+v{mZS8UfCi~%4r^ouHZL&+$q`;SZr3I))jjH-E53{b=}1I_bW7% zQnOJ7l`KMFvQ*eDhiR_Rp93sYu5N&bhG@BEto)M-OF#%MUsdqO zP}+nq;R&HH+W0^ge9sMxxf0Dq!pEk`ODDV!0%~?f1jCpm1Pr{k`=5u^{+v&K%%=9W zGS$Lo_x*%>L;Y&S#CXSEpSqIbf9En#+Se5Cxk|X5A1Wn&KGM>s*>@@(y*x?{4H}Vp zobl>MV8o(TBZvN+8|q5ux2Ywrvr2so<&iRQubhM_O-r#v!&nA1sZ%$5+w5~U@dD1r zoksCQT;KiYa--;4DDEX`vWH;*Gv6&gaNl84aE4DdB3ECG9Z@-Da64zyU&Hp2Haen~ zSXlU!i;aFIJNvk8x+m0_C12-4OPg9oq+z-n7JFp5BJg)7V0|T9Dy44FzobQtUf!UeLX&2 zDg1bPC3Mj};4=4XDomXtsyV4Iaf&U9Lzu zp1v-jG6OQ6R)Y(@rOI|NA%pC4l9nEks`d*o4lj+<1aCEGCIk&#p*fyVEbNu9E?XOl zXN|!;&7mly{UrZKmmB{>kq4B-k04isTKo2s1;~Pb8^XhJ2vd6e`EnXVC(*Qp+v{Hs zl633Ds4(Kekc@MWSBTZT3k381jkk!On+mh!s9w zOUyN9i`vL`&mIIzjxJiqHgep|me(ePo-@Bwc6CuN&^34$aw~jUBlOA1Ct_(CVT76K z^^T}cqL`MW3ON8MEGn(}VqSlGbmOONs@y>T=XHe853Cz|l-rLr!0C5FVUmB27Q z^?aV6?gO6N3A=A={4`#%2L%3S4?r%RLXWVC9_er=fFCZK=WD^q_4()(b=n*@Q#y^I zfU0%tcKbT7V$r&1kpnpqc^17t-A|>V1l%^{mNalRB+C|W4(b0y+Yo9-e&~~PsPwCg z*I{~KFVIELEXyifpE6a{gW=Ksfm@WA!%Y3HcZ*1PfcfcB=2Vo;TOnI(2}n!_k@mFa zQeyFkAQ|MLrv5U+iH9y~5fUk2b@X&^Q({<&EcA}scYN;esNhmBiuw|q#lYy*7C#F? z^Q-G*knmC8)@ACc2&kHNJa+-bcWrpoQ8l8>?u5norYXD}BFt=Orq)X$DCUmx1P}9m zV^!{s!k~o{NgJI|paR!>AJk9ISn-|N4f2Zj)MgqN7xy^(pPK@<;)TBnv~9y-HB`YZ zMp8?wc$QRP#qXU^nm%`mK06{mh* zT6!YCG-w%Mye(+>+Tg^=dier=`VRITP(Vz(^F7>iM_vlaiyEOO3L2RSe_o_?oAcO! z%`bqII}T^}gNv&~$i~9$&JUfs7=pIQ+c%U^C!Pej2*E3+4v<3M%jX|PlHypSBI<*T zyMmdi2kx*V1UJ-K=^vYDF$rV_so(?}Sngikzj@-_2UNG z&s6_<3&-E7$(4DmQflvTPXX9|yJvUy#H!14nLt=QU~J(wb{sR?c)mAE#Doozg4{{Z za`{G+@0X>5Q&aMwIboOxUpZ=U(A9PzY0qqB#8!`SS!Uw$moA-exZE@^h~cU~nOS}n z38oxH=LrYb6h~H56v`ks&i0l5briS4fkzGAhUDfIA%wz?Vp4W|5=Xy^ckE-I4jT~D zA_dV!%q*{|O}J%-sBe3$ck=P@M{Cm}UoR2$Rj6yIpLF!WAIb2?y1$JTLE$}!99}){ z6|Y!VTjWJu$sQaS$V3+n`Q~iurcgg*S7KKoRMIWdGm!G&`P;(ryEPpSdrk2$#9iKT z_;?TbEJHwlp7U%9-gP06{d1?b!(%aiRClxeY=mhBB5;2vM<3BAZaQ#d>}%i;-Uzx# z0A43>;f{R8;e@b-+fAJDEjl4{5=Z~&qmha0#Ncx=SS8P`!oSxBf7^getw4N6o~&+K z62I7*)@wnC0&^OVySEe-4>L25o20aVwx_bUQE4UuKNxXUw{B@UAbajl6pa6Y0KYD5 ze!5m1`WEzr0h>k9P2d_#em1X9E#P@NU>Rp8m~3b%h1@=MCy^8v^S<2MT7_m6vnlnY z?Sa*u2W(Lhlsko^NS#nshNNX{*2f&p)!6Accb z#Xb>n)aRoL?yc-hg0luR(o)FJ2;`}O;NG$G@8s6+PyQ+*6%M8-O&BN5yulV#YhZR; z4Es3asLmIou5O5Ls8ho!SGa-Moh*7AfH#)if0$5mbh@n z+BNf=>_Q;~YAid^d};X<51CKboc`OP-~-?gpt~V@RD4)EdTe6%6xaO)lz49I-PC^=U?Iet|?d{vo z##tNZuTaLkmBLDhehIeMyf$$0($-5sz9=gAhQqllQ#JU7y44 zaLX57I}1S0uPgSkf$^zMB&37{X-#|5dJk2Mk+3K-T8^wN-bkS^~vX9&ofLTm)o0*rampChA5)Xr$#aQZB?OoUE}mqDHt z@Hmm@fL&;)L!yF(oB|Mn}^(}lIx!= zPkth2uj}tyU>q(>R=0^RpY=`Lpkq3-tsXHK|kiKq~xT)}~sYi5w zovk`m{QV>SnhLg*-oYm0%HoD(g>^Z`g{4x9K(qF@Q4^2{kQU*M@VS9+i!jihYR^VyXG4diTa1poa%pYuhZzwHYchh$Y*vgklsN9$1`wBkRNyF^mo>WOz52^0As+71d*ZSkgbi z%u8}I0aTuCz~iBrA3KazkxIAJ+WO|=z3M4-^=?w-^9vUi53*3Q=oP!1kN(u(PuJdV zP&y>A52~$O!bY#}o>;e+KKM{shtCNmv+62!aCdD3`P+CD6i z^}eR3C+4`fPW?TcS>l1`E%)K7+FPR{NgL%xS76abU9xC0pa8vI*Fd6VJ+0-?l?vN{@`h@JdPA7zZNj47|{;0Q88B-FYsQTt| ziCM-cmQ@4hD}qAwoigX|mMfOi>OBd)Tk@%IVB}(TMydbc7|D-~D1vW+$`AiK=}1BR zhCU##%j1UTciJ4Dw{aIbid#AEWw&sv5a(n7qNlcYW``zpbSxZ~7%>rhWgi63T3OxU zgiPCSMgC{K;PnegeADr7t#3v0AtZ9v0TgRz&BS*VVFTsmH60JEm-ASbTEa@*^7~qc zO%6;SPj*LU-e`VQkX2UJFM~`KOamj8Jly*y^9dBxkp|pO8;F7{tKAU3~qfJiEHqBvj2=HuHd^3zL3EO-@xV>35wKf7<5bzLZr9Rv(PN zpQ_m%QG9&xI4wP$Gx6rxUK24R)7rT&IDGMN%9oT421+unl7Lawc39$un$QnMvW=tg zOXDznBhSsY2{C~w?e0?&=G7#+WDz7ml za72@EjB&HUJ0MmUs4yV+6s4irG{P64$6N*j054$kL9CF$JCQH_{Q+GUM}@>MUJL}q z#m?{zoBjs7_p9ah?Pp&>DO}Ij19G&BD}eiTV~KR^ha#1%Ip@+l0{@4eGb~fbN8gVN zB*E44#V1JVhd&AQINT8rHg^gXZTBR~?te;O z2Y3x01Mi=6_$ISRkLtmdLFVzuz`(%uIx24w&;8FYb_N+MH&E|VJU82>fRYk?z?$c) z+f2Agq-;*Gj3g=HEYM%2B&QdG;ni^@cfUFfCK9*LczSPriD(9ccHOzP(9)9=P zHCy~~h3qYIaL}nocEOtE@*^8YIZrp=fr9=&M~MQ8cd1HCIy!nJ)*q%exsngHyhi8e zv;8h{vRW>uP7!9NnQ#g;ylrl80O98ZKKyhWi*n+cz*p_kf$28Db;);{G6&9%D6^)#`&5g5KH&Go6AHp z9BN7ym8G5#c%fU8>#Kdksav@3TLzMsUU9W01NtgCJ9 zZ`*3x-cmGcm~AEUBMhlwduNtDxRVBuFJ{eCfES#m7GP$o7Sd~L$CaUkX29Z3;cin? zDtWim?2fZ|Z^pjB1+jY%$>a6y8NC5MVSjlqrrF64GewAMrI^320jYOSlJ}_%{h$#T z+=yr1GuhwzW&*l9} zoEHg(pEknkBp=@T9dv_qQR#jOD`FYfO#zGgDa&Em{G5bC|MT(#>yD*!&<-z7pu)X=MAl9yc+@`Qxos{Gz*-)1`4<$i%WC^8GA0^c$FAb*As>1Lw4I?F;m= zlaT9l1wd2d+zM#EPQ~3cgnxfLaZrD*;w#O?akrTi27%^Tps!c94#a-@8@%5g908e1 zNeTIJsA`7!&emT^Cy^&;aH z?}ss6;0`asrG8^f+=Jeu6HSwnAqY*1U22s$a zP<8_}e?-j!%`0EHUIpH`D$9fKJlY{|5HA6Z)>Aq|XsmIk>5x;)i>T*k$|pFU>Q|O+ zZOjS#468$c?C%h_+saPowK@`G)`+KbOF{t3b zOH98_e*nJ$We#(KXLqjdY}E=ALazr_Jo$03^;zpZ!sIgJ@%xn$b;+F}Guc8?j%ZtZ zZ^AqX@RItG=u`EiOi zL&pp9#|~z!8QasL!aImJMu0!Co9Q9MwO@*XagCdw)==r^9dtOG=X#wE70ue@OqVf` zpfhlr3YY?(*{5O*PfCB60^bXJ&hG;TpdU-{LupAa93aTGWKQd>?GIFRi*b})uh`z= zM(MNv6oKUd(97^Hxk&>9)_^f0M8WWs)I~7$LT-C7p|9{S7r=7)C&TJnx{yuqR)Khu z<0c|Qq#KvGDHU;xF9C9E?asu$-cm}_`}&u#a~ z>N^y;ZdLjH>kMo*g7>Gg0Pz&J{DKIL

zL063)f93z4fGGG@=E93wnvp|B?}aEwSvDU~o`t7&uoO0dRr`su;0*Iv8}b2YsZ$4Q z?+aOSJqJcV-GQL}4pO9?>K~2TF0{3NJ=KEA4*R|`T@a79Sg?~*q> z{|T^M9>=V{!LGn1>?u|#E$d@#J{<0ttXwo}*uG@&{SZSbv;MJnXlQXt6?Q%*ZDZaz z>c+hUGDF6`jYT!=HNBnK7r!zWnkL6y&aS5gu`RJd^ku+~tT}vi@=uuD{c!9hIUA*@ z-RxSOs_SJ)2dV#=rB47~23le6B{!Su$$e4v4N7jOTl^R^S_xX7dXIkx*pu~KEw6Uj zJF|y)w)8a#4$o8Hd%(KQx%1;*IM{96w*mbpwup;P^PL3b&_w`Gu$2GOAv@$n{4`b79xjyI(6<`h|OT;FHC!sKHPbkNV|wN%310P{ zRMU`M@M0k=0&Bl}aCGpU>eX|PJeEXHe7g+vskN(|2^J`i0$J>ay7(<>JHeX!MSWz! zx)LeI`8tI0pKTudl8B)w^>?bF!sCW!sRs+lT@4+$1LpZ6Vh=A z`nhEHppnm56TOOL+O7Nxddk>IKn3Q9z=Kt1*&;wgFB?a{oLK34AJ-ZsGTh4oZFNdD?khThm)s9&+5AP1fWmd> z%rEzzk65KJjYJWSNzIRf=rxk8yJm`Vm1I6kuL(GI{ob#AlU34(G@m~}F(O8rgPRh& zG_x}@WG(kTTuGCUHma@}OulMuS0n8?JT z=BBrfv=}8plcv=_S{IoN`KVqZ?LVU`vZX^Dx-MN!H`{~cH%@weL3ZH)FNePSZBl~A z`<6Usl+(ULM_JwFCKnXlTbrNEHso6Hj?!>v1%610wB?Gt@YN$}%7fxl0xLWS8SG$v(RfsLpw}oSFFv z!fkcU2x3?ziOx4uqf$68Jqi^Se6^OalKj%Ry_vp`f2(4&7B*@Eoq^hk?Q3$go4$OM zdq%DHqsZ}4i`@K~{tXqRqn_oK9(HoLepw-r$wX_mW42v^1G-GazK12h=HYD5CMiGb zYH#DFd~w)379UbKH5q#3+}3L0g!IvJX#N|O)M@=T2pfTOKs|uYFAnss<&c`C1ynGH z+h8TaE_Gd~36w+9<6AeBm12j{G{`-)P5uCUtbLslAZ3ygF1r@N)zD$a*jV%M=&J=j zDLUaMT7H+@X}`gj!Ge4>X+iYdqllew__fh;km@X5%B5FwDo>Ppvk}<|`$Q9|k4=QR z^ib+PcRWR5gMPc1r64&(L?shNmeJ0G!uYl1E7U@zD1vi4mG-t)uZxDwV7b`fjq2rQ zT1LDR%i}NvlqcPHm7^Bn6#UY_|B6XU?C8S}V-0IC>jvQIP(yU?3MoE`j^3~yt`{T^ z_20DL+9>BnnbLUtPXo}mEa60*O9tQaECx-w)hu4x?4jYriO)* z3LdH5@z*R>!KoKeo4gUw&wAu~nM`@fDkJ}LO`>km=IZ5UJ{7*X8@Wm@0CDD4FWM}i zaxPG=*_k!w^Bu@0fd74Q;w@pCDkiAA-}G4F4W?Y7mDa+GsS*nNN%6IfZ$(f+J)}D^fL$SvMspn1;Ju+)kab&4xPPcqBD+W<&MJ>1_y~h-5)|> zqqvEL+AW^lP9&?C;&9(!sBszt#X{72Zn9m~SvnPE8d=lWby0M?=|e^iXPiYe-`j=f zj{`SmS}eC8s9`f>2dw|csp?jBa$-E$e2S2I`9)7*3nF9pX(#Nx3~(g1z=Iw6#II(-BU_& zh~LfW5$nQj=zgbJ$b?zWi^pq~Z1fVId-gpp$iaYUb?l^s!mp?sbsvj*=%(i`WF9Jh zGpmK~BEDnGE|FnJii(R=hh6Wa) zrWqDickG0J|t*D`+KcX@x-q?eSaNvanL>wk_winnw~NRrUJf$!E6 zIfBgdm4L|{4XDdu^!aviO9rr#VzZX{5v7VAYC)Zm_65;z<*4{eHPpy&YzSP-rP_^C zTJb$4RdI5hyF}E{U1sQ}d_39zFOV$#5NmkKoc&ao$Bo)#%h#7@WrhPn6WjZ5ORk{i zHx!^CZ!7s_^l{zM-QlB(oYTvI)6I&O78d1)Gmgf|b*=5hUrHq9HreFc^iblvOv9~q zD+V|_^`LSBj+MY(B#uZ$fJ5Tz+3!}p@Z|Sn;$>XySXSSvswxN{>Rqf>K*89f(Q^wN zCf9Dvg`A(lX#>JauiV*v140}tqJ5XMasAmOoWtRpqbNl7`h+=%tuvwR%U*Ub>@lzBrG&FH{C`)jU*QLah+@*XEoKKxCK;o2YEPH=dbR=; zGT4k2 z74o#q>M8BI6Wr5@5*#VIdNB=Lfg)6u(9=Rg+i* z6wL&CmVP8pr53FX=XzDhU~x@H2jcI4JTF>O%eA`K$=7MWZKX#nXrki$;PyVby5rTv zOFSm-F!%+}&wMVAZ7tkr=gT&NbS;-IcCCFpc+}Z@RiE)%Jq}&(NcW3TlAi5e3SZ|; zY!T&mxk9Efc!$MeIa~g(xT4u598)`-_HM1GjK6Nr75&8M!WZA}IbS9x@7dgL>12Dn zQj818=h2wlD_^Vr(d|a(+_!etd1vm@oszI&W(kO z_e?DOXz?RFsZtAzG3w{l&MX6@_S2#ix(T1|3SG3ieb|Qanb+#KY3XC;2dO%xJ{Smp z^PibdaZF7LR?~kNbNbcR&#l}4R-cXSY4~xP)zZsFDHDx*8#9}u$1{A!k=S|LqSudthPxbOQsLK(t5mrSy?XqYQR3dbu z(jS*IEqd=JUq0Gu74aW2JO0V41v|B-A1K-@gItm4ahXwauByCY8jt%17<0cW7OeY4 zVZ6Jg7ToyOx8865ltHoz*IZwW^mT2Za9B{5x?Nu9f$6RV;(f9v$zPcTEU9T!Vs@9p z#ywC&B;W*_O}ZcrI%|haK&Nbj+hN}|@#FdrY3l(Yc@jsDZU8OSVWY5k0x!;RB{xKP zWKEtOwQ5O4Yubiic=?I*P_Y%B-YN3Kl6US#JJa{JSS`74CdT$9ED%Fk^7FHO|8*WH z3<-%&LP&69J$Cs1NdV|S#G$$B`#?RiEd^~?*%#G2eN~A1`AyGh_VTyqLG&!ax#gJG zxDt!e7$?wu4*Oge9MRw+Qsf@Btk6oW!o?v`9od4SMFO3dQkUZ+_r0!%-ZNh3M53g4 z-xp3&;b_rIAo<_*W}2A-{ooX9O-*}9!l4zG$Wo1I%vM@$Irk~`iAiv3{~1u4 z85#fsAq~U~29t9>3_|*oEo|Spgd|&LYogx!qDE{!cTEo|Pv|O9bR2)v^4avHiB~gv zzN^!jewIfF;j!UD%Py!}*{YB>D_VbU{Jd#G#A*uZsXw_@ojNF5L6hIs+ik`_yBquY z=u)+&IOocu7i>TPuwd|Be>B)PSwqM$%*sYRkB7b#(0W)uSHUTAk#Zl3@r|={h=E-0 zqcwA{iKl7eXB+#i#ZPvbY>urQ-h47|98VV#LHr=-Q#=O;ce4j)9UY-H=M&%E0dpAJ$G)j6ceMK`L21VQ^vi%F+Do zNVz}IFh)1%lk=#~oxHcC)Ym}R0s4)&@#{kZ`hqdNvEi_c&;E}>xG^iVqUt4CT~L_H z_4&!Qb5v`_g(25FxwmXuf)-JpApJO{fHl5vdW|aZT9O^%Y?Za_O7M)5TVvpbmbc>` z85+=SmBD)%Z#OL&zu^J6t4Nf{ynFW+NkR4OvjdzpGf6OSBMV3(msaJbD<_|!KH68q z5?z)C;5_-Q)YMHsv087)EUY7*lym=!t|_Ye4aDdKn2uY~E4c1Y=4Ho8;Xw^#m*$%NY3MRi;2&E+h0!IB=2H=@IAou{c&V#I4ykiZAd%n}wO{|x z{csr9R9yr@v+2SM(0RL}iG7<#)oT3ibjQ^}<@& z64piJzdv%#{C6Mye=~K#J)Pn67YgrX;cqL&19-Zg$8zYis%9U)D6;ATP}w*Qbm5Py zi}<05%#%YCdRN4qCeKcZ>U6B%+w6V(-!_9fZ!7+58x@NRC?2XM1)$PoY|M*~8@^^| zOX=ar*p;WG(?;8~2LaI1tAQST{L>%i7wYe;UgKB^xBZ-FTy_qOzwToh5q~_>?+*Fm zWqjXJ657G+J6j5D(doy^BY;Qd$K#cT&X+bnnA@iJqYE&qq)6j1#YEB4P(d*);jlSK zNc7^Zf3L*ft-}4^#rY?!QSAbs+4-?4J0Ez`F7XiKdsc0bq(B0zA{E@)qq;c-3>{%( z4ZC4*f>sR`<`tMquWWuB_HV57yAhv>2LxR6%tr z#V9r?>8J>h%LcR<>g&g^0*H`MF}Jfjs_)Z(LDTOC6$s$JPGA{Q-%#+&bLWF@-7}WQ zC^9h2K3*>Mx;#5x4jIb@df|a4me&-c6$5)t`<3M}#Gf!+Jg&h8`a~F&r-{|^0D{&} zWFkDSR2Ot|V==H2suAC$08P zjk>QSv&_Zq)jrm|E+_I&X%qj$%iZ5D0YL5W$oI#o|03V11;iT27a^bz7U&M6A1xCR z^0^XV)MbrPr>wdq4j{>nGDsftXGJ>N z!I{D~?CvyG?d#b$KK+}w{?ky^(lRt64GKsOAsr@N0|L_B4MRzT(jg%z(%s!%(%s#i z&yD9-p6B_m^}IT-&Ks9&3C`TteZ{`^{(QfitmLj1J;2Pib@dDK&>E8*=6?yI04V8w zO`NGw_D@uN;>i1dK*d=&^gqB<0`cuc9jGt=q)3&*ekVKVMP+0U1m<1YNkkQK$c#=s z>K&l~-DxMvRt%t$h=FJvIwksHwUnJdm!5#;@17g#I+m32{ObEx&Is6KjWvwb-uPfqCsluP%nC5<- z*5CpKj$On+W1YB;j*>eg@sB_Y9w6bjh0IwS4W#HCC6tIkUyyi+=u8#Ee6 z84~{7THcuEzcbe4H^K6q!1bT!HGx?E1EfL8@}#Qb=1^1h?8*n$fc*Ky{P0xah*8N@iV2* z3xHl=*-aetz@m!u;4B(>h`XlP$8B9Gjn>vz$1W?);lBg@*VeFNhf=&n0FZ-6va+(; z+6FRu6Nh~(bcFb&IVMiMoJ?+0kE){MX)6Xo=apQTd);YgghNWi&-yv%fbEAO{2hK( zuL!+lv@ftxnIu0|F)2qdGEpa0izzWU9RBm1Qqf1^->$fM%J#McHJVkEbQ@-!ZtL|Z zL2aP0#zu9lD35g*p}QCRAlhu}wTp&fSk}&s-p$qQ+(vS@%uHG4cA6Kir`n=j>B9=ps z)p-yP75mxrcHvP)8awkayH;qoekXvlZmyJOO#Hc}OCpJ>dge%p zDsoc?e_Rj<i5%&ehk}vL#u-CJY{L}sRI9lov1cOpwOSEN8+`kA>sc^jhc+$eOR!tBW&qTD_nAqMK|+#8{#-YIRn>g|Fc_of|lvoKcfb? zKsTAuGwNWNN1m^&$1)^-`~VYCcdk95|M|`AhZB?!*rTrA3_bi~LtKw*ctuD_fYq;G zT3UJ^C9UA#zNL6qXN@hYASJ+zQJWhg0YCI?k@~O74Op0NRKO>KD8h|E;boDaC zp`N9M`~&ZCOqceo|C!(h#zK14Gxi^GGo3nvLm$5M84XE^- zy2lD{L+{U#VDU<21%OJDRVtN;qvrGi{D0AlS*>^Rihs;lYdqpfB-#g!Pur2-=qlhU zL!_x9ae9OfX>GqO$Y-UE{jqlyY~Ft%DwOWOG-{QQe>7@h5#s-I*deCnIr3MCAub5g zV*t@PrYrt`hZy&7aY;`5-$=r{`SuKO2#t>f+DXa2pmeM2D*5`yoT0_QGDF0F-}n@w zN2M}rK9H7=PvQKMn6M6a>yvpW)oC0coMIyu{A2YrY=VI`4p&$o&V8WtmyirF0W0nE z`KK=Szs-}MB05r-V9dgJEinjyY&Id|`)kDAN@0LqslFw{&8bw99y6t~7REW*+P#+e zdDmX!bad%K^T%Nbu<8U}sm#zelD9zT9CTU*-uvQU}-_;kx>(`qv@F~C1L!+~V zw)%xV6BL|%w|`v$Py1u&BtE1Wi)bhm$= z_zA`RfC->y;2;kDr39lU3H|cFgkT5VFM|ku0W^_E;A*>g;aiN>1B;piiF@Adqp2wt zAa&Ir2Smj;&z(5qd{%^RHWd9=S62&wG^Bt1-OV0sDB~SRQO^YWuPY$g&jVP1@B^sL z9maiYX%(R7YETLAlWag&Pa#vl=HQ-h#G#Q0eip&~9Y>y@>E8kRDSyAN9|4*~0zM~5 z1WQN#20-|z<48^I_u;&6T>NBWVuA^Lf8BL zkf_sk8eo2OZzr|z`KFdqD7Uxs--w2aLz zKznvSHrEAA*zNTN?B-+)H!I0r?H(bTiOtK-KAaBq#U%0rYNUeKyAJi3^78VjnVIyi zfY=xN{u$poT*2f&;!C_}`oJE9>rQ*0skUq*F@$HOxKADl060v_y~}~$V~6R%=Al@_ z&PX~Tx66`^g;jNP`@-L<N!-7?V$S>fvs(Jd^O>9s_Z|BJoqV&nfl>j}Bc5YAQw$h< zP*E|as*0~)xHFn|F2M~(A@Jhfdd2@up?39dmC3ys%(ClYt`CZPQ~vGcSbbGHe1N4! z+{73xb9Opq;R2dLBQp&@lzZfSWr{w_zM8l|_wRrbPyP-uBH+oU;>4N{TC`f@C|QN} z14>F%aXMaEh)aEAl3Bgib0>?3`1`;&U6(o;Qm}xoXYhV+tGZS~^>Y)f;rnE3GE>p8 z0>AHXD+IJysqs+&Tt&uRyWBPu-h#;iwo3Ig=}ng^(Z=d0Cno^Dhl}e^ZY@>ticj03 z%%ds?i}g#DRBSy^N=BlQalw75u z&n#=M%bi<3!}<~x^@pGq*I?Vo%e#GlVfg)LB?}*V+?{!_Mi=d%PccCJmzulb?TksS ziXNB4`#=`g7pUkqimlB%0F<8p)n2`DNlA$#D(C6NJ!W?OFxz&ax09JPyw2>YizWb* zv7#`NTLLynSB33I1$Wz5_l-cMFA5PzURY-k(Z}-HW$)pBi+}!44D9!N4{eJZiG=}D zyZdl9v}_R{>ixgVDxa5-;YFT#r3M#H0SwibpU!Xj#%xRwOlVHI!G0}OUb=M2aS?~*T4 zLUhdCCTMNkfrmiVH*>A%LmtiC)qV9OY8?*`{_5r^dtxgu=9-llCAs0CUMh@e*nP#p+U1aQHL`cp1PvZlMefkJ#E zLL(yN&;|f(JsgGlfQ@ZFjZI7Pl1q0N0K96~s$bOx2|%nh7ms9MNJ3YD8P?Vdp+qLf zV)7ci#{sVn19&YqbQ#_Fomu|gp$bm%iHDF{6n@gBj(z6lex_hgQ`yp$O3i2LJt03> zz;hZAv+#J60xXW~a8>CON)YeMT@ig2 z0ZZFCT&H5m3RWQCaC(q;Y#)y6gZ>q0V&J;Um2$A6%+muxL|RkvEC{9A^l9D`5E z9K{O#&hCdG(qXCLNDmmstx*TsnHP1^_o3tBAfcvOHlh+$G<38f>=CRbxl*)XrlIy@ z`WyibJLkB)4*7*8fmE*(@4P2+6Ze$q5_P1FM3E4+KG1vj)JCFCj#;b7Oflu3s4B

yWS9jhbkxN8z3KZv9H4XR3{F!z!xACi~<-o zd!yor#@_?&=Sl9)YB~-0pL||@EGb|PO3 zsHl<-OW|0s7VEQ=qViyIW$Np`-4>4(ChddjOXB8xH@I5onEvq7et<2~sU&9bBhq%I zas}x0)BV(OvM6r#(HOY<4d4P}i*s-P<>tY8#aLl2n+ zvI+V7-r-dme;>Cip<*Jw(VTrX$J<#$zIs`3SiO6(Zr#i%;&S}tMay4KP3JL)G?5DH z#M6L>m8B!lf>krNW$t0up)Q;nEtGHbiQ>b4EGmGyYizign!AnWQbxc9IgCg@slPt# zZobDht3_f77vTfcqP`XUitDe-L{#v!9>a020}` zQ|Wwa+b=u0>xBq@C+2}eU!@xKzwYUP!_zkb3VZiq?JNFl9YAi25xz?#%y9?b4o~+) zNRz43z5#b2n2$tnZ>{%LZ%+vugs&FV3hnSTLwBb1Yt{#7ef~D|XL*X;%gqWWgWW$mQL>tOvP@?f>*dJa&cjGbQ~y%svpw zq3Gw}8v(dJdp^#e|!_FA8|~ z=rQd1*wIk$e-1C{gAzx?c)yk>CJG#af6^!07Ji?jg66}grD$;es!U(nk|85thalc> zA!+w{N12>r%85S$RhZv((70ZN8H5*200P2v_L+9x%AFAqS$3fWVJM0vh7a_AO(T4t zzm9^d_X&SsL2zuo`f%i}Vr6(L*5SRXfRvQfx;L-?pH#>w=l%Vu0zISe{t8>hjtio5 zkT?FECdAv_X-GhHTJ$@^upR2L8jjFOi%*h4>-l!#LG!~fkP~_h!!nuy0015re$8*o zegKZ_-oO)WrHk%e5$T+E!TK0%S@X0KMfQ?&Sv=gauhdIfQ z4{SHIuIpkD>jirt0_R5;S|fkM9rKF2X&Tg=7C}SPx5c}aQ+zE*@Kd6E%>-_@YLD{g}B zSRfvbC$={=zQwT@i~l6|IXgG!`?giTtcpKM%#YlVxG{-Fk_kUB1D*(RQ~%|{>9*(BCfdT>t& zlVP_FpZrJmy74=}{%-=vmanD^SiZE;$VI?b=bwj;LK9{AMAQ;go0`bvFzrGL7|m7B zNw3zW+2aBwzE9=#`xd%j=$6F&a zcbFdTu?ox$D&XqDPLj9l4nkNIZ!HQL?b(cg-@l(SMc7VhQ)}Xi45u zLrMKDzo{=e9GWw}CBmz8JSp@JFwmmJh|?mSuFPs-(QH0C>23(8U;f0u==kcp!ApED zht4Z?Ao_TQc0GGmw??OB#4VK)WE!|a`+7;gA;=TvcKlk>KSW|pA+7JalXBx0PN1;A zPaB!viJ98$P$vLFL8g+m!kD}lRj~3c+C?dP&8I(jr0;%U{Q*aOq2J@yW=qID+P~tF zjAwYiXg~O=PsCp1W0t9}fy;nIah>8h!5u|a zG*dgn)ZwMv-}w+7O9B;jR4I$Tt}^anWO`^aISOlC0!rmu`jfRgu(K{Y)Tf3!J$%JtsAQL&gj9R8($hnr=N?5K)X?wXd@ zVzp96r9x8|5LzA`C7Hb-5W^sl!C>N^zcO8MzTxG{$L=c*6io?RDu1A>nxA4iHSq7O zGC}te9dG$rjq?+0(r5>P^;z1Z z?{$q^18f%WP%-n7-se6U{)FzcYIUDEVy78vPIxjSgI^pN$!@bM=dqvsKm|}$tRZU! zRFJ;+aDnn(ID$GfDKC;*%xehVIdY0k${rQr9eL zI$vb`N(4&W*O(Wiyl?@W7%eS8TDUSdLzPKSVOZJ13pZaybgCTurg2Wc-1v~tS!|$L zXqQ37prZLte#*`Ux*1)&0d9fYMD1daIBG;48J;u> ztp#?u58j{x0x?Rc8Xc4zW8npSLBn?NrMbA?vfkIBhA_imSnzu|dVXcY$I-J+MfW0g z>XUdd@58gaqmM|AQ)B;>vPgc!SkW5iz3#N zLTqv`G6!CUApSX?azL-^65y>0T2o=v6$hCvnfMe`pI6Ouk&<#k1jP=0vsb2~Gyl0T zU@6?6#GfY^r@AP#Sr{1;RMeGcp6kxw>Gkk7T|R4<3?%Vw%n^;E1wcj@mv%H_-3hcd zI<&=jV&qgjDnDAyLJm$NCCNn&=~d!f;=Se919s%d36XizEA5sF5D*wY_Xl+;aG7+; zlbZgKSbZg@#~%hzLFL)6Tgu)>sXZ2a*YUcM%*(;QOR4s80kwa7(?-qa zqwclrwl8%Gs|@YPxY&W)`iT2q+frTf;u;AuP+JJ=MVcqT?wxG0GE z_>RbaB&erNt*A;eWhPDCDOaWSnd|v?!43=(Bf?}J5lO{&@7_h@k|`}vYUktOfS%3fE!}tq0n?e+j#5OetjJp6|lKnyKJ}+ zyBf(f%UXm<1BC@bdX`gMn7FZM>bOI&5zuXnc8=THjDKy-ey3*aRtu07ogrC(94_=& z;je%F%GDc_bI6y>J1LwC!0lexSLGhp5t}-D%~(c`8D>h3XXWTjT*%NicYK&~PM*7Y zn5f)Gb=7llG(#mGw&imZK9(NC04@G&!ZfH!>3qioD=>DYHc}9tL+s1P??QU+IC``a zyp*++)YPsek2%@cJ}zBK7WS_YX7gz(7UDkrn=7Jn=1Bk zZILEC3m2d?+5TEe_4kG5o|Y)}1A1H~zhy*>L=UC^XWHJEH=z)al;^S+{r~-!|2qc% z2j>Ad7`08+vb_HaBop459#v?b_pg%ug8^Rg0?l z-xpOe>0Ed{fl@fm*ZcB5%l$_?`}@~FiRu7?4#qC~VIH8Eqmb@DrYQKl-2cV1KZ!Cl zRxb>KGRDh3Y0sP{#&85xRF(Mu+REuP-~o3g8yPgf%N|%b1ewzR1pmNakduF}CffhI zX8w<^nZBnA#(*8b9;F?)k zNeuxXKY#Q7LUVHg?9q=CW_Lp?$34Jk;`{6LD!1f#5w-_1IvYdZ7G@k`{IavNUzv=( z0r_n4b)hdku8y94+%Ps&w9?(wgo+vBrmq4Rlkf0r#P3;-W*hC*o|&uEI2L-`{WLM& z&JN1scOQ#pR>kk??lvQ>H*qs;vXGNRujkl;fBH0gr@6Jc`9Omot54R*NVUGu!b}ri zO6V}=t&4Rf{oX^RxP*|&`#q}u6Q}b#8@W;ozcMKo59hPs7kW|3Fw#11Z92}%D zuUv`VZ@a!&_==2+rEXgIZI90bC9nFnihV9`#RrFvS1ys)s(^gx>rDT>su_s0Ddpmy zF>V*GC7XLENo zJl1DcA0;sdswew^KJDUS&bT|*xt0_@crvEFr*;ik7!)T^ZJjw!ypJm^E^fX(oh7_I z>*4yXTpzdTuT|1N@b2TEa}TnpIPiO=tWJa@xc!P}8?(v_DK9wT9nYNY+m99&xc(3; z@$rGYFTY3t`S6DdApUBORyQXBN_j%tH9uA8prF!)fKq0wAw07WS5`q#ANFuO<74!fSXo=b?RX*1m&#a=DNZ zrBGC@w1rbL(^Dx7OfM}UbAF2lbow9)eX+V;uv50=I(uIs2JDUffeK;8U_lH?3-VE@ zYt!jX>41U6E7qqaVmsde!?efU%|a;uE(o|~*zlguGyZhrv683Q^G3y-#;mx# zB&%p=b^~gRy`|4+m{s;OXH;IWZ`bm)%`_bBTE@8b>DkE9Y7!Zn7&ikRFJQpTBI;O7 z#Y9_=x39*{z;SuOUrbC)@4Q1&D6;BmZe;plUe#fCK_@+#Kd$?_SYIX^CHroE#p2$= zin3POT&!Nxxz&%zMx;e5WxE^M9|i zH}$s{z~knTA8)UAcKK&l0c#IBTRXb@B5X9i>%r}zx`1ArZICxH1@M#=?AFU2jzgX< zZATs#E6RYGOn-jTubWwc%k^|trFKPPNG63-h5*n-gcW#MLoo<}^OR66&OKCWTDOuZ z%~ha4EL2iIX08>IyQ6@=@Mw@y&G4wV9S+n`UjxgE^LsKu>NkC9z`FTv0`lqPy02H~ zK_j4kt>C)cF1BGoNpIZ^Hs4ynMLsC0G4wdkt6f#Q^Koy%lZ^MAw5QxP$UikIcmU3O z1RqWh>no~`zVZe1dAU;uy7T=>{9~feXAh3Vp7cV=;Prxf4)rF++0COT5*%`Qvw+!%V>7Ow^TA`uFCajvFrtQ~%sd(W#p+A5-qkwbW9LY{f@azld8gt zlaYdn%mn>7rW{%*y+S;3bi9enyn&J1nyfXel8YSzA%=}>CG})LslTKS%0oEve zknE4VyrK!E8_6%#2^I;SYLjK3H6RZCOZXJr!Tj)vF@J<3xX{$uN_X^CS>=}MYY}go zQ~mP;2I()f(9;xg4QobYV`bWxnGgmlQ4o(~fi~Q!WI|I8|4hXI?v~tb={GoKF~y-e z-gmg7nL328D1G{qLn-d6{Z?l=uUH|8p{+Dl@@wnv@+3WroSt6TYr3$s*2w2f%w7o> zoY=&-6*m4~>>|cVAY^OwDLSy)0Ohj&Lad&ld;^0tqB1JRZ=6=ct=-bZwJuS0+e;NK;zV^T()RW(CG3fbsE&{#4PHJ6u!P z2;*?@mgRJ*(ri_(o6V7iyxJ3=7*~r4 zBI^=fMfZ@2GtY`;fEwwKqEi(nFV-|+mgQtr78n!eAvwHPj*1$bn_K1D#MF)E+0`)! z<|Z7~v_vnR!4Ze?+Dd8!T!Npkg)YBwWGUWbpVNGx7fzny-W!=Aw|EVBQ)oLL{$Oa{ z-J6>cl_@_m%h2YT$fHYPyuh7VG_KkEONBZBN5f+>}Qw`bg($vOS@?scW=yRlOCk4VJmZ6Im7Au zvYqd1Ry4PPyr<{l;?K2KPCYfR=GZT=bzmVQplEwLdtmbUsQr1LRpH#mTG+(|u4s7n zwgn2+$AjZ!6shB@iYn&FYmdc7X)&WF=Yh z32Co}$Fakv8K#NmM<)lKD+@NQsgp6t%3Slp)});wITtEu>~QK-eZ-(XP$TBL?ND{~ zd3>Fq`&{%snKACIl9imR2bTxIa7^bJ-)%zO2aK&P>jZDN0J8*Fpl@W+X|+i`9mbVl zmP)rJzc736wY!0z&cV&1L(Cq}*rPJJB#!=T`FS3ndXhw*Q3%nSfUv-Nr|TKrO1lNq ztsNo!+j8bhL6@-?c!QoZEpyyL5G9Tt5`(ALCXWx2`R4?U!nUwV>TwJe-Ura%47B(;syKD{3Q74`$SdbiAkc&D&nqs{dg^>Xg+ zc8y9WfY4p;q9|0&jkSS!X#tzQ(ictqe+1*sXmeaZC)BfBga;CKSBtel?D#V; z$cIh)ix<#MDsL#25;!DG5AJ~+7AO}Rx~U2S>{dw_Zd9J0aN36 zG62xYdo}k8a#{|4*r)yszfN&`4rs)%fhO37w1$#yces4!WbLpDiDbR<^4NGOdST!j zv(qPph9o?C{dxu{5D7@ct+?>3P%P~iz6iU3U}52B51Mk>=Rl5nd1h+f;D9_D%!`&q zv95rw8RLEG=@y~a8B;m0n#!g^kIq;8S?sS%$5tz|mVpfIfu63!E#(KTAdUL1up*N| z>*TVsSK=+Ym-Ckk{Gv~AF$y$!R6s`Ws$ z=HuED5K8QaKg(NiJDuT~7CN%mJ_B0XtSmTew0nPbzx5?*l9M&1Ygzp2gL8Z|=9av> zcZdNFJ^Q7sjU6U%SdbKTaoe7_hvFgkf(OuMrjvQZc?@t6YL(k`IAAIfm(m%ugwIco zkL#>?xDX7bn@KLt;ny`=sKb2Qo9~iuv{iK1z7Ci5I(!)Ue$sR`OQcy`IA6K7Tipa) zLU*=a2J4a^%(U_*Sa*CL_;`i3m0(`i*{qIJMtj`W#!~f|ckBU`+O>Jhm$7qm8fuIm zVgotn3NM2Wt3jA`F~mx=Z}ci!7vpPu0ka&lZ*$+x$rN0gpSuEd!R6Tn;O=&~q{E36 zYZ9@y2=wKNzhtG(E1PvDy9;St-|hYSW}rrS?P9MVvrNIgeVc{|HDUkiV?99I=+GYA zEXA&lI}ok{+T<%434*bfo#^@lfLv1>I!->FNieN$bXaGpABBBd*DybNPoh}oa@`gJ z5w25r$E&x%RXOkp1b8e!{@?5&_97Y3|GO<+HS9eZqpfE&|s?#og!bvCw)( z>$b0cHmZJ&ovdFk+<$czbJVcs26Q!FiP_ooPzLtCyGi1y5KtbT=);TLQu%Q{2|o<` z+Wje;kb_Qo=;GYWgniO89-gU?>h-fkw+YkY-ks}hjVg*!ieD*Y0AqDyvG>?v)~H?|8wPak+dD8&teF)RlJ#6pH6jA? z2NXg-S)uXG6;?~zvPXVo12mGM`}{8XlMuFDTJHG5V=r9tEr$<_z4ozq9x-mx=c)6! z#KOzd7>hW}3yj28=;Q_UBsEcovo8Y2{QVJ;_kd1!MGrK|rf`?(&81$Y`tYjiehA|| z1Rbq{6$nY#t}SN`(1k?Vg=d;!x{ zbvM;^ztFGmt_JQrS7Bxvi@43l0Kmn~{UvqqR!4a3I*}~lnpm%)#@J6Za0mbWvvWQC zxj~ns-V1|wbK8EzS4|w2V|!*?72}4)kBtH?hzSoUOWSm>-5C`8GR1%}6?|n`b z>+Q#YN7;E8`}^)tPQ8++jL`EzIJzHi6UZ--U^i1|U#A7ed*2_85f^z1=<8%yOG@gH z50tU4anT$+zf(6mk(e|gdd1(;knUNma-oq3*IYwsOwV6GHfrw++uq8rHTM8GVL&*{sLa zjCdY_icPQ0j-@iW4+|?=Ls9v(?yr??HG@eBjTi%ghDbA5!)|TA5DcB5r9a^;J1K}}MoP}G-_8wSXX6a#=gi4>EoS4+FXdC% zZtPeQn;vd`iAx3^UR{lt$9#z<1x7F{;NTrh8|<7|+JS zQn<3pUoF3L<&xnRb`i?O9%)|m>7~3)LgJ$%o4Sf&g<#h}mTvosxQ0rX<3UM{kF~IR z3`|1S5;B_fneX%FbiwQhl}m~u$aOIgpsCxg-*j)qCN69Xc_}sx#Sw=GQtZULx~``r^C_%6>Gm2JfXkCU zhtFF{Cf;6yc2hl5)5tw`{*8fWD<{hiczP5*XbZoF8#+=+M?{xedLIR|?Pk~M?_HRO z0ex}E0o2JrV2MicyzCCB@@yBUOXQs@c()f?Kq(YxcLv;yS5n>;S6r@;%=$>ZhX$e+Ww?yaOO{$Ytjb>Z^ z%6ZZ50e`{a?t~VVOB`1gGqe6SP^)SGM^=gq`yz?S`jX|teb#-=OY%#(N#TB93`KKp zn!MHtcd~GNnQ1X39Ne%Nf!mOrkGo9^!K&A-fW~u7^omq=V^GW>UR*c8;G-vH~dh7<0Emu#r zCx(56_Z|}ve+U|I!a1%kacNV(luyR(Pq{X!MY7qOQ8|wAMnkbx|_NZwAzge27X?g#C_mT0h>~Cb>h%a+{gL)5yX6j}_c(u-fHnyt%tqs#n{K6<8 z3UR(dyw$j>Spf@2&4VURjD{lp?ns=`AByhQhZ83G3PR6t+pW14ont>X^6GkiC}>5l zHlMltu#){{SJm0|dPzE<0tKJ(d9qU{Nrl9Oj#aH) zHi+|0&;B@zW>rtDQgv+0QD^PKuaT_ z>=W9oMTUlUZALWHHO8r@rFJN-kr_l!GLD|T^wgacsyz?HhlRwFRNq6+DyHKG?tBu6fs-M{;g&Pve z5^Q(6@^*Gvq&5YfsRaBw}B~Q2E7KqUiYK2r7x=#0kH*m zc%lQQrS{wn0^7u|N-!sr%2oARdJN?nWfESRn$J}A3hs`@itLZPeS1whFH4I3a-Gch z(*Vb;8f|V4%YO0*8+5(=Ba_8t^)uss z@oVN_OasES6meURgB7CATJ9~S7h&JUIOlaUn$!R1k#cbFx6?#!)ARB4WHEo7Qjmr^7X{nC(4*#uiX3Qkucnn1rb(4#BVur$rW=aDoAzywxSh3ubinclpNF$ZqJmd?t>#AFXG}^Dt@Ns}%)g z<|Pz=r1N3eBfLrW^QVvGODs3&IH8x^m(J&dVZihAztH#a7;1aohJN{3=~(r&o)SvT z5KD(CMuyj_V%OC6G%YS*&we$wB~~J_V9>DEOm9C^K0%NgSr5*tOK6CRLx%EP5As?w zS>ANX*@!G?R(rV}<{jA8C1coG>v7nrRPT`{GVP$`NhxJX?{>Z*DP5m%>7=Q0g)^Em zbtlE3UTgfmXu>qQ(Fd)19V?9o1kS^JZSVgA!X%$@aP0_LPpNQFk$)zMs3%Kog2yla zh;rN@;989S71~6pj?EzJ&evJVJfPor?9Toz$g6Xl2C?Y$ZgS~ja&jBD@N_uV&B$Ul zR#8HT1`*#&uR8uIRH!ucoKRM!_L*BKzQIK<&}MaT12CZz%6V*21xl&j|V9`Ze?Nwkf< z7BYpKt1RBYzBW~ky5Lr%n!%4>9tW^_MeEkA>%q#_B*7I0;%%F6jLo)-V;B7-m+V^xnK>HV zb2l;&$@y;ia}2(eB>FGhU?$OaJq*RkUKAJifQIc8PRG6!;W@)=YW!9m+#pKmM=M*KnZpLYf2CB=CMnA>9!L_Q9hJ9z{^ zBMe?&x-RbFyr$aBWDoEuk1`2^nW%Q9qr;Jn!~8qQ2uJO8ejpOi%P z=_7RnW||`LMak4ST6%sR-=-VB8CljFqhdR$oV!HxwWcF}n81ykaR+PRL!L{J_`^Mm zarRABh>y@?#AhAi#Qo&3z$a-Il-9{^?&3#|?lqXlR>XCt@_3ZN*y2RIL}p~E+LPI} z!i`{BGt-=JxKv#}2vj$P>g9P9uxvN8U+#dY%rG|Mq8Rg3tJX5F)P)Ccc%h|pk zSJb%Z5R%_ zD&8ijmev<@8TQJBPF6D^zHyt}F1s_#p@Y_xO5C0+<{?g$y2Q9N?!Wth4(7X26q?X| zd)~{@|5g}xOfOgmG)To!pyN5>9{5Je@s6ZJx>1+)bi7Tc^Q+_ojK@!pPL~#b=H9ZZGgDB`Ix zaEJuaDDp#`Yuq~nxb?hY-ydq_Zs}AeWNkx$BFJ+ueM;0Wql8K!H-mZ~WLWlC zBcX`+iG)xc0Pfut1sEx~!Wi;PbPR5uSMBP){=ru_BfDgHGM@+;#mu%}@Yv~nP1n?s z;^19m>9Qa`Wvkgw!yN%;iFia?Lh3`TCd=tJ>ZV4sm0A7H^G&nI49KJWWlA{xD+lfE z)f_&lzW(Ox1*ryD!s~u7cP!}KLma2$o>9t0O@<>hdbTo2sm%~5$`v#|HDUi|*uW$| z`T9)e4Oz;*2p1?kKLi(zN^A7m4_4dIf~oaFK(9P@(AP@TrKzCZr47lvT(y@l)cg0c zy-F~f9lD7&@D}raqT%j?(NBU5w`E5&b8mNhtLS3|q5g8QXYD%c@M);KbZ6fw*g4oN zn9m&z*6&`YE$#`_e#Y%m%7nZe`0WhfT$#es#ZG`mV2At{>$5lQ64IVv>93~&b!^oU zPo-!hZnuC&@K(6S_8zx;D<~kpBaDG7xk*-FF~ER|8YJob5^nSOdKRlI&*D+ql#0#9Ji7B!WXr#Kzd5 z-0B%?b~YcTKfac}44)Ul9c#Yo7R^pEzZ=1tC_LTvgKM7L24jFZ@l~Q|0?I7GHhMBzkLD#!xy(cw%ko$!n%I_DO@CT)qkQ_bW^EjBivC@h>&Eu`k=q$YE|r)xB6>m z#5>E1ob2r5Yv`szQ8S>4!^MTtw1ODK@H;7|CUvilPW#J|Ak*;*s><#(IzW2bMUg#Q zA4PqT{fh+rW8JvDH?siF7GWWe-TgcoXa#b2qOD~DMgjSdB~grhnb~(P{65~7#Q&yw zpIMTRU`@xV`eDMt&dPKab1jA#))Gm-g?-~sN@zgIw9xbek#6EhV1AVHIvPJ^VyY?b zmndo~&D5&eu*ViwN59L-k{@W?oh+S7!{1XoUapWd?kF?>QyYsLqt4D=&*O*2-AF&V z1JbGowrIP7OUpdeg!y$%-ahT7lx!^G0a;v1$f9_(NgO+D)$iZ$oRH#GV_Ps4mW`)N z;#TivX_``2NfFU>`IeU#lJ&C?B8q@=)Jlia-2=R=r%xxJbA6>Dyn_vYpvm?|NX=Yl zG|@Y8dR4A^yMKLw>B{a8p-?rDaq0Cv!QJiM8KOJceQv7=JPTKQ&Gk@svb*P?c3%UG zQvYB$jClq&^1ZsJflPnnah4pj+?j*nbcJNsG2Kc&TK>GEuv&s$Wu}ka#mPL5H3UYV=>Vk8cjr$Tv4NxNPN?*Y19@f4rNrcD95oJSrfZ zD3EbDK%wIQsRNPPAo4M07QQ-gA01S`#N330KBjxnVyek-LoOW4s}E`00Zbojb5RhB z=CI}@nMnn78X5#h@6LwwWusQ2KS{(hMO?=sP+|LHfMa*q*>YTeMw%=b)ciGZzml zjj(nrPdVR)a3G4#Nke2FtJu^0!cV6NyZf-k;GF2jP?XYn_gE+-&@((!E?Z+ZHGs>r zB$b7}$+E!r3F41nUWb5=18w*8l=-Ag59b#0N8(^zvly!otIvgT0S^>DT}vdjGjY3H z%Bvz4eH^^nZ4ob7ZZ`~VEZxT$sGoJ%bE8N2{wpJsSu-HqR+V~mWmes|IY3}3xTO-x z4UGVSZbp0JigWVE%@l$Q`)E8ouE`D><$~mfC=mgB*}RaEiy04~L5&5SEdgby8MRF1ms21T~4bWhi zTA#@$4)3+gaVvGm>cpC{KxBpk`NeiXmhwDF>r~*_7SfS5$2jLadqB)qA~Ku%;mnV> z+NX#JdzzJ>S+KsU66$7Jo@s!<57u93rB9{>J{7P7X($c9lsejLRLUP1&!s{<996ea zQ|s_2Y^CwGbC^IJ!+hAQQad1ead$I!w_{{qiYj%njyDz%kOYWiwOQ@(GR|PvOg`@B2$O5i+)1dH?S7|BKzcxG{S?O73?NPrRQFhrR7>w{s=0GEL zJLCL`+*kkaBw zEexp(DT6k?KojT>t4qE`_s4T1Ut@U+1w-UmMbzmuKMV1jLCk7|bz!fFsU997!9U`l zap@^nvN-Plz>Cwd^X5SG*7KTVX?f`9+!IbO3gs3tbzN}QMM9y8w?b@;n*nzOyJa{h zn;#CFuwMnT{=3|38VJ|xerr-Lm&yuG(}IHj;> zriFg&{y<4yAcrxOu|?1pz(+2CPbt&bRo?1+cjNH?u=kchaW!4kC=fJwaJK|PaCZq1 zBqR_ZxVvS5po0&=-4a{^AxLm{cXxNo;O_bz9(}*}t-4jW?ypfN&^BX)Un0 z+dcyK?y&YcFQ9~tWC6#dlkNR#@_QX=qwr>!*0Hpt+yIznC9XlS8)cKVs4H<(@dd|T z6{dc0b(0|5;)_zI`7f)fsIVpdK{*6*rljGt^xEqdFcwF8{Q!OAy3&V(p$MG!d)#pP ziw&0t1KyX+f7iI9U#6155i z)V%g4#&>Y@&n9b6o6lczp2}}^+fqSO9U+rfhxZxt=S0{(ml9>22^i61jFfD{O}q>} zk11oJE}6czW`=!MKvx%xEC-KrOF1kY;ykj@vWB#Le3=Ta4?J4->SzsD=o4t+=s2KG zU>(dftMA#eD#6AIYjxVBV`;cZUo)5WrE2kl^*ctQA{_ZB{kh$+9(3&}%eS-6fmBgh zCI@dQ>*_Ivi-q@AsVL};=-KWf)ZG7s1mNMQeZM|GJ87{@Zbp+K$mT2)PA;^C9C2&1 z5n8OC6W3Bd*Fjj~!gcCV>9S?;4)TGZ%T`aKo2z*?L%Mst<^{_@@)RxEU#c$IyO zn&cfE&aCt%s0&5riX+|cCH1P5^nEWmK_bLO7T$pyPRz$5ClEy2M@b#rTG$ZUheR8# z2dst`s4}v@Z+onf)g>?;(Ne3AdK|gnd=gr&DXJQ2-|)COHI{3dFiD8ovea>;EgG$m zj^yUR=G7`EmU>U4#WEn|YQSY!U1vjiJm~-x=HxGeh=ht7U7>x}rhReizTyzhHI$WF z+&DHER+~ePPhfQ6V*al@i*5|nJz}ZgJvK`2PtvAFX_Od+?-%TvtLfo7iwqr61#OX0 z5Zh?*wW;bMZVNlrymX7JGuV_=`;EX{CiDboV|O%Ij<F zMfL17OJ-|*x)DZxx_Z7TPA0yoepEe%ob=nb9V!MPt*nq9;GcX87F^r$w_Gu8U|Lx> z<|abBY;eD-T8=6l|2{wL!FnN((8-XoO(n`2gsG80P9NyJ|4M-d=`FUoEL+`vv<}(R0;D3YaFr!`-D0Y1(yIZNG!*IByWooRtrmm zbo~%Lk6Uf(d!A-qPbgX9VTVagD^)X>N##}05H?iZ7+el-G^>5SxFvd>Ve8w|x7^4d^M@WBR&CVJz2xmsBci$Sg$><}JQ&56PN}my2{cb0UQICoG%_fr1&;jWJw!9%&)zu7 z7MiA*J^_O5*P%@fs<-f_UnnDFOe2k3$o*K&mf8Q@Tp%7Hmx6tL+ z77RcoXxKEj1n0?MuEgs zs-kGK5!ZSWzfm-p?$}dc zp489n?Iq3`6nat(1p9wZz{wN8S*FsE=s`*`oL~fJ)4JzAFTrAZXZ$uXtt#2R?o+Lx z$u)G^jyf;=yP<~kjLRy5H2)?nM~&P0u9Gm+;j`l#HZK?l@oCrd#K0Q`Imkhuv#=oD zh$z;t=^LxF=vS}%u?&z_zonv$5$3&H?8WWMX#J>Su$1*_D*Ux{W3!%o5CUjV_x@PK z!XRPbK>GZJjYEtV*ktmU8X27N1al+>5snY7}# zNWq9;ht1#sLio>Jr=0#UuitTqQ|$V3M((^*wK1KsS}0s99wZspq9fULnjFw(&N$dP zLKEM5<%(@D*oc|$mt{H0>;R8E_>`(%ui358IQ>1&X-7o5E*gnK-+eK(bB3DmyEcC; zslv%maHsk{1mSfsGFCdWRgt=8UALl*v%Kt=lsBqOJ)hhKcbSoK&-{t8JUrX+Vq?vN z8>ip7r)qd!_-VUZI$`-*7Rp0x3hO58>^8wluJ5U+JIhE&sh%*c;QCnVDesxupxTS5P0tb}xV@_y|a4ab;y?U*Mg=V#c}C!+|4 zZc4G8Yp^dm4X)~-iCEu3m8GA#NMM`k`CG3fCKA*4vgA`6xNiACg$`H&u3_dbecMJK8n&1%Z&F zd%Ix4l{%_lt^n$!wv;w0Jb)S_36DXgMoAJ*0z0BK^w%;4unxhYBR;Pyvab^NLp!aW zV8dm#Ki`>;&eN?N5UK?SdP7TugXnhK0ZP2i`Hd%}x#)&P(FGD&)f0;O$b(Vohu`xB zAZZ&2lO?^D0aBi%Qrf$M)v?Xh#=O8>+auGpmw73J}BJfiK+G@e`wB zl626(dx01bSmIS88lSM50GQ>P!{1o!nH`YVf#Y)YL(dx%F+$Qm)X4#>iXLYZG7DA; zz7G{cI0t3)Kt+4Hblz((Xgojcgo<8kZ(pAPn%EO0jG}wQYNtTC>#oQ_5Lxtk_oNC| z@Auxjou+l9uG`l}rW1@KCJjy=2c1h97jB8pg{)#kW>^?N1vV}tMRE9NKIKA)HNf&= z`{P?h)#S_yzh$ufQ4&j8JBLX~6mz-Tm{2+DsN+hf=eYm<_*v^~|2#o-e8z zW>cH74onv6La~uEZQDuwvBM6-m+J=VN`jeK8uD-N&Sw2*A&dRt!BkCSY2ph{P&cmxLnu1Bge(PfmEdm#t z`k=@zykU?AUb?fOHFbjofus7&j-xE9akGL+Bm=dm4JXwJbRd44ULM!!SSP}x_4DT> z8!N@Oo;RZ4bMs0q9CsVKTqmy=pa@~FbR#sm^nlk@K&&6DevGgv;6=GOjpTt&*5ns9 z6eYp+Z?rW;$4Bj}3jwyCoUt%eF5I)}JiJ)}$mpz}T?2o*mlPloJ$-{9J>y?+;=oQ= z=uZ;Os?BFe683Zwu0M8!7@18?j>gn?Jto8Up%Eo9mLK-*v=P*OeL~m&| z70A~euNTa7pPL-S88sJMgEkU*tV>MG#uX7?2oeZgX9Wf)#?U)Ax-*)wu`#vZW4!rskvV zoYwu>Xt=eZ#3t1=67TfRtwO%5JvrsChLNI*(gY&Mgq8d7HuM)u=D zB=zR@JE`REqJcw7NaOB7yl?Wh8?V&Qu$u2NaLwHTOU-XIH;FGb$Ji6q$)Nc`-$HEU zW>#JuV|kvAD+tKXSMVN%MK&Dq!qI#}vslC6V5Neok~?b+Cf)A|dTT90SfOtx-$2A| zU4N;9ZiuKWp&jRrP+Z<2whO+`);1{WY)Y$VUsC<3wZFiLn4%}a{RYDNVZ<>$In2@+ z!Ab&ka`9`vFl>vEK{igBIH`>=;u|!Dh0@?%_hxYsgNpzSY>9zT0*cJp_eRHBSo)v9 zwDdKN&4^CaT%_UL>dNJV)Svce?5;;L=Nra;BoY>77#xw8q@vK5!1-)9H_?juN@2Gq zI5@uCkas#f2ZcCk>f z3R}U3xS2TEIzEsA{GQAzUStC*T!K7OVk~>R(Df#(@JDJZZwH%bM$}ze63p^6qt1<2 zqY|&1n$0sW>=}lvHI7;*4sUYzP6eKmO4OJ|&nE_*(} z3xD4FbsM~cty`zL*@nS={UdNzr6W@|wjhPM%Lpk{|I4x02`#VPr#2~@PwdQWY;a2M zG#EfPTD~^R*QlSN$tol96sA?d4k#mn-*}?3J&{kMP{+wm0*^e57}n^x%TFQ22gRhN zjQfs2hZM|2gWpmmL*awt<07&^FFfd3h8hif8S*7V(7RY2qxKj+2XWyuMSG?IY+6kc;_u^+R_`gyzoP6 zFeAOBMc`{hEm2tOQXgg4s}5$BzTBYB+*1DUhb;Mz7P99*|3ZoFdGaZgf2-KhL}n zHAfSeM*GmGW2bz5W(Ds*cpQCj9Q!-1@;a(wu}&^CgVjkY@3&WD;`NA^KMH zc|O{cpP5W&!n64O8(r4m!vNCVMb9QAu8e#4qlf4PyY?PSfI|6K1zuJ0R3 zz&*3RQ13biG2QAMonV&n)<4*uF3l=Wn;Fe%L00HH`B_$chCdSy3LvFr6MbhWfz4%v zW!Y2Vdd{306gT(VV}e$86K7MQOKQO?hnMg=z-C6mA7l6Ss@8E=C6}cuB{qQeO9UtP z2rHNyt)NT<-$WuHrsAX;1Rz-!-XtD&^D3+bb~corO5xTV-z_&|nBy$hBIDHUBze11 zuo+ZUlBCc_zPrMiQ51$IZ|lFc@aX@(!UEs}%G$~r(6bnS42mPi7Ty-V zO&+jE9$ne+$cK&I>dv#>QS)kNYw5!+eRs~`o*^s!0DVO9^sVOQ*RC`AmTW^4M59=k z61C=~C#fet$OIgv5!Ffb>zc8}%f4t(n8^7o(oH}~`R%8!sYeU|u2Z*)pLJ%P^v!n5 zm(*2ajiggU6Ln8F_ewk)R!U5u%FAd`JV?Xub5wlAe0#| zusj_n3N9ge=j@k2gthwKPjs)w!o{O!UA-6)~G>MPeqkNUy!w5JrEgyvK& z9U}s%@Y05bmvipSOx&$logA@v^zTKaYMO8n?CdqbYsV}e)rRag9F`d5%sOWsZvM+D z$}xw$tl5#hb6>+s<{Z9Wlj-0Nyv`EOis7;9afhDYhnd>WAZcahf8u@GPLw+jBj~U- znepvS)XTa7$BFlinVb}7WkjnPR-E!u37}vC7uQdH4#%HZ?bYUMi$Tm~6k)pe^*_WL73t5G+rrS5H<}N;* z^Zr~M(oJGFOgx*Zk=ZS`4-r|lo)DQ4kbHi2&XMhY`&0OYhoJlPJg~e`b+PdVY}(o1 zao)XbW}dHmulAAkS0Aa37c%-Jg`nm;+GAWU4W)M0eZ!UAXc3E zj1rrFf^~M5k?h-pWcPiz^QU|4OS975D_7JAlh!<(z^26*m?!MsWaOQv+af1kLBzC~ z(ijUXjZCETRS(>)Nl^GWD%-U2f?E^nh_c^7Jx^0(7Hb^$X9MA)68yabzlx;`zsH_| zZk+)T&F2p=%`#bdi6s^p$O+a{0U6(mzMxx~K|-Fr$b^=w#~;t!AM+pb9V{<6c%YIY;PXe9{=cmx;agK-<6VN= zT|2Zp%^S(x-4BC1bOE5BJE~R96h7ts?stcfzK^ zwrkRg%H=%Ew-8q#4gOx3r%>R5INs}?67Csgr2h*5{5FbK%gX7QThVT}<4K@p^O_^6 zcvxqko4Uxo8123=W{v9W=bgI=ez7>k-5Kn5(RKS7cVee{7$rv`j)Fg zOXqRNN5pP#rl_t!gvWSFzJWPcY;{{>G@SmX8*+CW&1TqC15so`&K52j0P5>3L9k{>Utz3LQYT73q=5eabZqSB& zymNMTTxq@7&}?`6N%ATPk0FY}^Mbo1Mfx zrF?sWc0ZA7&a(*uC%Pt0`s5c4HVU2L z6!HMBE1Ix^_z8*5XZ`QKs%)aK?*R>)3*z z1KnTgm7=&+XojcIVcC!KVB+0UP_Zodg}J;AJ4mdjc9rSEY1?9Ze|@$Yt>tlv zm%`lU)OEU8=Uhq@Pw*TFBfXnZs|P^9WKjz-U&eZZ!W;RoluIn30~w>`leBn~s?R&a z$jafyUggs9{w6jWm}@pxjF!H8d5|R+Y#OCpkUNAarRYSt-M5}|-89_qxyomy zt6kP?7na(mGgzSQ0mo<5)Ag>Ei_nVvSvOtJT>7deuzktLoRg$=)S_ZjZ&nx>#v~bu z*B@ofXG)Aqwf84I>H!hS=&YYw=H~BXwR=jdx{20lD48_N-~BpMac&my^8}t`M^Nb2 zG#KAu+a_B+jg0bXLkTY1fUJcYbU<71+pipil`?-!;ftn`IYzu(S?C%N)ju~)x$_9j zYCJ7>l+aMB-oRpxp}X*s7Ww zw%^bjEC?17aP_#XVJL8pt`C3rai~&W*L6Xc*7a=Xvk72?D}Fv^n zFzpv=}#7&wZV*%lG-d)lk3m}ZFu_)%L@VM?|3bM+@yOw-sy##Fs*gp_lI5x$Qr3I8od&5dNv9@qIG>l{;h|# z+@P7YFJJ7l76)!jNC&~%T^qyaHJ{^!CO1a|I(NH|)_bD?4TORC3{V<>bssz(cF=2Y zM6UD?!meX&Z3~kzCZ{!QGqH0(a&dS4d02&M#jLvCnh2l|fRcA4$qx!#*$)@KdFiDJ zUNGGe&ZZz{H!9K|&F2~nEv2^2*_P^tLO~VtyBo~|#X>_|RVdtV8PqC-~BEhDnS*!OQ@z$!Y*NwmmGT&68%V}Xq zTl$`a$5|U~h0k>{piJ{>F)D;mxFz)5rYY6qicP)ot`**!Z20%2r{f5c;*B2~(aOE? z8}cvrzMhSGVn2R}#J-S?rClTzN#P5rj@*7v2#}LJVP@G{_8b ze|-MkM`ZQ&eG)JIa#b@&uqm10tr&yY1GoOolmt1yLrq7>djAXnIhJAZe z#Wd6A!=x6n9RQrC@DiFTU*+U-@Aagcn4!kXdN@_VDYRs}erRuaz#L&cM?XeL_UfF& zbYSY#<2UxNpS>}(B6kOdfEM}>LB%)vd*#W64u*Wl5vl#Pq019|pADzZN=77Lc3jWr&*y9?IL(Ss=?YBmy>7ex!bKcEUp76#q!sr^&o_QPQ9pBI z{p&XA`1ha_72nO-Y%=D;E#Nf8WfScfFkUld9=Zd`vC-k5Dp*rGmzuq!3TPFv6to6S za8w%aT=<=vBs4t}8{*Ey1%T|*%DUu-sj0+A{RnNT3gqOMEhN^AWgkm-X}MoT!QxL_ zTJIj!?l;N?*zV3%w=N_Ym7|CDRo92QTU9Mf zG7x)KNj}G}U(x0>z)naJ+SM)&ARB(odq_r|dLmRe2^@>%H-AipdEM6t_z9k(n)!U? zchrBd{SUzd?lZR9Gs+jdg#5Xxg-0*N0laJ!z}nn~4mrUY=N8&QNliw6vV<>-(-PN2 zq9p36yAVX|Kk#0m3%mY@mM2ZAtX(a^dD%zl-;4#S3 z3p(4fzBW<7oex>$MPnfvHv37f z68zCPgyiS42R(ACaR{41s@sta0cb~@cc8QeH)PIruX+%`PoiENGF9 zJh243S(G=Qy|`0@A_F(l12NWC2@^*lLC7@>rKBxnk5nTSQyiN+tff^XO;- zRwc0V6`DV}^J4dm5N6CCDdyK(*(#qjxgPEa zac13|t<(*Tc$4&LrjFhjx?344t4XktoPQPoByH%v`;Jb+-8*b!H3J$p}k1cU)!nmU<-Mi8r^0@W3y8@a7*j^hWu? zgr;PmF9ku8*1e&h!-&8cZv?H#uM(NAu+g$05xz${?(51t3AFMuO0fWDB!b{>EjpSJ zw0>nn56A<5nu}oM4CkOH(Hed8JO7pg9@+U0P=x6nP3(}5TRLTS_K;B3DepofU#E}G z0+)RuF~@-Y(iF$Kj1ufIr)T;O-C*Fo3kJ0nuo)EI#*IV>shqEMQhz)1Dfi8$QTm1q zjz{d#VL~V_tI1+|2jnaLmS;i@_UA-yca5WU0$mp}%;8^FDyCl-SrbH9KR18v7xzmz zpQpy}ONyC4Xu;7J3ppvTNr_?7d|@50-|)E=QFgt0lp5Y?Qi8YTJUfvJ@4zk>y?In_ z{>h3({F`+^WpHKt8>JRlXBwRiB1%Qf&PyX& z^93BI(;lg(e1KkLg&!-BC1qbmml9_d854AXcOM8z;0DzMKUE~i={2Bv#^bQ{F&tkm z;l#)m9lP(H5H|LUkwvV8n-u6ktr(~AmwEz%a>%mHtB1?w52J6P9-!Y$YYzk=q^H(eXeU6{ugC}~ z9DL!i(ea(4V9I><4=M-a{w=PUAPHRaDw3^?eL%CQHs!5fmN0m})hQ4@ue6-?WqKB^ z-o?QzNEJlG?pAR#Xi-?G_Z}%-oUlGaK5{|nTr11%YGJX}q-1>@V=BmZlTFqjZ_B<(^ly3x~&n-CNQ+Zk1^?vOj_-k$9)*7J4ay}E~ zrSb%an(|#&lR(?CF*;E?+hwSjN6-OFP4@ev#{2Vo)##|N_oVk7W^}$ghO$mStk$e# zi!B4#I_}(pGucqYu?R>R8ktHraKwCFVu}qrC!SGe=wb)T{^0p(J>miFi{GVBFfYrC z-G2_(ynntsyT9^;YBFC_HJlR*p>J}MHL&TOD|d#?VZqv9>uWyR{io4-f`@H53mBK~ ze6S;Wn&o5F4geW>rSd@D`#-2LztcZ#rOTd+zO@0;QkQhzZDFx~jMt}YtcH%+);nni z;iTwK*qQ;dVh_1p)D&Fu_U8QoHXyK)uFK^M*=4>}g=dPocOl5q%F5qdKVe%*ShB7h zkw~&_>+R&vB!-mYG6khRpucQVY*Dcde3bT!Y}a4mJUe&Qz=DH(F?gDjQ;)(0M@mzB zs14s|gTs`8OVvPJsjQi?!NBu1emGDDMw*Knn)>p+&JBAoo`d9AX@rjN0m!UX4ImUr zmG`(@&j_BZ<4N6D3TU+NR+L8oyw>bW^DRMEw|K5?g<#&I702pO^*Veemqr!rt4S3t zd2Ajokuk1uI(+F#@pt!tP)}~&A=!Wwr=P~pdTvW1YS`kTAxR6OVdRl?fP3W7g+?hL zp>n~ccZROl!zEcivUTiVp z{$<@ds;jQBoTGW_PJ4YF9m6ew-h!CxziC}A)aO{%6(WsKMaufUaU3kD#xRZyD>i%6 zBY|ozJ;updMkT7_cK9YY`GP)Pue9)VW8ueuDi&oh0aFF_{x_8n_uMQ7Dp6^U^fO;# zj4j0;5aH}t(g!1QYRa3QS(Fqky5s68GlQczwUM5EFwS*jsUI}EvXADePnEc;l`#R&eX(uIflF!{puME)#z zi*ztv{pf7AC6U$2`t%jAz>%2$DwQZ$6^xN_!A6Cs3A{EL6&C4PB_)TTZ*~@cjST<8 z$Z!B7lLTONQiR?8FmL2%f34-=L@aug&7G_EW8F-QP}8anxDBS%3*KM*62#RUZ~5$N zC*_cA$cEAP%O9iB2!+lheggS5{n$tJ05Z2Z%6%?+2b4=fSM_oiiSlgFVx z{HEUDGg`&xfbulRft;L!%CAeGo1<>Ki0Ya6XQv9iB>r!p*$Pel6ZdWq_q1rRRtj%!A_fc1|%WH!ZuO}-K!Y+o<=G$G$PT&-viNpuw769_93}%NIgxbgJ(Q!$_bKQq!T3yXRW!@i9TS=3TruCh?aV)$&JPeP zYCt(<$JJ6o8yxGQkwh!ByLCGQjOX#yGsV7^&%u(SZzrGKsU#;0Je3vw>Byq{26zjXNOE!Um^CB&|5xO#ZeU|YVRpQRS?%)sK=kOv7E^d z!M1pKX%vi8vSVn!lQjb(rJoEpu&`P~!;*FCf;!pP0yvU?9}nL5X3f6~epARyHrC+H zW6xiX9W$Y%3US+WzRDvx$m>tB`^NM#cD{vCZ7rfykF32N!206Xon+`P{p|d(TuNBl z*V7szfSZ|BO5$s+a?P3A_pA*r*cnz#|L~J0rVnmBH04@~Q%Zz1G8LDTLl%dgrfN@}T^D(z3f33UoMO`EE zLxvk?r`;fAt7SQ*jA#s~BYb zV`sYNlZ^`qI`XovE^}&ZmdcKXE$}0WFUcuPbBA#pzSt?iiq#`RvkH8nQJ`~)!t9*a zYuNP$K{^&5OHzxhF$v_gdwJj28Y->kEiBs^4-jaaRc#oHzTr@oDZ`_KigG}B&60}~ zJ)=mLs2@er{_<2_N&p8RU-}XG`@bl+X3b=&7!P%F+(H7eLe$Y-0AVP4&&j&X>wZxR zu2-jM(Z}Ig?0wJev--I?ThIzwLmAtvz#8g2UI@RB;C#&OFPRzq<;wzKMkfuBeVLH4 z(4N^|>~pa=s5KLb+a3oqVQxF--;~Vq-Cm;P9d^qeLJ6M#X-kr%sQ)}xeZCT zOn;8s^&0{CTxLPYuiL2Cd*4E7)ugZ+Q}GNlq}|@{2SYvj{&jVHpZVjt*$JI%&lG zSoOCI1{`KVl~;#VVf&5u&8FQmpRk`zkP!)H;KD8o<@}m~Qj;yeenmune}F+{pRGDo zYFdd(fbaL*0(%zR_|IsCQ_C%I=S%p#LVtS##B8O; ziV=DI10~~D<@_*To5O91AVj#~+!Y@A{4H+4HE440X)05|DG_Tn>t66vtPpcGh3p&O z_e#B``puH~GJ=jfRg=YfQ>zXXAclCJuV-RLUdRZ3FF3wotAD?!J5vD-=eADJ{&xP_ z)cym{e^o)M4OCKA^hTxBOO?#~lvvh|#--!coJ2}N88We?=l()Y#Cp;uwMXwQXW2Xk zcQ;%gFD8ePwxK2DAi1Y!k1O_Bfx{tEaP;VeW8tcns_tt0gnxd;%2$+}+}%Y1$DM;y zbFruRNZ%2?onW6(+(~?@VxGZ+dehVU=KT=Yv!ofG*7%wxagiO61Cb*{`Ex=MeK$q( zblTd;qp~@l7HnCh<{xf9@=*=~-f%Ei*vC_fUY%^Nwl`%|kg|%W;3WqJX<5*J%&^yk zM=G@8u*G|hmudR8B&1B$BQM@RMi;=U37f?o6K4tZqr4VvA7ncZYNJW>mAlkky-!M z>Gr(deSg@XlSX1weqP>zG_ItbFkaB9!oiN=fg;7}18~(3i!qO0Yz)CWc4gy%3CDd| z2TNM>UE8tt$k+ulCXClYsVNJOqq;pi__XzW>ssa))#h7dcZ-xN?me&j;+0!ajBUr; z)oHV*pBzbYPh-Nqm0XQuEVdM+DUY=K40d7DX!n_-TPgPHfDe5$l7FhPM{BA)w*%G9 zN=Rdm%ByLA0AgXcQP}>e@fT{1cjBJH$Vv;I+=|Nqf|0*sG8KLr_`3(7k94Ye`$=Q& z2hGO_5Spp>l{onZTI_Lrdfm2Quk_07t(=#erqE{RN?b6ZjE7olL@XMx6|y!)QK#1_3=4sv|cmq(9_X zWJxXLPp@=nWfw~5Hyvtu)%-Nbvj|9f{z0B0-ic9;mbL>u_VlMXf9H;P?uRW&?$J}Y zS8h;5E^_BEQuE%jvEk;B_|B=^wT5j^UhS*DeW_)?Y}jX+nz7;^omxeadr^(5Xog_h z{DWnFOY8C9-FNNnxRTU@(!nipZM>h7u(d&p*W-JKaYB>$_`Vxzy=n#S4V(s&n$-Pa z8?PPDN)t>CH#Jx#-O9?h8%7HJEBqpp7kM%0RSAIvs&w8t2GCbir9A;sZ)xOI(@43Q zmUet|y#xz1dkLnM6@zP!UE&`nI{}C(Nan^Fgd>vic){aU;`|@4x;yTO7NRM35*o^# zmU(KCW9Vy--FE)I_NvT>EmK21Sup?gqcnPv+DIRuXMok z5&5z8g|dpbnkz)qabTV!ccop9ZQX|hVoJF8RFtsK(u|)(Scp=)-R)>Q!$$Fd?{>CF zFYo2x0}RHvr|#vP3SA$-6A$=_%m+xxP!s?u;lp&4fg~YezK;E)oWDwY4wME<3!p3P z$am6t6F0>G;6r%fdK0zDU#sVzYv_RW0}KQDz(MqIVT#dUijWS{2X%FYtPdB0RTA1? z{y2F7lw=;nWWoS<9z*&J01&AYU)BD{e*i#$$3sBc5BTuTy!cy?_KyZ3Jebw*G7yO+ zv)KRZ7F!dKOP;4N5AXQgZvYn417O2+>cv_$DP(cd#C@0t;2yT9_76V z3=GWuy<<(~$GN~EpEp2?bxHz?s2cdE^Pub81{l41L0k@NCr z{;hSqIlXbnFY|H>)mPHN(kKR5XV2Rb-k+`AyY8*Yg+^M>FAAM6*hQajG885z?W?Ci z-A902^G~Q5#B(NtDf2eHOqF?@;DaSE!_F|FDnyp)m00lacmmBEVjTz!EF3&C7Nsae z)D1w|mz{FS6^Fq1jV7%#v^Bug_mB*pH4{in2 zhJhRZD4|SE6aw!9_q>UX`mbNGC_hkAio$WiK3gKh{`)elmsnVoun90IHX;Asi;IjL z0rMUL&nx+7OCAb*3J)(0p%n#y1b;OT_z?jP?zt!qC2Sb>-))BRf`f&9_8lbxrZeE* z2l0ZypbP=G8%q51bl*jR=9xV<@3HqD=icM1@n~2c&GO@_@wnzbx&)67)uTK5=q*3) zH6C|rj~mIyZTMr9;4#MX7@>lQJ_gVp!;g=_+sD{4@}o=e=n_1-1dlGkqf793BKdfp z3wb!XEi*T2&i= z;~3yw-EdlPHoad;197_mP~F*``nvx>y=tJ2$w2ycW-IrB&X_FuHEC zlXhM)4Wg%Ru!^W}3Sa*NfL)@1JH?{p;}zC1i8r?5zgY72WV2aniaf=oM0ZB*dh3mZ zNzUuIGv$5XJmJw;ijZ-;Q_t}?%vQ7)VT(!>U(2Q$lbD!zZ_Xf?$-`mVI2OGZmc96= zrAjUnC0xeOR39kLKRDkD9|+7Pd`Fh&Hsy(Y@Wnqx!Fa`>AV)OGKcamf!N`wb`hw~)G&E!b#n=3FnA^)-`)LXem65gh=YFxMtnPOg4|l{a zROfDs5|?tyBjSJ2{=$__JDdXfFGPRuDTl)zos6<%XqnmRn&JEl{&#rA>Ux$}HldMQ zemyb`Hxd%Qw3(GU2wS4Zk+PijZ&6#~dJ}o-=DXzxU0NccE^~0~wrj`q1hZPP)BhMl zh-m%Oz634~q^_;q25<$0bCm{cv1VtUhCpD^!6Eqd-&6v3OO$ezg;h$QM zx=n2%j3XhY;Fo_JTNtk^tTu1cxevdFLWtjex?%XEEB=je``e^^KTk6 zR~kj!E}Y*(r4day#1_1}P|C4`GWUc1{Ga_}i?cDkx})i`Lb)|6=LsYqo|aJfCa`SE zAed{Fi2Ut8-SS-+p7wo0T*J{f^uH_CZzY%2u64Bh?_LQ>WfcZhY)by!E8>_!2`(pU z=|qDEAO0P)Q>ueye~L_|im8mhDh3}k`zwiyi~skSEdh*i?=?Z?&b2HdFypf1X(3$HLp&YwOv+dS>o(XX;20 z!x`wmpQP?=Cf7Vx+ws$11zI&+R+RO;(zW`Z3olks&6^tf@Q`1I89=4 z*MD}S0x&bBGTqOnOXs=%7{2X-S}IUcv)}(TvXlH?lYgV>cJ{Av&Ml~+1=Vb-CLW?; zzW6tfh5`=I&X}}s!}hPZZb6PPaf815g!?rq8R_{xwXK{_p$f;@w$?eFu@q-#sM9yWD0!rN8(;uZot# zINoLp>Y(*sT^Yu^l5Kx;NXPl#v+UPJHg!h5wF4O?Kosq|I4UOq8k#CL#I&-`-nuoCrZX=%#^z${x) z1qO1u=w{xE|I6I6#c1|31RQqGq>3b7n^fdM3#yy08s!$&&Gj7CcB1Qsn2t5b@h@*meTqDc=Ed za#FTRJhR^G>(g2O+mkG4Cb>|IS#Ra3&c7B( zpQzQW3y^KKnjXx2r746UJqU=C+D_8|-B$ZUDqOe(pJ8@nQq5`pbOeDwCn-kVWjdze z>woxIW*lB@hLTzP?)w)fZ8$W4w)es62sjhuY1%<xcu#TZY+VW^=U z#Ld-;VJPPOe79Dy=48ZEmZ9*by~0g%|INR4;0>JT{dMo=lwr6`VZ)V0uuc}f`~d8c z;{x1K=WfO9-jyAosVgCb(DiJ!GhEm9dbd)x66d6G{pb zJUZYs>g9N^u!ba@(4a2ajZb?rxXu@cOJk-%j+L7;IOeVN2^H@{Dw3XE@8*^n5j z`+zB!@L#Kch7-qSX>zsBQYd}Df3H2}fqEF|1V~bh%DP{l-JSw!2iN{T!uYq=f%4mr zZMk;mFX@$Z-HDY5vuEGO6z~yIXx6 zNLh(iS0HUhd+0!N>h%gi;{}C3nd4MGFo=t}e4@fun_tE)2=dyGzHqwTZtE^GrG_~z zm6?yKSOfo9`9JLaWmJ^i`#ug!2q*#;0@9))($ZZDC;}?dB_b`|IUuDVVbG=0jdTwo zB@GVE3`h(eGr%w~%=|a^{nh*Pd;7e8)^f32OPOn~9p`x*$9e93U{f6G^^Y(RXj=z` zUC^q?pHC+>Fn%#rnZLS{8T07W45$z~j`R-ZGp>JsYT{HXi|Xdsp7F=bB8qa)tbWw} zG9O4nJ%RtA!onczjasCV8$4fiVBU;d(jJBBnx^<1Y`~@*m-hcASc*!$Ibbu~8-9`L zBg%}5H=x*{u?1`!$(K$0W5-wk1Of&n*Ne~|)UiFh{<8-5M5~|avgQ-bqbE1geYY5d zZAP++4eMW2c?D$1`j6a7FiO`kw2v}qOdbC(x(pQ%56T|9HIsFJ5e80AI{q1h*xwb` zO#ODvQeKz$fD6O@c2BTxLbj1-l28&EQsd#UyYdB@jf?}*=stJH#@)^!VCpoyG7tUrk$)cbg^Vm%WY8P z{w_Y7_uso%iv+D*ZPYbA={@y>%JS2h)bY(2JZ_`ptDRH9{)R)QYzvD^>Oedr#Ak@{ zk#|=P9^>j{N^XOPd6BIr(a4(~yyb|d2jj59fi@QL-K^uqA?pZsrpG>#`<1OWyB!5r z-0S{3)|san#HDpRw_;G1`vlzMTo`$_kB;3h*K-?Qv$u^PjLTtrG}C`lipY|yMwUkF zRj76ojhL_f%BRBK+f->fS}TOXh6;tutB&oXM8+PUW;azeK7G1`+cuswlz#*ClMG@Q z(MlH+dQ;ft)xI(G#1VTVq?Es5qZ~SGUo#uviR$5m#wJ)RQpYCo8kZZ8sV;O-5SC2w z78zh;IJ}Sz-$n5n*BVGe-rb5<)irjHA{qXFSF!p(sT*uF>7|8y!%dlFbQ|_M+hA!U z>gV{9&@9}in?1ZSK0`{7ynAE0vC~SXI-Y36>n_|c?gt*+?awN1@$)m4>^jx-QS(4r zLzb3?gb2u~vi2uq@R+}-vITjqc0P>o7+fMd`nfb8QOT8Dp2#rToG2-UkDgf5Qst)Pp$? zqEC^;YamouO)Z_so#bFyce^kv!wYcmeGk@fvjJY|y18@3Jvm9qXH~0)U`b`^03KPO zWM6i@zb;ZBd1b5(cCzW;n-YUsE}|R}oqnC5*=0DY?Xazl#{Yd5IZF zQ+?LH1XDi*sap}OJ=ZF@!{5&)T~qurb+QItd4N-+zML;U*Wj%mSy6(nflc;0X3{D{ zF5q|?f%k1LlswaPn~pQzJ&-4vu7sW6+MVs_i=P2}zkoI`d>UMg{~-X6=GNMVtBtk) z)+76G+eZ-tuLlRoqm@k5magV_WcLOLkJ9?gf$1^Zcr97#SC6A(l9>WcieD6yWbMlD zX=%#1pUC0nX@Y^5XN^|Von`-t5eX!Y$G&O5dcRyXKKRdqdeKamn6_1i(Oj+6($qLL zilK~RV$=eztw#x9Zg3HPXZOCkQp;x;6owYM2R<(y=gv55*TIV42@md!X7+W$yQ(8H z-8u>@%r+|qn^%1iQe5t<&+PM@IsR_Fp=M(5n6GYltem>o%+C6n*V=(`qQrJH$YV_i zU>PEXI@?()MZlp|78|;j?j)IjM|m^7s%7!+RoV9I_|cA{9ggYg3fjwqwN>xA>*$$v zxJ_CR(wh%E_^bA^r8EA#OrU(^Sv>w{?`o|%dA6=eK6OQ2jG-)k0VeBzgc}E|(SP)N z7t8T8lY(R;q9&V70}lCXz5MVpu)(*afkkvs-P)L~PsIT~NpKXfu=tvgjd6J7?~}i| zWZ5@p(z~~7e>GQ5hO<9WFw;c1U_mb3065;29>Foqp1RP06J_MtV{u2K{K@5{F^bsE z1$h*o-Z}ss>Llo~SmU(^Lhaf8qSMmGPOT5}eKGZu0$Tji|4qmjsqmnhy;E zHa{C$v!?ttn>E`R0B658R9IUg`Ofrz`y>ea_{B)pI|*5`TwqmFRWjD-iX7lCsT_GU z&g{3-TEpZvq)@sPS~$5cm#kA+MVzG;5FF;{ziw!F>ZL`(sh(WN^A3ZU%&~y!%{k_j0)J!|U-SU5uy|Cez zsiUXNUU*-?o}?FFW`ij%&z99A zNrn=b1YWe@LD)nIdW#ihgD3HNHvuEC+zi~}OeIWbdeL0LAnNO_$d$Uku?3ylvavT8 zOlaC)$c&LKDy-_YdhcHcoEXJ6fKQlIkzx6*P5FRz(FB=tlSw>NCkH3 zPoN{4cY{nXD#|~%h@;sTkvef0JzrxPD7+Q6zivwK$@V*6nu*pPrs;Mx5Nj~gJ_FN< zWyQ_?>YV-l`mD_n_dMsHWFl`zu?YF%D7}I^g^+&l-Rv44?Ak5QmdfUNK!0+6sP`Cv z4H{Zt3T=rDdF2b}9H*%4Vq^{`Fu;MPz@yzDryiQ_uwGQ*AW6VQKFg5pg^j+{zxF3O z26;c8+pOuz+J+E9_9o0Bg$*L>r^weEQ@BneJ{M?64U7(LF@T;7o**+}U;>IJ;}D5W)+TrSPj+bH^@PGOb~Rcyp9a+PshCi`|+)#%$x9AxS#qV`d1 zc%O#-^&0nuj&r^klXCdAe$?L;?DirE*jASAMj(N$7ILk@xv99P=pVdo9wibWVmuv3`6AzyHkd>z;>euI^qZX#Jw1CT*y6!LPoyBoR_398?1h^vKfi1&BfJIYr5Du^gQ;u zH|z6;S5?bzs(k{VQ)Z}@b{RT0?T7kFU`|jX3eBHrluheJbPM*X5)5qfjdJBQ3>_x< zq4!gUKJyhI|6<8sb@EkJ<|{+wXbV=2(q7}zyUjS7ZHTFJ2d(1-*x`=&0ncVFX7F@! z)j}pe_?~lBPtC@AgqM0OpkHR~KZoqk;`5uQR5?XqmaZf8djZ5-J;Fj#qH)#=vE|+J;3x($)(R)_>VNQ5HYAy zq0#ZeCpGwOM44;g^9CbcLBGQti)iq~V7S*plw*IgNFkDwF3ThU3i4uhnkQT&&26M7 z-)higzg+Ks@&m~^zr%U*Re&}$pvSY2Y+O?fUxGBNAAY&Km+!b?))R4(^GQ<{i*1aB zjm79l9X6i(s!p8cQ^CXzn=HK!806c2Rw-^{l3i64d_9?<{RxWBOJw>B%c1vsl1enmyjR&sx%qTf-!(ka?L|{m zzH52UFgglcRY&)5t~z+u1ssC#YmJaKa@%fMouaRSm~zpamCnez^)oavYamTBS0hbo z$#-h6u&puDu78;_XtKg88;alO$Bs~2W%&{30JBtEu|hwxiLP;=S=fOo0lWp|_xA&o z(*?QklbgyZ_|ivs;%D|}SKZP5Vx>+%reKQaf9&<5xpbP7E)O06T`MTe9@St>6`lA} zVwew~;2HGed1BF-SEGCym4&Dn4^(~jVY(yXtO1E)3XoJxP#hb2*OaOdPDENTI^?-N z#>)!?CYyedaa(EbMavX_5%*1laf0qF(JS8HIQAU`9iud6CL;%#0V&yKg|E3c6&AAs z|LMhIsm;n!N06+GY}dO~V0`-aRgL!7*)ua! z8G}5oFB`qqr#nu4U3ewPFV(ebKT{H|os!O3+eDn@%-tQ!u5^?daI|_1 z#UHJQFAI_J=x;-43Mup9d{1?eNzaMWeol3O5a;!8g`f{0IWA-=N zEvW-5J>)h@d(bqsVm}jBdc12BB(VAV> zLiF)?<)meb*cQjJ&2z|Y0qA+$QmK+_Ak$~Ke@%UC0VBXBZ{+u596=gTKZ+sL!mq`8 z&y!S9i(E<+bX7iDHw|0X+B8Wt3BYF8Hx12k>WUIPy`RbU{4fPIh*F#ie1C1;??U&4 zwBx7s06!Or0z{2f;Pdap=8N4Q)R+M@A_2d;l$oQM(fm7?u8f6XbP}^$-h0qP$Bokf zq;U3G0w14_UQEU(3tQhHPXu#H%|({9ttL$R^EC3=s53#){IUGc<27Wlzd9-RbaIjI z90E|v$4U2YIbLe4+Px9XY@M($nI`G(V-rfNQ#%i=DjP*i>2WZegpRIE#xP5URRiF& z<=)(?NL=Q49WuRP>Qt#I2B{emBY~+3e^7y_kQCTXK}g>@rBE?rZ|vM=vAcz3yJu;u!tyeKei_OMk?G=s}^8bwoJ(`<`wGYORsr%g2#~5I!2Q-aZ&-LOO{2+jEXn(PMhkZZ%ekMva>X`fWi`awObJ-|)c; zOE{0r>xr_xE;+m`Yb-|Zx{S~Bp9JPXx?8Cu?4nO=&PUMQ8d4xF(Ar)mdCoZKS2gm8 z8+kavPJqm8aS;mhDN!D=gF`Q?;{hxJPU$&7a}cItKp};lfBzWs$xMbiM8CK3c1+_0 zdJJqGda~(=NEr;!HfDEz*$kca(6$~wlOKY<7Gvw{Q0m9j?P8VTe}KlK)U%f3W&VlTN)zJ}-80plKy5%)tzr##s2Re{t z=4((L4+v#lEWS90xt1XQ#o4=sqg&PMlP{-a*tE!&i*AN$?O7B{Tka)jLDG_d}%F=5ibe;Af(o+-)JbPTpw)vM+k3(!T9 zQRpZBm(@qPbk!WVx}$_|0VmZO9quX!`H{sSV1qKVfbc_d6`}JE*Z6 z0pujvlOrAX&L$kY`Mz--CS;2HO$SM%aj*3SgYM12j}2kEwdpd4<%F#PIC(a?q9b!0 zxV4O9P`&)69vxG1rtD1^PP*z$oGhfwCO^s{j&6qkB3V_C&hN??I_x_>< zMQ3m7|06Rm(l6(=ng9NA4p<1|Qv=W`ref(m-#JX5i?I%hluYg4HAOFkK~BaY{->C? z#G@(sGf9?ush4aG^rrj1y*T7hz2W7)>{jhUb-z`|k%o#C_n4J}F7gQiG{%gMH;b~_ zR}OaqjkF&~A;tnY4EHsi;!Pz~fS3Q2Ym)6g9Eys5DA?L1)fYMEhL(_iz9#Rf5I^S+S@N@8| z?_6VZ-@RU(Y{vc?4R&HJVSTvziC#9!Gieo8CFz0w`}b5p&zeWhqX#gil<&&cvh1)}^@Du}MO{U}-Ix z-)JmWlc9PZ)Bzx`N`4iiPnZw9VsGzg;`@%5vqi>@3Y`nPfkkut(Vjk^`<7AhOXC2Z z3?nz_p8}s7eb5?@4wh79)e+(=JnOqHW3$+ud%Y&mEs^$+i87hPTu~N&Sh`*c#XF)D zkTI{DvCEFg+^Y4nO7yDntuR-p0SupgOi7#+ift&QP??q&1OdI9lyCPA}q+HIz5&&O!6 z9)B-`;3CXIbMIAmtVIBBfpz-;10|dc`H3vWtzRm?*87=&S|s^Jr^#J1QR6&b1hy)F zarw^#EqILP`(MNpe=1w(O8F{oSRx?cbm@@hT}c*LT(3$DOInS`drkCD2c3*vqJa&- z$9qrpVs-F+rcoujkii&+1c-Vsf_J^Va!peH?i>@lF)GGH*TmZb0Sei++n_qS@u}B+ z)mF3=Q9!>s?U~(4p>J1Q#i+U3;MUx%>JC8;7#kVBG9ggDIQcgg2GyN^PW} zgZfd10=LzV#7&uYHuuI19dpJ_A-qfA+XJ3F;kDb+^C?$&%R_|5arICx!wtVBRxP>W z2X5nRv>E!MpjlkMR)@5#yWEl)J(q`4ms=7b%`6rF9FKg|wB=bM3 zRceOTJI(uf7rxB28!ySXYpykOmqdhxg>?o`6yDJXEf8F$o8`dVQoC}|pO|qWTP@*% z7VSM)iOC<4JILo^Hv)OR{p4TcttsFx*R`4} zScdsW@=e_ee~9c9a?+NQS`u=0H^|ajuzOxQy2nj;kWmqrJvD+tK(CwMCRbm86l6p} zG9~*=xgpyBw`?GHpV$XkKTxW)S*x_MF~Ixd$(K3<>BR#4uFE+XEd>2mfBFH6%#M*gx}z;u*qvw6zDYR0 zxNQn!C}sJnD^A!1D#`wi2QZ&a+bt;J6Fr0^9I;~D@*E>1M6V4*!WTfveMJV`wOYE& zoy{6giRH%Pz1Q{{35Q;|=)W3wiyWzo-{U^tRvhoPgS(dO0&IwggzWv#(YvxaCks#a zPa3Fc*=Q}Iqt^QL)D{m{PRru2v5TKHS&}(kW%`-Ya{ifAkkXbP1~DZYS_ zT%8N1X@(&DG4|544knZJG7B&(|BK9g@&$2;6&>d9=G(*hy@3$y2ttk~t0eL|JIul0 ze?N^Yh>7(R(rA4FBO$#7T2d`dT6eMIzoZMNg-ra%!iU(wBK-i;(RWrgX&@n)iUZNV z#v7D=s0WU(mZWT7VW*7+$p7Cc*CNd>z$vSIusMyPLEx6f2)HOmzlEsATUqsED&dha zYb2{>M9+Brv_ej+!)gHNE*Z)kZ&Z*k^RllmeVF}zm+h~b5k$@VWYZ%KFu7f4*QzBB zf^9?$7qfk@$|(8pSMa6YvxUr~Gm?IR&$)-MvSSlt;c~~5gQAeN{9Nij@*GELBz}$k ze@032y?k`cJFJgGjQ^^dX}vdqM-26#6}KsFAyaZWQ>ja3pQ!H&(X-<2)QOc3gV8W2 zK(HJnL4D!`Es-tOiy5q;<1R9q`HKK0&-Q?-5tvu4=m4UoPrKk3gke(wkDhS+Ju z2|QTu+h78Fzdtpm$*R{-Ej=v-p8zSrD`R(|%Mmmf6s2cWp|<|3*E~@nu5k5h%;0B} zaVxGGtKSEOucK*Dbuco1<)ny*{qw2Q-k^X@+jr@iF=v)<^Bc<;zwd2TEI?P1ITZ() z(Q(2Fc%CzuztY^rJdz;&(*~2obQxcG&3qUmJYKUxs@xPBu)Vxg@Hp z+$lPCjYrQIZR72`sI^z(0?^6k(ZRIiwy6KnUL5KKy(p=>zN!2d9PN^#c3DR0KtIKJ zypcLx4QNR!X|ziazUkjKTm zXw2aq*4OxzyM;wAfER4+?tl`N%-sxZ!PL^)0u!syv{};BA}@0FOg^b=$n$kQW09s~ z?$XBc`?5-7lI>ws)4Z&7<;JpnS(^Lwf0sHDvHcwZ^MPF!nv$l2DbLd>(OfQOHAf$d zF~62Aq)N!{N7$y*#NHlex&dolodwmYS$-hr#W_Mx4(wH;u2=PfmW{D8HJwi%GyY1Q z#aseb35Cd0_0<=>%Ys1)88>~7!2mHMIT6yYMV>O)@7#PY_B>m-vb$0DORO#i$O2Y9 zrzF7iG-Pk2oGOCQ|nD#dTtdiY3(1d0?)q#ERVivaz*xHMbUqVS^mo; zv3FtD=YcdSf=tFsOi+{<{IJ>Y3)aQWV9iQPvWV*UG+QzraG*cWwW&DRrh;Z7iLc1!F#Z#fy1%AD}AF!4Re_7F2 zRnn!@CZ7N8z#*QXHNBWd*g}V&eGEA&^ek&%gP}}DjgMcfY1Y)5pu`|@vcl*@C=V+s zpX?<2T_nq{*?OK1FwSHuQ=iprdo=8qSZ{*`Zw9MwXvF`lx+iSm9hHqRb2rS^Z1`zs z0?h_^-w6lir5WW{+&hDh|5ssi1kAcQNE=vzd&kJ_@F^ugWYI=AaNC9q3pkMb{bYC5@ka#sQ8(}VU*S=8YGAAeb z%_Oqu`M1wIqJ=DAZQnxoPj^AJp4cn73(pX&T8ADZ#9`TitIz+jJ(oZIc~^{x@6O>B z9ifb=TIU6f2S|dLXgU0$4Zy_Pkd|+6+@!~TmyXo<+|<1!!PX<(CYXBBB|l8g^?q4| zPv*HRx82%4H_ayS8jdkXck{*Or`^bZ^RKblzd!Gi6G^ggiw|U)wTH3R*o|*-xYZmL zfF74f!74uH7?Hz;dX_lbutGP7CZ<@IJE0ExOm7D!%WYr!sV;!lzVgvu`C1L;xAq;J z?oahz;v)a@?Y~c-t5FGz?s_E7f`Aq3ZeJ-{-5tK9!Xy~Von-F8O)ZeS@S$`|#{%Ic z!DdnM@JCC}9B~*EYdHztRu(hks-Et%mTxThq=}p9gUsZOHzoR1m(RKVF||6qqJGDa zqa~CSa$mP_Ti^>$=yBmOS88-AXq4;j(1S@&?oR9&avxUn#W2P8vn4OSEwdY=1}p1P zCTOgxm#Meh#4dn**$h0J2lSM(xPA-UjafRy<^3@V0)}l7=U&elu&n6pQ!&%HRUI)! zcL`Ve@Z^Kcz_idxwCo~1()i9reuOlRCmwwKgID1(K!@G>@$SmBABZds{QBjubo-KF z=SDHrZ4Z5B@@cQe18Ss`n`_PJ}#?A|R?tI>&8eVmA`B>DYD>ku&X(q+X)t zF{Q(wXE$8Ec4a1cnv47u_sUt75cB&*zSph^6}_W{Re;qnYwXmx9zn}3S)yN&qhw8M zCdT*wJP7)X*y-k2W(w@GM@5??i|KalLbR!wXkq?}r3e&Mx{bOxBw4O6e5b`cq3+gc ziF`Q!wyc-dsy|{tm8vgQo7Mb*OYY;OkxL8rr@m@uQFTUCQmwzsi_{6pZTg>~dPDkV zbeDuI4*9iep+Pz7y8m>w{d7J#tDh5`J)Eih!fers+u}kDFH17amT`t#f^GWDOP6a- z%C*rHhWA(AKkxb$CiOU3IDZ(Z&mW{*m-{@Nls%LSRqez%>YS95PLinMk?&VEx?YPj3kg=6EBD6pLf3~gRp4gf%+;j4tf@T_)a1-Gc>5<}+)pNy zQ@Xilcwrd}cvx#jUU7YJG(#sINAjwjqcbNX0KNFT2QlD;#EyejST0 zHaD@fWoWSYHtBKcp>gF)G2X2T0iCQZP_U{HjMP!PV1lq&`WZKg#bTksN+V3v4@H?i zhQ*pkMu`4vxB9Pm4>r^TSb?@7MXot}YIG>5rlyU4RSK5?gp$w()&Yi7 zoPF7v%}|m>+Oob)7^eD~@?1C3q@t5yGEWbK**XQGk3nHwRYd&eJ{&?gL8yZcO9`fr zOz#v)7ly-sxs{ z1~1bv!@I5--3Ps@>f$%4%1}P-b*@NJlV(5fD@7tB6udY0hZLVNLfm(B>3DCs&n5oK zGQW&zefV^}NBM{QjXz;`hY)fmw{@xhdaAuG71ISt2ArXB_MC77%WQ+qJtLghT0T3gRw)yZ+)edo0BE!o&>y8r|#xgXu6R0 zkouhj+r>y%8S`0Wo>@`I!0CotWruWehX2Dz|^jdAwo|l%FNo^F6x9(&a)bFf5a^3vGI6k zILWW{v1v?~er{0?TPfYU?yk>8F*hF-t^67`@qmMM zYvDuAOx*oo8)^LQx2z;nb{b6>T9Z3A_gkL8|E%tR%{u@8KmUIofuKi^*fKxH8+KeH zx-_9k+|kkD=lF{nB2rfRF(bn?8>F|69{n3U9ARAEcv>H=U4Eqd9#yK6G(PW0OSpIM9yqBa6Fn|v_M~yr$o<{FJW*jt^6*PVZ$`c#@9c6bCt~!Q2Sw$ym zuKIsAuicA;6w!P)={Wj$wdAN~6|Gz520)T}vamjbw+;X4?q0ndOY)JAtLL5kteXuZpg2L17yPN}`G{y@W(psgSQ;rPW{W&EVeaLV9}U;4 zF%sTgH(7k4XW!sVk3PLnQQ_rM#a*f5(vgNi=e~qmMOEF}MDn-OirS5BG=nov2-5IZ zU_=tGTuv7|orsYefx0pOB#1jHEgx^Gt-a_qY4mc2ozmB8+x>#z!`}krK>;e(`GHDr z($ZKf|!DA*&%S<~r#fjg3;X<0;g|ol#yyJS~vS93v zI-SYT#{~K}qRq2R49drqvRrBLA6-X-SdCaovk^>!yPCi5jj>2(6+rMwT;BI;PSE3x z-e_MyMw=J~0&cU$5MGP3Kl!G9IypZ%Ul5`b_`m6a$@%%{3|Rp4g&+ORpaNqE7sN*= zm>{Oz6WXJ zKe0CU;~Az{%eQ&cAUn2F((y1QI#J(IS7B>ZuwI+AG^4oR8}gvl`K`nKXQp?zpM+fK zyY&6XV=F?+s%kEWnf#5JnzuJy(B&hn-S41ltQ0uKK~oR(vZo(t1Q(k>uhT}PZ;eru zI|Y+ZsDpL}JtZzjTn1xbNjeu;sZ6O_Ma?WJZTRF#8KtkZvpGK{%LrGQ!;^_)s;}ae zNqMhnQrbS*>X z>LGSt210qQ&#{ZL{lLEQ(dOw>zVHy^5r^e3Y5Bmw=AXMyp5?wirqy)i3=^ELWkBlk z!DTc0hoQ0tyM=BKDJh`8lw=KJo4GpfRftIQ5V=s`RVI?8(PHY$A$pg!I8J`E8kv}K zJ{5UR*x;(vQT;uUK8V0!(bH)22cYjLC&}UDAHQe`(msznoF-4fY{n&?VZL}xPD+YV z`GM1o+T2WqToUTg{`%ET7V-1*Oulx^-(6p|j9s}+0gX>&Fk}gE{QjCYD6_S4m~&p? zp-JlsSgX1x?XJ7)-gwL9C3kr`9v+FzYZsfRDghArtQkmHwgZ!PG3YbtWolK80b$8Y z@bJK45*xIH(~Hq`GRGh)M%kGnrTdEUtBG&k(Nkt}3G#)kUK|X&6xr!`HP@|e*sN&J zS5;V2=AjfFWQF%L%*+jlwlnL0^)4dnIwu5{HZ%!Y?R~eCF~_rX)7hPZ45Tp z_S$<$Mi{(1$Z^qkHPv3!|elAK3z?I#g1FeKLk)RN%T)`1r0Y};OIuN!T zci*ic_;+!r%$Fi>X zzG=;OIS*aEPXWyf)9gQ2^Fx}l)7M;Z*`DihOdTV9{?09qlMlW#pRQN$SS0gwAf!qQ zAk*8}QTo_N`XZlvGll;)xUL)e_S1%$Ls2j~My_cze9OA$j z;O-jcD;8?{s%elYbJ9Q{_FYeM71QrV-^*!N9iOMDwJ$Db>ZwKSMatdPdS_mE)MeGH zNj9G`X!;v#PRG;#rlThFG@iLpbQ3)c|M=?umyeg<8kdz<2vW?#uQ}25F?``r$PMHa zf6MZw%Hzzng%v*ms^466F}&Io$nQ%e4AbbDtNQ1a!-X<(d(@!0_d7{%;z2}tgVZ!G zySplP`EE7EYj&b!qJQ8b+byE%z{5}qLroDP*V|5{!QtlAI5Lhz2jaG(IFj@bPYL=* z3~2f{Y47RP)EXF^-JUg)GR5xPnjZKNc4@{dQQUH1BFhw~O*p*yV&O^<`668aSpEIK zgd08N_Be=d#8L+x4*E!zf4l_Z)hn>_DX!hfqI+RFli7QQWJvMw+PSWGcSx}bk)HIA zm?#$I4c~olbwC0A>weu`?ZP?(sb5aqIwgBQ{8>M3<{+lb-e@$OS?yAv4#1e=c0+J- zg^=X4fGg~AgGaFtIdWuia&v*fd!)=Ze3rY2|$xx}?=_0-F|UZZv(200K$axtj*^F2lr% z?O_(7pDvPr9le7&$!vtRU%Md5+$uxS>2aCuM^fucm)o7B@Q~eu_l&|TuRVW2P7-e2 z)ia$t+S{W1pr{pqk-^l~@2@FAE};%I-WXqTnJxP|)SoUhtxni7#DM;q27PbuloeJ# zxc3(5<#A8yK6#HPnMtj46&-er$dhSg7Q6c`l+d_@FgX&scW<@{17Ej=71-bif>><~ zIA4<)l5SmqG6m^2<3sKWJd_pdwWW%ZiVzD~d10SZ6f#mfLOb-7f zbeqT2fx@w@1r`XoivtY8-Bk{w$s(POwTEp~j5F&5zjhgEvp0tIuaip6v)3T{N8W}7 zu)HmBkOwj|?0-~Spbv|6tko4ymU2w@-56GRib4F)_YysP?7fK>i$d~$Kw6GLqKF=n z6`O2DPYkzaRP#!6pkz78u$GH>0umjqp<^hVQ% zhdy}V(56IF&zXKGHSlPUhUMN5=BYxuwp2!eFVGYjE54G++^;>#C%48Ut}G6EIZPMg zrnLxMxd*NUf81`#+nW5m2`UE3U+O2zDNd!Ld;|puF0)~$jk4dHJA}k*_yJu5muY|v z?p)O8#3(3h`gHsZVN)Of(MRtY;n}L(RgLwQiUAkBD_uVaZ87vrvEiK3jSsQ@O}$^{E?hSlUrXmyIN@Vkw{qhOivqkomd2rLQX6v)bxYUAFY~hMY<|!zID&w) zoegv*K0Qda)~ut90dztEt~;ykNX|8x#M5F zCXGJ~?cWB>ha!zd#Mx$K@rUNB9OPMr5rQ0(ll{h{x7FV~yW$LF0%ynO-5j}~JBIQ; z?2abLz#wa)q^N5bO{}{)@1nwlDqc?JwMW{=pwK?m3HYL-0?S|34snt9t|ggCuM|}n z2ekT_U+YDbJyr4?XZHNY{gjy!a>X|7v{8KPs> zGlIXaWVAd3v?bF?o<%|L;fW)>sE!fR<)xdcO!X;A%Cp25oS2+VhS?b-XC)g4~+2rHRz2!)!*6M2TwxCU1hxIwhl$ZocrFAFBN>Lb)-KYhJ_KdyW_v&tidtQ$8b5 z4z?1t>aJwy6ghD+d8V$SP_h|m)0NK1uW^~`4kb%9*1I=6ZJ}BpGN2LchxcX+$1@(Q z5Qs>MdgC+vxn)jTRoZBO+d_g+1g4|uz)5giY@TXc6y;rGy5}`9QS3`AMmPNN*I2%#{1u#PHfO z==DW{-g1qGXnQO!t_#viTpTjsTLcy~n+!1yb3f%&e$BesqOkJbx?hk@z`y7Ds{q7}lpk)v_ac{QD!d~rz0pN>b8%@x__ z%3~JC&H%M{@fxqm+x4~%Q1Bu@;Sp-TSE%DGRW;GGRNdn)_42j6 z**qC$b8mabihyS_e|rAC(kg2ES9!MGNM*iZg>BsN_1V<&p^xoE7|@>@qNPnT+izLV zrPb`#3&Hj1#b-lV$b`3NN_bO?L`%pl&!?n`P5a}qRu0&RjOs+fIZk|y)Y78X6Ad@o zsV9qMG|U^#X$Qq|`*Z0svsk*+7;~iP)obi@D)vxlq;jX5zQ39E$cdGnk!mRq9=-#A4qc*KGqb^`6hhG@X|td) zc2FuhXrXYX)>*91K*X+|JvjW!_LceT7N>%3PlTC{%*T5%Cuk6Xm3#CL1*Ij z!LCY6jT>q~wmCCaV!WR2hkDot->;>i_P+ONI8(W9wqavSr&xbU*;wqSadhbftWcYr zZ0+C(Jx*II)fwXnZgMEFdZ-*P)R1FQ{|S$hqpxr#uHW5}l|TFSt3cmxm@Z*{f{}f({1ozZWtiH zExnTN=lAl5*-?HWD2{E-xDL3_9;{j}RTrMOjTnk^_}+pMpn!d??S}q!f|>-2dduSnF|sVo=k9b7j2k>2&?V0& z2Hoj>b!VMU=e~w&h}qS{p1`2PyUmHm{A0gbnLyj#lE-v0<)_*zyRmxa9g!xU6Jb&4 z(Hi&SyT>1xWE^L@?NsVz4(7()DIet%dIzCSbfzxf)w`}|e+y8fzam6q!hf%(ft)#Y zY`=Qiv4cKkEgtjZoo4M!+H`Fb<_$-J{zfzQh>^Y($>G>1-+3d{MH}%ox#5y=+#SYV zM+PtU^HZWWms20k=&FUqjvT2|VD63G{@H;tJj+gQ`S|9;qZ;><$fI>wG4eoa?hNK< zR)VovVrcO=dy~Ku$XnWZ=L?D%AWn0wWyB$}{Fo~u59mQ_5Ij7ovfMd-p6`C|2%VEt zY$&4o8xAselStHCDeQQVj?j9Oh%PzWZ5wLbqO&s2w&z4s1qi%qvc5xLd~nyXW*0@=4*pmy4@3KkW_)EW6hv!Kq~1w&=zxR3q2^S`5Cg8__RdLN}TP5 z%1MUVMU?qrMDvBw@1Tx2mgcMs8K($ts`E#!a&Dn|`8e-p`U<4xQwosKayiO-mU8aW z;)-h!_mprkc9vW}sM02!y^_C9^RW}FJ9ZtT7yrq~<|KcMF!l?I+H(ynY)x#67~i#ak{4BhY{UI$ zT7s-@xPLHgeD!WUT)%tb(MKaf@2IH`w#Ns@?5StRGKvThlqtn6#PRyztMAJ>UNw-P z+6{ZDMaL631XR{1vP8{xf1EiXqx4!WD7Z#xkD@+@VCAS_DE`>8M zlco7Objy%*VlxDXJkOE}&BU@No}~;PN?JSaKs4Y_2A$Sl(5sw)rYsj4nL{?R>#o(g z7v!}0$&9rKpxU}MfMrB=gz^|31T(rFOwtRL&s2N~=)MpXJW8p2H_0!Qe;PSWXOqhI zYA;W)L@i;K$25AscIOS{)7#MWa|@oEzs?1xJC?2IXt~@N^W7Pb3;IrW#pp`k&I9I! zvcTVqJ*7#hgOhb||LF5!#TCv%BxKZkOEoE1vPR}(o~KF_fjYKFTB>yXz=D^!8~;mN zT}y)_JVxfodK}Wi-~n0jE2A_(oyd{AmykGfC5F+Hq;vemV@(N6h7H5E9VunY2JS>N z8xfJ{M%Ywj8$9|UX-?kAvHBTdrIUkK@?m~9a+X`1ZFOyX;%g=&6;gn^2+=CYT-qc$ zxy5z$HlM3&@8G3PT_f2(cZ8K`uQ_$62$dqHZr>@j#vPmgW$z?rXgmamAANrRj zgo}PnIl(Pa3y*I%iRUkttE-WvhJ7tTw#ujzcDPH*Rs-@OE3xSB$`3WUr;V-8c^}kS z@v`E7pu}uvhGY&~l;~fW&=wZc)n!I+L|vo2{-&8yhweR*nL-#OM~}`w=bkw z_dJ^=fI}=JRFde|-Bz{w6{y#Z_u)lJPotKg5=Z%?TVnkEeDqeg;@xTkjNHEQG&8|N zkcrHDy5_AHF8|8^9#92E5mmfTOF%^_!q`e5#cgkB5m1KRNx= z<(Ju;O;0)t#^cIpMmN9Bcm^A56GBw^eieoAu19#!)op9)1^2c6huH_JXu1nuwW@Q! z)j&t*FK%9HunNMmrs&XjrAN~$F_R9V@u~?mP_sIgM)U13dMaSxR0n*FY@Rn%-gD_giRf z>kZO!Rh1VR8_N$d|BS8A>3W+LrV3Q(4A^XjsbgxIUcV-!rX=IGXW@BSa?XlU&-YJ; zPe36Zhvmak??WdpSbj&G8fySb`0_hG>&5_XCD);Gbwm|I?*$qYlnVdI#ro;P`@NB| za!R9g%S)Cif>e59g6)V!_~%yEuP5qo4%EQq@wbk#uKTn`u|_G+63*d_4Ygq}J-v5Z zEJvxzmWxi@j>PB+y@)yfITQInw#3gxiV%mrzkWQMwAm2+rK|jDq`u23$9nj2<8l$~ zEO2<5j6Jt1pr6yeAw`PkQf9J;Fb*M1ybnKf4e+qp-#J^CnQw>8YTi=26;IUHAB+$6 zF-?OwaUD*oBg9aa^hk8%84GYYCu;^77K%t*%>aMs@ySr~i02RQ$mx(%HW6$0MRtP& zU36tqeCEd|pMV{;o5H%5xw;d~z2-Wlr`on^YHvHdn3(*f+BW4rSN$~tyh4j+;3v95cu07)$wuzJs5s*VKA^|?gu{Vkm|8-zy+#dOtVL~9}h!d zz?AfO_S<5&%(-bKxyw^c4m?c_I}0qj^f3;-G}JeRr`VtXiFDY$=zXThix^X-u7N&Z zYu8%sDhHg0-cqB%o>=u&P}G(&w}|#Y^Z7x*`riIDXctz+)kyBxz?$4^M=WN zstYeBBPn!Yl+<={)H$kvFus`N_v!fd^g)c_2YolPr{Bs)O3Z!-ubsnB=3_c0&PqyR zUmi}m9MxP9{V}`Q59BMY2*Wht+*n%_e%7HZmC-^Z5@$TRJ&io*%PpN<>8zExlev}0akO}(%4!u=K^#mxSsy*QdTj3toX@f(VoY&>ezt< zX5;Y+oyMRf;ic`dBF;V)zqGP#Z1MiR+ss30!$1f|R{gZ|jnLq$`QH~S$x(;*lqBKR z;U&oo3AkJcJUk>|tn+5Vu(!(Jb}P?@9MXuQk_tL zwF|O+;J}Qt^y|st?~Oqy7CfVi{jjgkLn?tzN#Cthv*ju+^O^KmluU~J`NrAk1wBov zPe1Js0LE$NTAPjVwA^3r|9U8of+gsST`E$(AKqyXoHJOhnJ{>00HOGHeEU#-7!JIG z8oD%;>t>G%bLgH~74-{fz(W%d8acN=nn(6Bn5 z<@MbU*J@e2I|`v5ZpQfB^w%6uj9W)}pFy1l74)63*qS{q2zz@=-wi279GH|5vFOPe zv-Pm1{qXeWYmRNU;a{KY4zLPu(N9Xu6lbDKKFaMqlBm6Nr^N2^g>s*_SJP=x|5BH7 zwO)JTkJ$nrra-LB9fz~Uaw+F-p0W#hqvirRdhTNrq>uEM1GzpP8KyBH$0qwO6ONtD zZx5$SL=tZq&Rt1q#`cl#D1hLT`(R)@RCqPN>wM5h!S9hh>@?$Ttc6G!z3F!uy?XPl z7cilH{&cE@>SXn#C`wRfghR!wV~X%7yj;hRuA%yhm1XVv`Y`%~2G$yk#_pLH%;vDI zPEs7M?};`v!F#qc0bMia|%QUK7#BEGdm>F_JY>O zU4;B$S2}kJD{)9-!N21Fod`)j0BMx|G0@wFRh+5cWq^k6Y_@^$Ale7FpH^nr5U2IZ zV7LNjWOeN*ll27#?x&wF!CLn=7rnkU+2~*EtLpjIdr}5{<-f6IC@ks`sO@*;~_$3X^ z%9A{_hE?3rc-VDuXP}vuRQc{hJz3F$|NX;c^fKnGQ=MunqVSUu=W+OC9nQEMj$7Lv zVFFGnb@~fu@qFW;&f?Iuvs_Cdrs>gg@99PdTW0r?DybelHoK)FKX-l66BH_!>6(q- zrb4spg|IH;aNDa)*D|A|Kk>!vtiri_S0JndA3PN@&aw_4HS=8y~~$vMbU+ z7r4e&GeT*Q{fHQLM~`#}AM^ED_ld$jWt$K`wzD$@ zVyy|Lyi`=?yQ{qRten)>?QWNpg*)*VPjNR;H`!_WTZro)Py*_eoedSwJ#tvXgr&b` z5bSpf%K^|Ue7QWc>_IY`HyqCrS`Tt#Y5}7?Wz-Z95`pxDEh_z*&A*gNCwZQ2JNQST zWV*_Q5s3rIovDsJ`!?P0170C1;|e&vccv2M$)?QhIQ{AP(Wt=?yCh8=64Y+?leX8V8kLwFGAw2foEn7VIvG2k?k=>&D=We6lUs~v8IoJe+_X?#o zkXG@MSGab?;nH{ii8$|dBJ3Tboi;Nq-nXbO#JjT`4;{nDEBkB#DT)7iYRI)=dI+NH ze0AyVb3$tB8lAS!N?$yQ$cK!`_j4ls=OEb`*k!DgMZIqMD?FGYKdl&UQxhd=rY_@P zCQO}~Y&j~`?9V>>{8X0JJ^t`pug4|^YC>kz*e44I90OZ_+$u2aT&j*aI@od4dW`!jPixXB5p@Fl0X(jRMhr_GQ)Hp}(L%+*d#WKIm9AAaQ zUW=~xsk``GIR11iS^aulW#e|kFedT@Vf{MshZkvAe~J^m9fTtlolN6e8GkjBkR#1G z7K#ezdPTp2r~-yC+$o9c1P-|RG>@Oe=;t;CwsL8IbK9_Y=Q{#*AM({C?yDTa0ViB1 zt<%QLH`amvj#U%o!Pnr5<^Jkv3v9tir3Qwdze2ileC`<_53B_!jSHFne8`X5O@)l0 zI^R~n-A;yyf3Y(}R)B!^N1k#g@$`_l~tRfWH+(HEtzUC25n38H(8UBEhWcWbgI~ux8crH)wb=80k#}_L7Ta#YR zQBr2?4{3ES0N0Q&olKMz`b9;bv^QM+(qF=C)%s@oVfy+{GPl5TQpDC1paE)ol$Ydq z>95(au{Acg8XrYBRxYkN1p8(_)-01V_fMRaj59WU9te~1uy@9kW2K=|3muO<5ulxU)ljQpv*1BcT~=0Yuy?9M>UV3gK(j{yDS zBI^gJ8t8<46H1k?J*z%zrf>YK&eQMUb!m;V=9XFF$v6SLo z_165Aj>o@ZK;Om73*OAzNJ=11fe^(==>czoO4KeHn;o=$1ErK%=7kj7#@9$;Hi0R% z4}f;l2m7t0Fr?1E2&c!}AX6HCefae5=i-B(cEBllpCpvW^v7bM?xeG@@>EI0(Pk80%1QePvk%E_tKVO#ryLhA*aQpTIoBp(zzVrCSh+ zS|Chly1~n*PPF`SzoaFBvbNrTeYBqiI@Ma$&AtAtRS1O!=EU`QjdaT|Z+3TZ-Q)4O zX7y=cDIB1+wLOQ1#mb*JG(0Y~!UrbIevU2?t=>|vFxD?2-+D7$98`h8pV4vFH&zh| zSStn*gpIOYjL0g=0yckpC!Kw_mC1#{3;=kS8cymTfj)qe)d$J>9xZv}* zUvUcmEQu~HuS3`x)pqhor_K=xl4L#|Ixi_X$dF98R`azvS6WDvoU;LYDM@JOI~ zeUP=~;q~AxFR@|Y$)k%Al7-$s=6?mjU5~dpwFOt`6$>$Yng;-%$SI{o{*0s}jqia! zDdZq!5^d7MA`$a_`|QT?Nc$7l?T6SsFoHkTvH?HNHE}N}OjfQoED0@pDe4l>db=&- zRwr&k+kMI-ZO^ai9&k0W<>&q)WZ2R@w+))tW*CV*uh>2lb7}9=iU&(ZMN4UAkUlbTSS4~=X`=k$x$EBK0L<6S<=M=bwvxvIo|4Ksk<{UW+v__}h`@ zk+#eFF{qY>LXHGf=_{AcXv`6`eaF6%oHX$L`y)j_P34m$X`{YtXr_I24NU-0k>1`6ryP=5c7N4+ z0UGW~vd9{(3_nH>t(>ekM3!3*Qm8~3&;|nXJ^Vd;O901L>%~)*trL#bK2!G~*-Pl0 zWx99LUJRcPo(LbDMVw|vr)^7IHDhaxbJo`Xip&6NR!Y{nVSCYfuNB_H_D<=d^m!!4 zyQj+v?7h(uNea8I%J+7^efeWLcZaAZ0a5i+v!YWGG@wJ18a~7bFJUcZ)b9|x^8u3w zJ7vGH((B6EYtwmjDZs`@%(S7#dET|lssVshG<;W{iGl|a+r0mRw5<)#*MFN=*fq1e zsoj?gNhUW0uVQmP?mG9g$s?N`V8V2cH>BB^4n~udJe$Na6KD2r$-KmBIQ~u%u8Y>C z`eBG}+g;re$A9KAa|Te%jDgB=r@FYFkhfF+f7+82*SZ*NVw0HJCNw7-NE+G)d>h zLu=F&QB^)7*fA54`%;2*|{gj%z|E2M3DjA^s-!nTGkX)lQsi zB4hyVc|M{J-#|nuM9NmS3JI59NdK8wG3;&Z9 zq6vvCyB-vh9>UN74K{vhpY<}q$6wVykx3@H(R+DcK6p(@ zF*Qxa_m_@N-qljJSES{J%QBU`@ODSF&W@om&3}j4qG?2g!m+E$fs8(VvuTyu5;yqTHH_Jr-v~+VUNk`E?s33Q|3u1P|-uyA4 zT_D;ydT?-A9X`?Tw{@}fCb^q`jar#6UV`a=RPO?$4~G=}TLErFkeX0D^U_$zbhDaP z2)_^q8_G_cK{3>c7Q9(1h9w|+#C2+Y4Fq3L8f{_|^e9@n$iX*P_}2{>FLJQY&ZsCp zLwkI0p$f20e17nk%&u51l{*J1x{vQzUV(uh0KZ+?+;I8de(Q$-lz>SS$y2^6tcFDN zy5v@xR*{;cKy!MVxs1=*g6+CRYZc8quNg`s(iu^IRYY*Qx9*K=8AQ}tXR)Xf5HmyEV_ zA+G9{Z?mBQ9>AL^h*tgWW#(P#D=vNM8cM>_9Po&ONO92@80n!e}_1llTng=CSx$Ib}@{qn$*!iahAS`wVB)~vK z_BL*12vq+&@di*Hb5{UwLdgKo;O~!G0%?_#SC*2fD@#f59h1NH>#=StzPbGF-M?^M z7Lk<#XQXC_UOej)^#!B=nAh>w8rZcsora-NmrQ){wn)lRIPuZELI+Pa*{ttE@LBqt z>UfMP6Lk{JW!zln3DnOqUD}r2bLcvF0TlYMvJwb#MEwEff+|mfbI>1_`{9AJ1@|hZ z{*$K_sZFavAeICfk_7+HLKCX~-`0zo>L-;}V5zu`+Bf8mXhLbb{+bOGpc`9Kjt>Oto~HF7Ju9(s}^F& zl=A$qq1KgQ?%d+PrCyIHiDZ<-$6ps3_*fdF5qZAUNxK-lwj=r`TliibubltD-c(4`?Rlnv6gwDyLf5Eu>0@xKu@f~xAyRL z0w9GTh_V@4l>V8o2ncT}iG5C8(wZ_@+A}BZabnt13Klc`kxZY|T=JTm-0ubKtlqg{ z$T}fD1k=4(FU^DTTQgQhEmWL!uT&_{;@HdrN5&S?jk?8@L0n;>n(6)?TN=a;VX$F9KtSLnzI{~$0r@Nm0s_hp^%;1jFIQRt_{G~oL_}Uf zM1)Y@(azMu+5`lIGR{a}pIU;Ja>T$uUw>qhh6={fO))GiQc=IVzh|m0Weh*VK_bh^ZlZ|8$F84asKTRpIf;K8F>VA2NTjU zu;Cmbk;WO_8Cw`B8B8P%DOm^qURR1^JCxeqav(M^iX5-B;sMA%h&xdfVX8b}+z ziTAQFXvm58j`Ylc6d<6QA>|7|2FRG9^28vG>y7m2mrnHbYy=@mr4RMg_#l1?8lVbJ z9pnA{+1KiGsLde^as=`(1hdy6;V``nQ)_U88%`$1nyr_Qk9zD+pI%5mhjycUe0+2s zeSCCB1l)fDoCzX;kh)pyL|P#u0@oqSLRsBeT}GPQ$j*k|z}U{vgx=l89=J{*AiVC} zz>hX2&IW|;HrBRI-0pnD|9FBM`1#Le24cd0JmPG{N31R*PbgyNXhO(F&q~io%nw6I zNXYAGY|5?pRqUU|f#3Lu&7Ga?xfvMT+}!BhSm^B>%@~-txVRV?nHiXw>3~nrIeFMR z8@SWiI+6TWCI4N|R}&{AM+Zggj#s9Qq>-5iI z0SCzN=MDoCJtM=v>IN3&{d1LD-oo9)TK%hqjft%junm4Db|yyNe-!xt-TI#<|58-r ze~Pj&asIXBU+(;~Brn6C5&UID|219zxC)#vei&Ycf6YBVOt`uwE(nMqh{RVRWp~iC zPRLa4!K4Qt)_jF2uEUH^W6%(>@*n{tu#z9O9 z;6#Fy;-tA5PE#7`vypR0Jl*M~OPQ(<=UJpt1x^QPU7HW8iWVS3hvo{U#sM+Br2V$|ySAJ@2ecmN zlg)dtPd92sU{5VlhtYV2O2Y`(Q(l)86G>1X`rE{iR4zoK^aUnTVvW+H74Az(di?p3 z%Df7)iqnOXu9m&S!hK_!V1KjVEf+}s;%N;z#&hD~X<1iD*j~$gSM)kghxrarO>}2# zY|As=$}MWs_;v21bKZND=>9dzrrQ z>ZM-F@m|-kn#=2D`CJ@UrJDIZ`cQB_&6ihW6s-_XM)>b#LAyz|H`(lMzhC;1tGE)s zGU(o#l5nY#LgL^hWS%38mY$?J=H5cM#Vp*EDn6-mS=4n!FRZDk&=(Cf(MyyGCy)Hi zKDOlqk4I1Rmlne8F@W2*LbHhxsb~t(p{cr8EmM}5o1c#;e?-=(!iX;@OrlS$A?*ue z5TxzBCw_S{`a3MJX$Z~XE8>3XXDa{SZ7 zCQ12Hg+y6t`0odFGOE==W3TT)b(Q0wW^9V=EHcytRF@ZV8vBvB)tN*TR%fvXG^dgY zjg4eD2H|mkYf=(~u?#{I$opto@r$1@fU~rg_BQ9eh*%)K)KxI2cN%`OR7xU)%@L2+ z?mF5V^u6ltfKeXaS0j zE?kv^{->>Vcg9+W82i?(&x7)wqttb(lj(}hws;!N2Kfu+T56U{B?@)a>Tr!j+dWmxVpTG&ig9%0pM%D1xn3yE&n?oX6K4T$SD#)E7|q(n9uCHvC=~K_E;}*eQjko(5btD(NVMK*+g5a zTba&kxgx)0w?V0)p;6~BZ`xR8PJ%(N9Sfk4&+pC#GR2wEI4e}VHMAfi45`t&cn-7M7#ox6tiVUTwSr0 zRL~-uGG{y;hEypMDTnO~gwCjBsTF+{o`v^V;bciVRT9Es%fSyV*9C|Zzu^@o#acrM zj%?qXmqU~7_qVwmU%sa+7J+#7N-YU7&(NAKAI2-AGiTGy@DbYsq{~Z8O zDnJc92qfgBcR!zB7FaHpMKgU<#0-8t@RlG7Ci7Z*b&@ERja$f99Q-ktr{T0(F|jdU z%yN^M=J4!Hsw*A>vtMYP#_Umrv4{wc3?&f;8)y%H?I6ObhZG>Hut?Xvug!3gXt_{w zK`Rk>K3rEI6x7$6gTrK9qFMC%ZLFjb=3;Vg&JZUTZ6TfX%e(q?i~l7xRDgZ4i^8zp zRNQ5N9|P}f1J{$IjI3i_sPC@W*~%5*dhFD0WMb9Hcn(8Pvb(FZ(0a9QuG!7*$$8G$ z?LBFEI}wFK_Q1g^6vXP{72^6p%P%hU2M1G7*J8MFO?8_|S&-uUJFF&^Z#uz>T z+xy$^PuT^Ycb3-?A2%_5Pw~Rwu68X~dQy@uFgh{U`{U(eUQ%d^)+x8Qx2gNT0xgH9 zGUtj^PE(g7P6}dR18cyk%^C0V%BG`qr)KkqGur9w6u|IXw%5v+5JGZG=gpu#Tuv5} z=`*>xPJcY#osKt4C69R#`0o9nFJY5lzH7^|Z5qpvPD*s5idWgsFjnC_HH_C@P$w1Y zyIV>d^VFFyu++TP{@v9Y2o3NameFa_tak4U(XsrorB+!iS(x~vrA7n^^FJn{|?%E(7xu#4M#_-5>a05>Xe@2hb8h zKF$;|3O3?cOYI9H3zo;@eKKRD=DFCeR>?4w9GOW-h5UOP>(QpA3g7k%HVokJtMcOA z7b+~2qC^!(b@(fj)zyP}Z+mC$1B zcy7>XV~3&~X~mCHsFaGwS7!6~{C9&1=l?GHsKNt>A*0Mq6OYDE>h5^a4Y$0yBPRvj zs5hG)D`VrjqSy_HD)Mp|APsjDm?FW|X!X2PacYJ@c@ZN_y=s~DJZQ~sJ>bt58rb&U zC*yKHs(Ib-e9*~=4|sbSSCZo=g2!REPbP(ufWgTo#c%R@xNs4gn$F~5_~X4e*#Suj zN4&NhHRPr39X~Sg9mEitdG>eHf456}PF=e+&2e$foEP9)q|j3xO0_l=PFYqw%%w;f zbZE8sJ%8_x*zkPF;=Ate_K@XIyKUvQzuZ)8bGG<}3%Z{BAdo@n_i>Xw*8Q5@jj_ga zl`w65+4c5CNMf_iWnb^(>7zuROv?9Tmw;q{4dd^eAUhIeLry^f+l?n`{8yumae1h7Ol2^oq z+c73OVQrSHldubOHVBM04u%eaIJVsC{&ty(L&}TAJGA8@N2;-+4OJ9jOu2^vui>i! zy^7rpu>7(lBj9t7#Z?{{^fg&F*G1aj@9XcJV@rloQj_T7vEGa0c$L$P49nF0ALQf` zgFYsOQ+1MxE><3`v3V`#u@8Yr!m&Aor0Qa-s#9;Tt-wt=I;!pFbc}`d-hlTvSZPO7 zSWqKe0#@=z(32OP0a}F>W&-b-W=&+DZ#QyZYz?>W}anB02Am?}Lg>XnzMw)u2FC=ESmJ42!cmt7q`e*+T_K zg>y{m$?HsBrs7pfF&l|eUyKm_h9R5|nT3%9TeAhSNod333RmRd2|Vkie=^m}KS%_B zOujwqsPac7n}fI|{p4&LfrdZBm*Qtu3aY~STa=507=UoTo|Z$3&*{4LH*n>juBgfm z92kUAP%XQmRJ!~pu=@`(9}p7cTT0C#MPPSb`wyG(1DBR}e0!*EocYfR7!u|5#>mJc z!(#H7{Y?b+&t5MJfE7xnwST73 zY_z=dt|nR5XMxq(FAq@C)U+s7E_KX3wS~Y0TjmDCV9=eYrEFcoF}&mWH>}iB2i3z` zu3h@0z^p*Z^*&_WR=3KUixVk6Dam8Cu?D4TV@zfL_Sl)r@7-H{E_K;`7LWxoic{aS zkzjCsrJlj-LR=A+x=gKHLb-}jM|LW0ouO}RVrn`xz-b!LO5t%#r`Ht-^v}$u%=Tjw zymUY~vE|0ZlK4AeaPiV)EHQ3jVGg1ERaiciJ7gaoC*rBn$f3Bp1n{z2{K4+{bDt(< zBt?lo;`Kl(k1LkK0s1k{+%}}K*!g&FZA;Qoav4T<=tjg~pPZV)8h5xH#l!cR<3q0C zXwgb_q=123%=f#GMA3HtHO6wIr_0HBKB52_FicHu-ts8?X4l_BnV_o5ENg~p(K@K2 z?qH~(?Lr^z*zSBm-@NJRRdDpc@2%BjyN>##GsB?Mek)(Ohuiym79egiJY@qxchWY( zVLStMylj>u{qw4jR`+_+WwvP7d|y%B!v|P_fvVaZ zdY-12RI1GVn=RygC7j9iF>7^sG^bLl>R?`*9$&k&+KZ^>S1|Q$V*W8U^62pJ?dG5| z<6!54k7vI><^$V+RZW3tBz65FmOSd`_?gGNNiT;Jv5n<+Remzh5Yr=-)p_V5^Aqft z%)~^sT65P1+q-YBcj`w(@~l@?jH%sb_DtGYnnT0(q0 zHA(0u`T1Id+k|eg*mw#&c?!$m9BDT-#Vn5CYyB1A)(V6)sQKP2gIa z3J=zdTg^iGvfxxE&mks9Lf7NB?(eWMNNbU8E*Z|p3!A@U7>(B^s=>)A7Fv}!jyLP8 z7pioop%a=eS5E9Xoyf;^5MOdSKfNHv@ppb6na%&cm&BnPNy-2>6n-5Vl~&_h>`158 z;3~}sF3ZsU4$0-XXJ0VoO{K#vljVEDg+_^&vb^m{!ySdiwsj}uyp>kpoot6bnNZVVV8qncakQPu?L6z@R^0LMORLW2 zCHZK4@crjgllQ(N8j?2h23h(igSU5pnJ>})Sn{;eWemTsIJ?d2(NxGj8R*SkE@W2X zGk3Rs>g8rLg`7sMFKN1#!8s9wmFY4)U#83CYQ359Si@+X$LQN`)L@OH4<7)y+N-Su=M^14_z-E#-)%<;@?Sb7@=dRMd}4-Zcjl)B5?xN!hC7n86B4^E=05`= z>i)zEU<_oV*)Qg0S}x7N!fK&}ih~BF#iL%;vNXO(dI;tE_>iE4(Ns;nsob}cP@VTC zD4WYFW1Ig&s(G5-dPeJ?Mf|2fkD3*v+<5Shd=_=LGAbM z>K8Y@lteRxrPyheSa;zEWOMzG-1xF&btukd8+9c^aI&|%);yuN(Cgj-H*LO%lb~9V z1i$AA29u8fpA@w5`kh`8$i1W5{1lyfloX^EO->?QW8Umh$yZwU(x&@Kq!xrPGly(I zD);-FrOaPRGK_&Ow5gt+!K;ncJqn2iqHAyCqYm!cT)A-opxUpb2(VTGF{J5Go z&0&&aB?oqE*j;Zn@SZJ z9)5K0a8_~;ReXiw%|C%C{;p0JOVmeM%W=m)x6b2qC^a%rzm>!ei>5INt6Tq<_OSHv zW_fp{JkjjS*hmpyGaOD~WQp~YW?CuZ&RWwkVY}<)ME`3)pNPibbq^h7rp^^0+07pWF4jqrS_PjJS0{yq164s- zp@iS^pirvRUiG3=woupw_-eq2FdorEx0Ncfa7hxnMb2?|1~?fPFU8E*s?uqrAt?`> zNaZ7ok7ghd-yn}lD&?`7V&%%0J~t4tbph+bc)#uTm=pc@rd%w;jURK!JU6mlBSd16 z`{s4=%C&rH0N}Ky6S{I+gO=u+Gt4rT5L?lr+LJPsuW7x%mQrkVPChvCAjKTx_Qgz`tdh52n z0_sAGfs%>$u<4Mgg+S-i{kW*Z&u>`G(U|36iwAW_>ky7&be~@C@hO{QTD5c^=c`F9 z9{XO$tI-s)z+j$8*w_}KIlP%5dIOoqlIdtB)0<-Hv^XTzm(F$CtCre!*W*?s6ovw7IhWzR2JEb*B1uvyKCC(#lhFMPi0dOtN+ar?Pn`E6X833M4JC2f16 z52u#ulsB=?aVg6GP@}lN0xl#sM7p|(-RvRpyA<}I)pSysnLVxJbl%)K|?TLjIb zaeEAreBKwvWi7HcuL{S%hG>br;AJY+#~X%|Su8qB6?*#(q}lGbke0df!zxV)%-u6< zAJ?Z6(E)R^Sg+@6&dL!9a)l24SgSPV4`iJPXcExMJf_A0^#ZT0 zFwmOhsEI%pP`#{lMt>_%W2`|vXRXgmW&Fj%OnJnf zieyeR$zNO>X?v~>cUv#8t8&VetBA8@p5>o!@pJa~ z&=OHU1OEKFlPh#Lo6jmHQ=*`gvtw#6bQAWGbrnYm^PQ}qplUDQI8nod*lM%+ywH#W}PgLomJCId(5&eRi;z9L=o^LCTypY7qf@N%B22+K8Bvy6&7|VTk>2e;7*B$xQsr%~sTj%Z=+BfvpVNt&T<%_6~t7 z8xDqtvvsnEjXS)-iV&2<;HW{yj1q74tr~}n64?|`C2$J$V$(eslb~*zF>6#Cad9~Rrjz}KINv4GE=vt%b$0No zW!Ft?=HktNx5q-AIHl3deuT}bLwC;GyTf0I9$=#UZKJ}1MrYcsOmuf43<);Cj{wa- zQN{FGnlC2SVsR~r+3sDsRH;0=;1qjzoX6!PacZA@O8BS)MsW4}XZVHtBj4VQbT+qi z6lQz7iV&olxGWbK>yA4;hR$J`O|Mh_8fnj?tFzVmI{T}Rk&XU%lNo;lS#t;7NmZw==3NJU2ySf~P5SZ+y$Od03{CvC3 zOfp?zNcP%KqhE08Z%emh07=7~Lx!~~gI-f2Z(E{#g% zjtk5riGsjujVznPFS%m7W$664-?mHTP}YnB&S+yYgKcmU4_T4o9{N5Y{~4D8Fmo8FfWAmTO|84?p*?R#iCvxtR<+*TPgYDuFnL(%faniPE zJjF@&H(_ALQCl3U1a2d+RZslQLWb!ta3E*pi(t^pQ;IJjm~^8;G(zxZt(Vk#fBSG@{+bFXtLe{;q`6y+xt~kP zB;;HyLR?SiP4G$c)b#v>_@B-`rBs+kX-0e0s)f)YNhik$cuhlRAhE(Lg~DKO3fV|A zhUmi(vt9+a*9vr9YYj*4W2biySaG?VXB*Ao@wtB0e+C$Wt4Ys%Hi-wPQrR39Oj^`y zq+o5(^F2q5^L;pctIfeo5TLbN`Qs=reSbIAkMxGf(^@V!^2nSJFcR@c>I0 zqs9&7f;2)Wf=(6*XYE5-98H-9ZigmIu0_FQTAicR0s{|}s6qYKr?+T`A*e?EHp-I= zSsh~)wa^n1ME=s7)`p++C_@4{flY07wg63xk3)7BV2qBgtPx_?kRRO^%Ts_3$_NnK z;$|=sg|L+WQFDtd`=}hh=BllO2VpsM~BI zbzEkbvZz^C@@x&0tJTji@6;!SfHY!qW~&1slIm}t<*D;8S4V3uR>o1$mt!YcU&coW zRjRZnH5gUZa+#9lA^}?`hDg*vZYbAMA-U)UG}+^A(XuX`x!(s1$_a^dyRy%ZmX^JQ z(76r<+u)WtS*(<>K>Cmm4g-Z_d znCSht`07rEF0D#*KlFQ|@wuk<0YRNPY)-nH9IDk-!k};GR28xz7Kkr259_r~&l2K!_uZs84YhD(F}+BgrvVi57XDE=wZTLsotoJkj!_~5O>+}#*gun zutK|`KiB=7%keSCXo{_5`;>?OVi4Ftx`OQv72eLpnH!s z=2GQcKiG*eB_Z5PM!)=_O^h$-=BUJsjZ_M|V%meBTIAzm4a z1j&9H8fjzFStqmtnnxRwO5+H$w96GbRHqyjNeJgWrASR>O+-=C`B%7TIDJpRC-EK`HaX!JbIJ#&>sp6j=dCwx6o>=?);`v|MQW7lxmAVlM)U@3yk~ zPWI;an)w*-f3jQrs!-ehIAW;6_q(~>e%{^iMEQsRrYZr^LvluL$n-&fNTrn2|KpI_ zZZ?9;XMeP15xJMCRp*YYq8gDey*bQ|Vs;r>LvSqR9g0hx8=*4Sr0#~15gC2yD~md0 z%2GnWUAf#?PJ-D0FDI*rv~O>7UhNATM3q3wm{1+(JBZSI0Mpo1tN6yRV5LH<*InLc zrM>z^il$;ae?06RuSpdZV(1BPcywZ%F{AImB=0?Zi2QL~tCjfCWHL;&_L;&Q3x_5q zlLfrWrhh3-f3xy?;BUn{7f9A2}ydVS#6wQ{$rAzU7 zWDaTEZxFG|@7UVTH87IyT=(g<5l)}3i;`tkK1)QC+tiGjFC+Vb2TFwG1Y)cVFBE>c zAjk>N?qI-39PJiQGn?Ua<11k}ugvfYuW>|agv3B;84r~3$DzUW1h?Y1x36ydmUel8 zb{~+`(}~iRKhb?cAKUK60Jx!5;-H2K)X&Sg5-?rB^8l;qvkn*k^bGF`*S~nGDs}>v z07f(_Hu+t?sEL_uD6(sQ5X3`-&WE>mWk)~&HIym+hk^1;N6UJ^?w!{Pp93V=O;XBR znMzqXVRhd80{P=zsnT$!R>6E)8us`;iAjd8`~#Gn5#UFw;_u z*}@>f+b;+*?di)6VnozxzK9fW0C+Q=G7kYLDrlC*4W^%g(N$O*qtkmGpaShrH~^^O z-fuV<^GjCiWeU!jf(?I)Dq;bk7<@uUFbCWqhGzS|$DNISw@<$|{1Rv$Ogb}b^u5qx zAN_*o2IM;My|eWtjHi@fSefx^NQ;3h0y1@wqtqYm+)KNEaVqM#;X^Rmm2ZifUllPq z7zu9glJ6?=WeO7eUTCe}Eak;RIbPt!{N$}-E6Ay)+YI(f~Wrv!-n8ra3nP?YmJw#qv{CpSmkP^bSwtOHQ{G!Ab$h;kLPX$_i|?`vmnmq-F2q1D z2orh36P;gnNIUVvQdc+XJ=``1D1NJ=_+u!1cSVhZe>D^ue~>DA{onmakEf7+(NNSi z+=BVY@M|1f&k06}2x{e@Q){4sh>b&>m|qg*?WO>qDJrzb;H(hom1cxPxnOThYuk8)3sriei$b){cx;1AJGOke1DjdF~Ekk7E}qZsvDWjxnGmbfzY#&+6y`{6IMK30j7 zcwJ*;KhDp|8|e$SSPHc#e!RbZ=M3e$6Iy}jwI7mudWB%YLz&5hd-@h!JB?kwVSMw< z94Ow9m8<@SFO6~PMb}8`uWx;QdE9=oPB0GBV1^~Y<7(}c5_YOsoUO@S>d$CB5gaAz zhZz0o8F8`JX$r#s{;+>dX{B}l^2@2aCR>w|k`(Owh(QaI6DTn`7=WOx@(>BXCs7ot zj)L&D4?d1SpwZbzpWgTY#!vfzlfb}-t!SxGs@S&9`U#nWvbVZzOL49NK0NFR z#(?TmFH}d5XYA?JNajM!>lEEJnI+;{-z&;E2(Otr9N~fXiux;H{G;547t5^@YW$}; zZvRe<8bwTh5QKP38bvz~^J_=Tk_o zB}Do--=eYhCNhSgicU?%@zFl9qDEkPldDNoax z{U{~MY)Tw5_yiXETCeIg_D#+$xx3|Jk5$;%PITZ3Hj0i}E`($N{bbv$CW53v8&KjQ z)XnhSg|QnIPayI&{F!f-uW#wcsg3SIu^;j;^i$7@_wb~tDJ-yM2(Y#-GT-zLdQHoy zf2FYgk@=&90oRX5?!gMBTAMjvG~)%Ik9z!Et^&ZwK55za{}l)e!TK_jVO648+F_ic z2Jc!@`fNCT;ncgY({0emBhEM-M>15Vck29fayq@y`jw!45gr;Y!c-=`G}Ok=qN>;3 zAhA-Ty^l#93S?dN6L@~^$hZI#8UmHbxYh6PNd!yysix*L(Q~Qr1LDUEx#ct`f<2+7ZKbg88@Y78#vV=cwPzkflS;@PSbYD3wq*RJ{u zi}N$F>09G*cIf%|A=)1rJQIxE5%JsiOh&Kjh_I#4TJn28#uiO~iH}X)=>x|Ra-19%hIRcIU@bE zXM0M%ep*q|!{dO*VU0r+cq%svW!7D9u%+lkxI;1Iaz5VZXG%gS@1cwA8_JtL+^8sF z8z&x|ge7iCrnFm8zcr!Yp8Gz*BjbTb<*v%lr%QLn ztuSxjz7IXQM(KfsL}3}?61Lz0b1+U+L%99>Uu>Uv(Tr_-{o$=*mT@ntjF5YAlkK*W zv{ux4OZi{=$Kc0dWk(|c>Mqyn+Q%f3e&#?*{e<2j4rPVe4~UK*Y_l<4#yO8Ggqef; zCwz_`M{xs6UvdcsBzqu?>@w%Eu*;33+U^44!pLBhH7ilVD`zDD!ngvy+B$?f*yHp< z3y}0rzbC)$Al6p>dbfjruDL<_2u);XC^Uw{}5~Yj>1w#I<~?Fr>G_MWo7V1U2~z= z%w0^DE?-{AhGnK7izw*+Jg&BGS3)fe)1>{Z^w74ww)ox=5mY1mloSm7*^ z{e%39of~)Iex}f&&VPODe>3`$Y;YF9rV<9rBulhJNg}c%_SL^}1*kYToYwmJ*EBRG zA=qNsvU7T@F`^})zhVahJB6K*pq<(XD{%FM4*$0v{HF<&TCm6MQic;>`n%hiU_Nz7{&j*O8bnJ~O0jyaofqeA};bT)c$+ZW)S0hsqKVWx&6 zh7*A|n6KcP*XHI2s-1UIaj3@h1F#OEtx!{0Ums5SMzU3Vl|n0&O&QmE@fLhOuMMlS z?u1%Jx5+`zEmi(({AlAb4HwW;2;ma>4F4doIs2j8Wf-n`O*+J>+KP&r%rTn^ed=Zy z>3#tBaP@{5WES%LTO4W!y4l!ev0FeG^~eZME=VN@d>)FJ@%*fH9`|NGGwdeLoHo9) z8YWf0fL@!IL5}KAwsDXbV(>9w5dwT(nf}USlXtZYt}e}~sLfqufK^Z=Reu3|IV23$ z{$-_I`-7!fKWC?J2*trR45QDpMotGVK#8@NGI%yE%VAEV(w@&6A^7e^Z_8_Q(3>!8 zb|;{Jqr<@0owxtGZVH%eT%R(8r=f$AN;_sLZn^YEHMXrS3T}i95JhwO#d>?7K>yya zro;dpfb|`?Gb%Q|{s}AHUBDohkW%-Mq@M!iD|``?ovwC6cI3YI8!u`TR9L|aO=D@z zD^ms%;%nB}S1nX($%O*-vO~nRm7Ev_9@`VHy}4Kf3tpW=>5?j@Y_%c0za)S7fva)_ z#%DbJs%Fuvb2<&3$!d`iY3M+o)I5FEy9j3Fr&EmtW=_^M-V`YAI|i}cMqqaxAV#}} zH3Ox_ELggot+=0xr8D<{V$9|*brthht?r}3YOJTAU(;rT{e4=i49<957M?$mTf(Eg zYfs2z8fHQtL_rc|Gg*E1>XQVU|v9J*~QAaQk*L2 z=?5d;Ac%IRPvJDtj4S-qRNHo!j(9O{kPB)ROeaVx>%fkB$q#%=k4QxmSXw@;6ew=- z@}G)wd~J8g?+&Y;${|$p7xL3@RVNs&6n)Q|WC%}CS~M_0wbfb*(?BH1UZSYD(ji^s zw<|R06xR$x0uM;^E$ps$dLh#N7@(P-!uccGC~N@5z-gX?H2vQS6~fP8?YAM#Ecekvgf80eYDs~PPP^oLkJOeAy)Lir-l1*EyXmv{VMlWJ zxLZRTbC#9;hSlNLaS5I>JuxwszlzIXbL+8Nk-?RKWuOUJjbUmFF-}Fb4a*!2I}en) zz?w!5UUNU}o)ggPhF+KYSZAnn&VPr{z{wx)3sJq)eOp+w403`DFI=;+6b)Oid!kOf z`ufv=))O>bU^=eNo=?|n=4c3vrQ3==S-F9UlOpJWZo+LTFk-Ajyk0;+IhA{G-0LUv zTCdqu$8p=T>XQGqTzSt`OULsNY+M-`HcMQvf}UrI;E`%$*41smkmPzsx$&=QwBb0W z00`k3Y7+PCU2K-whp;RXb#@_*wk2^Cm%emP&&-%4`nHWD*3nnlqHUBU6d?M?7`g(I zHf`iieAc?;>jI-2!*iHm9MoW$+)WrLi5n%IcISUR&qF8y4ns^SQD-h?3RFHVGlFgV zyo!(EPPqogyH5)C?1n$WUSS6DN8w2!fQ1~l_wCVfL4`S?+>W?)9d4i+LVrdpzaJvzZxv(iBxA)-xrYl*Ii`= zqXFP)9B76XaNSPy;j2aeE6qMCy2=J5r(Ll;noR*U93!o9yMkF88#eGCkf2L4?^4J~ z1KflC#iRlcNdtU&q>IOv=f6fHu}qE2-aooktQLN7+@E#)b=E?A;G=s+^Ti8HCq2nv zLT2+XVy^%fN&7Tii>Z()khTm8NsD6*=3AOsp4S=}-+a59mTZ&E+q5OX!9601&O@J#RhlBF2+#Dn9`G zpm8@^*+nuxr6P*xNZ#r{db(cG70!+UcXAG!EhS7-a(oe-(@Q#^VcH?R`<%J`PHtO14>(!lgHw%Jid zJ=M0U7dM>56=IAG$qI`SlW(xM$iH~?8{oBOh*-P z|BDa*E_gg=F(<1>=ytJo0gm|gf{-lqDRgYS`h#dU9q{f&kfd1#cl!d&$c(Ab?#X8I zxVS`Cz>6Yzv+uEov@I05cwx=hg`KT*c7DU`fGCwNN4F{PZoRHEeWOmv#CXX5*dxfC zF}_a89-zH`3^&5&(2sdRB*$FwE72b5BE;dSgw3L7+Rh(ldffJS>8$c))Q!gHAs$br zi#MT3LAA;}U8o`n`iwA7xM-3Hokor#;Grg)MaxCsnCAcn7Yu16wne0pr~py9UZYtw zok~1-3^Y0z}#F#WnG z(pgl7*E>dhP8KT}+>SkhX)7@PDL50Yx-p5|>dxN+$W^~jLHBT_l=zALmjvzW98{%B z?zUNiz>nAHhyCH{SK+ZFy6nSiae{7=pH0@z={F6HRw-Fi*r-CIi53Yacj;*KKI*!u zL(MU1gmumMO+4U2FaIr#8{~EV0L;}GB#hW~ zAql=GOmC$yTlRALZt%@@c+f02ZF;$meJA)(VP=s#lpr_-Y8yVE;Pd8uOw!{7)}v5F zj|YZ05ley?xCCAa2!Gmcwwl*PLIUb0$FKJzOfCX7YRlpdwbi?0aD3E`IN#f|-=qq< zC>HSm(dSym>CsNXqfpnrw{O`8tr!CQ@3(xbIbJL<@XZJWBv4UE@fC}W-q#ot0kGH2 z({K3&MY{NOJB4b#hxg)R20Fe+0ThM4ou99lc&bOXe7ra-uY&&}!<%hv>3Z=wn(=-5 z_P~xRl(W_OJiY^Z=2ggcF=_E+Joi#(bjWVdwdr&CiC*S6pr_a8dhMs5bFur@*}Rqi z_&8@)w|+G3t7{gD^ZReF>EkYCvQ!mx292E4%S7J8ylj_i?F9mvbk>x(=IDfc?je>2 z-O-s(4}8==*==I&QhXDnugB*G%9I=~8hP6}X1Lx0ruJVII}W>Ela+9f^B=-$p5i9n zA`B5@suH>{JKcPSD-F)@wrR6YIFD&VGouFbOkDLE5$uFt^ zm`xHi$h`gH32sCXs*l2f2^ZOp3VUJVyP}%fpb+C_J{wf4AFs_$U75pLn+eZqhf4zN zS1nu@>Tr{xJ}L!19=DSNR;Oi}`T>-cYm69u!7iXO=!%}gC+kJ<>Y1q`C$NESi*u_C z03NCabXvIiq+0Z2Ka!;SZS_j5v~GR7ecrn_#;<))@Tq~B+DTm4Ve<_A0Ye#8)nyQH z(*1EYWg%e-F29Qo@Av)Trz+vPx2;Mi#N);KY-_cm#XP%1sYBUKlNy-RCMqQ)q0Hjy zV!vPA=%ZIwCge8)nh+v7+-}ouY35)Y78?spfSXLNSR#Dc**Cy4U>A2doUy11B5gR} zVCWUwiq33x#}^7^<~_77sdw^C$+>!Gtyv0PvRu`sAdOkT;H2yE`lD{9g@1B{lk5h4 zA~~6E{o7%*j!6nN2sj>ZUSnM0z#XlOSUHOwK$DC3e1}i!b$^yTsm0#H z%{i%y7H_>?%hrc`Ae{GZ&|#c0HN$oo@6V0}it|F}XF9rsl7f&HVx#U6St-z~U zx6bX-cD2goWTrME5{pe2fqjWD>)o#D-Oxs=_a0mVX9svBxD5S3d6be#EPblVI zgQ0OR|F=v~Sw2SJeyRg2zU&86R$Dnpbsmg=;L^8GDkTd*J)A~~@K**>qPG#PA<1)1 z7nKoKH9AQ}pawb^#(3-FHyv6TYa&okm*fL^Kh}0vUT9YxV9Wm|gk}|8f@C}OnuhwT zqylCDsVqY&7cn>|qf5M{PBB|ZtE}<&q=?u^E(v6CCo5TD;wc3K2mP)IB&};|5T-2)yAU0g&qoR(Md1QYuJc8H$#x>)>WQcl+!5)qqxu}l?X!_X&p83B*$ zXv}xFmH>uf3`2STODJk&EcT*R8T+YTMzZxVf=;5)+%l6xG_{EN*uwN(p}SX>XQNuP zm^oe5lnYsi>Y2OAYfp>$Rz)E*)Pba%39YfI$=JG|&mH>7hPW@-YX>oCuw^$k>*F+`!&!zIE1GO$r zH)*;gYPZPDorbS&=UY_sWHY|31&Zbhemr4SiZ_ltO&iecbMTa$D|l$IK5| zs}+e(=6rNMUK7!muTY^$wHbrL=Cv=`GW%h@l4>-1eIz2+T6>?xY#xYehg+@LuARnV zRbcQYcKzF}tK4T{8(LC-*I;%gSH}!**hGh5df_F5&uxhbNP}BaSHC@pE+0lEG4ZRW z#oi=IfcLY|+SSO`cCqN%%{~PseJx^c(AV`KKl!6xqnDW~wTi8ulin;mSF+i{D&smm zMAYnLtiYz)YROG!dN~dI?6H!XE5|DeSdgxi&_`m>Xp?^(zXztszYfbrn{vRx9gqq~ zjU~~H3oY(`XgA&>QU$RnbbtS)T<)r)Mz)4Xf@#X|@NL{=FACH1XM?KgrvcA^rTSuV z0$)kyx%s>ID3h0a;4!N7_h;uhamU?-+L_k<@h~@ITZB2L)d~w(H1tfTwL>YDhzzdh zfqVgH^*FagW-WtzqJ^s^4TwQ1^^~LctK}a?xZe#Xd^BQeqsxkKm8wDVFSA;5dB<`>exf8++)IY=+#Q!}oVfi=w+&y!fuuARy8K7T5$ zMAywy|NqE3>!>!uZS4akg(3w?ai_SK;!Y`0ptuKzQrtCYp=i|a0AabE{k2PtxZWeaXel_tT zs`c7aT&6O^+hwhAfO^%ySh?-VNU_WKheHO1v4a105T@1Fg1wdollOm~dK>Fm zlWWY@*_x&6lW|Z@Ug5K|&+%xXTd%isbJ~VV&&mYK&X%YrZa3p2O~TNhB7-GO^b)am zMhrMq=~iwHIplU)4H~KG9XsrOks^F=uV^&g%5*^q8@E)zU(`vw%AQ_8UBwI~tHG%y zjQ|QElr#-Q{I`_~P5%B>LQA!7iE2e!%9+|y7Hh<>0JMXbo@EY4{e$9o0aX=W<{^0~ zE-dHPs;wGi;;2Z+3(Y;{&nMC+DE?S1QdK+RLW9(mfDS`f%Nv9Uzok0N@H7t+@@TR?sQo--N_LeGw#{~Bmwvm zT@b1OhKa^u{8p3Y2C@|#Xxu6j;rYF@+$ef1VK-U`n2o&8V=nu+u~<%fC39+AJR575 zLv%|xwyJ`%&ZOOK0wT`^RaaxS13&)s6bWgRMurlUDuiAG2m_L#k2 z?tv(ewBxGZAMO46>8Vbi=XG9PsHeVHY;XVgoBKr2%0^L-9y()@<#ZYC#l8DsvGNfk zP#7j`fBMc*wqKfPH8GXjCjY{)5V#~Cu>+nOzpv=N!?E)r74TBpy2A3#Fvr5`8C(}! zYnK%LW9xYHhpPU_VkeHV=2AGXrJ~g6lrl8q{=wUX481m(;ALUedtAM76^|VEnWLQ3 zuO0tc(uH?#{HVnc5??kAXcdkmIhBZKV02wVXx)b!=XO@g4hG#oE%)kPceiQx^Y+k+<8R_m=&ar45JHea(>o5y3Sv&s^-rt;WDKb7EV z%M&fOQKGym-%B5=W6nM3XXJ@TjjI3^IW;@(Qp@P+gI@-2zSSuFY;*_U>lUo1%N@%WU9PHKW1~x%*eTVsrSs8y#KTD4{-JlrtF^+>N~k>^eqJ(&dM z-)OmGf*zs#O=FxKoL+GI6|d91i=jWQiN=f+cX>X-#N`-0$)nJDrCxd>{{r=!-TgHg z?pV1Ye|38l@p}a#uX3{7_ZMFZR!XeiV0=ZET6XakGeqc`G1b3!efyH$AWG|TyYkjV zIdYpL+~_7;C0m!sg(^6!sI9`vWY!cLk`31qHb~#N+K1~8|CnFEGW5TQ(kU>{5nX7^ zO5wH?%pQV6E$FtsRs9u>E@gld%VM<>vDsKO8b!?O-+c};^pa>*Q%(0t<9HH*rTPSG zLA5Eg2qKxM@ioPtQsl7Vihc_F(h4Vx-&5-%Fhw{pB8op^Pb?wHU>LfF>Y{9g1xNS5 zjzsyou&oH<$~6e08<+k_?|szLx8KeLcd61;HhjPdG^&PcQtPE2V$p&e=N`389Sqhh zNiDFT)JwxhfOzh;A-5Sx0=5D|t6qawxnGy3KhCS%waG(W$41pAsA)9Pn;>u@s`%$0 zA5py5R0B;pR^1Mk;zDAMVfzlGdTiq?%MG@!g+!1H*+d0!fQfAf$S>wpvFyF>vKkI$ z${md4sABZ~o5s#m71g`dW~L$g=e2FoH%V1KX>E6R=!ewDFA^IHL|$~pt+(=;iGF3H z?BvfudoS@4OH*8pJ#lQD+4seq`Q7(=CkeI}6jUr4Ql2ipK}n*%AQ+}gZ1aNIv{{$q zm@tiP=}mvRR4?k{(f!39h& z!lxjw72$sXNANhg_%C*-X8M8X4$5t(vP#d|PN7Fp)qB!yPl%~ie^bV%jI--<4a>d| zB`f$w*mlj33_$CFB6GO{IVFK=B?-4>@hL~aLtJSFzanOJ#RC6-)n^bTvI3|klmlOL zFd5p@$eF*9(8}%%FeqTx*ESn#a^e^VRqv5j7~7u(d`EgdZF|7M%1W@5%)#lfS^kzR zuss~oz_29Wbky1S;P>J_{l1ViA)0x~I|~qcecC8TAdtD7SP|k?Ozdd>S!0giM&|JO zk!UvW6Em+cuSl=A70Troqp^d7?&-#;lM?XfwDoT4s&ixMoSFp6oIOU z%aZqt8P-0^$9^p5cvRXeFp>AQ*q5+zUywQx2?W_-WVCKn z%Op*}rQ5=|C!|+$z>}iA+*aJNPMnbe!z6$v4rP1m;THY;L9QdgxxBGZ_z+kCx=651 z%P~dUq-Od&7-^EUG`pncgjAVeS&caTR*o`K%cE}MUaYsh>+nT3z-L{j-kQ~%$zwRO zs;$dI(zmko0zrI{w}v zM_Lu($Nj+jES;c;gfI#AmIZ#*LhsEb1s2jLoQ3LdpKz_lsmkfA@&9y*+K%WcED)!& zb#xSdx!0Y~vK~z+XN#TE(}5P_v!z^Xb>YM!*=)nzK2ls6&C*8p=Pu#1qEEm-T58*T z7$$@f96XbM`VTRO>);Ya#&@kH6_484Chx7I{v4y~49hr;>m{A7gJW#+FZ=&M2^*HOhh9E!q{4D6jWW ze;8F%=r)fWvyXh3bG|OOv6Km%CGbxq6L_xf{QjDhZ)1+Py?;2&)jO7MRQD*vspY!C zX0_|MHP|Hry>xnucAbyTU5F);Y}^6;H+UPTTEypkWL=UCcNobEvnaB~)#Kq8#eS3A zv{P$3Is?mx6dv1xldcx2^BZ=vv9wut3}1&iq_d@I4G41pZAPJbi!FdrBfaXQP>y>i zm$YD-ulaGyY>BnQ(yOZO!?$y%U7i=hYkb!SZOk9b1ca&$&at`>=z_3pm)w0?v`rXh z)vcmDTu7Q6NSr4nJ@$~QU3p6UgEa*V?Yi?R@39innjE$kG39<*+@Lg>o^o5oi_ zA66~)UXB04DpC2eEj5}}|0Y3xSACK8vv4bHN{by&7c@ik@c=oD+_=cySQK3);;??l z&yzeN&3I%&Gy@*%{*a<Gn7-m{b5b4Od=0xGr2G@DQbg}i;;SiZ!OgzJkNysG^o=8n* zjg$)8WAuJ=l-VQi3>mY@c5Bq*=aj=GM7>dnx2E4p)c!5boT!nfJ9S!<-a>od#X*H0 z!;`h^y$ZbWqPA#anpbkRCjJ@wv^lC7M+&goqg{&r6ZcAn>zlvJw*oi`CnUuCzirnH zlc(7v}EzvGM&Ty@_}o$s(T|daY9k_`SbODm^sKhG{`XT{B*E+Q-#hd zdP3!zI6AF=cFxkfSS&Y^z*e8s9S7^~Hotx1aK)YJZ$fVCh|1$59(BVPMOXQlln>lm zDV5EaWqXz4*jQ9)b1LN@%Xo)GlqcMrfV}n*2~(?#jq*8WkDL0(?aj&fsroPg^`#rN zc&J>`Jx)Yy2Y#u-6VS#qrcZ`ij~*LhV$c5B80sR-FDX?HBQA>O1wC4Ulj<6Q=BQU~sc2L7 zm>;bO=Y=`s9WYUHUp7i)bf4dGRY&4oX28uOA(W>as$SSGV_jvvj|2g(tRqSRfDCP< zAKRXaLfaJ=e))1-eIy^M?av=&tlubd^vD**yL$VX5`1|d#s40MQuN6?1Fn?|!gb2r zn7-h07qsa;#$UQn$KL-&WjRXT$(!eR`Kp+M z@3!0IDyjot2!EFEbpp|2IybU^D0)}hCB_%7p=|fRA;q5P>YX(!J*I=zLMkOPK{aZS zfD@m@HixH9&tzhiJdy^OuJmZ?ZzjitZjUQr6zk!>7))5>M-5 zmBed}3W=jelv&oX)TI zMxa-yQT23ah)2$bH^(t)k9=hcp;dqQTBLe!5&DS^YbK}Rb!8XusIw>um-)`!T{=wP z?Sv^bz6+?wl&|(BO-03t?i;)U=dJI(E!h}pL?%0eHK)B|{;~S77qkLB(?xJ{X+_h- zCXI%5c7ewPxHZ;q1p==GO;H%<_+IPxzd;Zv$A6LGTAKAbOi=OY;_^9|c)$~`S5D!v zz^V2CmTl91esKrUiiK}zKRC8jjJ-mA$x!i|@CQR`-5ft$b1MW}5!@8C6_vI>z(c8- zkxe|)?a+rCf-{>Rk6RDFaeshLwSC$jYWZ2u{?Sp<>RIC=|k92B6d> z^1izb770Vcb({kz^m@(}=Zu?$OLO?yn=mrn{E0jI5UNNaM7Q*AYnE|RU#DG{AMdkW z#0nZBHIhJCfiQgUcgr=|ua-{Fa6`%P67ui{zg;Lw;^;!2xzT>Ta_^$ORP03h^5OH0 zXjfa;>EOm&yY=pFJlZ5{mn%NDc}yE8bxX7@vQx4EfnLuOIU0snbE0>i3*-t*{#$Ro zGe32JT)D+%sN;@W{;Pv17Al5dFv0O1QX~qcB-5Zm3P8_$!L+ggXw+ZzH~}PHBwch| z?@^@xrY2TPIi@wNDtD)Zb5?fqlTbWBi zM6XQX*2-M#W9fwvhsV7 zEfYF&1!UFWlp?yS`F39|J*!QRqYj@(yGZ`vbx)RdY>v6X`V&fh#c1OzPeO&8?tar@ zP0Q-j+4XHOmyv*1rki~EOaE2S~e z>pvr(cENH;`zK9Nd^6PuRF!O8aDz+JfZSGsjl6%Asa=CTzl|5j#ghlic6&d=wcGTA z+i(22_XmDSoP;nF5;k*OJ(Z;FAS=Um%46*5_d@w}IMhP%5VMV*;j%2g>=zpEwKB8t zuwGzz9Q`_NeMiwWV)Dp`Puu(I8teF|;(g-l5)$En3~ZMlpx-xV72zv^MOZ6RZz{hn zp3^EQeM}>tE9OcM%Lp;+d)9MXfoy4xBn7&x0E)Fsjm-7!Z^eiX!(sFk-b?S}Al@IQ z@kli2r-F_AIOuVzZF_$Dpu>l@<%@409)W=+CXXz7aB06MHdDYKjp+ zCf*m~?$SL<_3kKv-me8Z0eUHtuMK-38QmL9Rz3T ztjG-jtXvKRw*#Lkf0L=-qRM?n)`tT+l}fA66wDnNHM`nzT9I2)#_uOD-X%Ysl}D`g z;BNMUx4=K@EPt7F1<0ul?efPy7X50MHr+dsfM*azifs@PgL!|_o@@K-P=68VPAi+h zI{Pv3cFcz8|M27dn1d0zR6)tW`n?znJ~w(kPIfamIKv?vXzbmI@TrHK7%ts(`7tSv zdMQ7G@>jcAE=(AXT_H1+sI#L#kXi!GN;J3!JGp&SIyxM(51g?5f#ZKqUesLBs;Q^h zMM#g2)b2A$w~NZH3?pe`Oct@qzE59|x;_?YA^4UwZaS1Vn6N@fZ(%xYj&LzGMy6!~ zMzO(c|N6TXYwv1eqKjBlqMXc2C~W@{Zog-aAgOdXk#G9#J^ev}e~;H2VY@8;_Z6xN zp+c8)b$e?fziEu&ncs4>R>1Xg)rvc*Za;zGlC2h+_>E|=vch8|g(!J7-$yIw?sTlC z1#I)&&2B)KVhWIg%Vuh-FSwH%%R9_M6hi~PM?&i8cK7G&#{T5A`eEzCrK#8a$uSP* zr3<1T0JIfhQX$R}I8hPED7(%Ev?6N&?IuljZRu}wq5zZIDYEgnCTXha5z9E5<7(a0QCYELQr#yP%6IKCw{~T_B-VD4dTqeXUjM}A+oboK6U3)#z*QtS+#X!3s+IMN+R$= zPM`VZksB!Nu|rk^x{!h}p^Fo3Gyg651k8DBM&Jf`3K4!r9t~{k1T>PH zJv+4j>fOW6J1uJOvSvIDHsa|^lp$)`wq+wVA)nyUEaR;dbcSv0%R#-@NyG%4< zAOtE={P*JijF`A@_v&BN@rE#UA`@hHZtuM*0ZMwCfbRYPFFqXqFZ5Il-6-_B+o}T#yN^^d1WDViAW2f z=$3>0`uvIrwI>&2k6~Kd3yJDFtU^lI<~eg8kLHEwH{bl?PYPN1A$914g5+P>{=}kq z{&c6?Pu$;x72~!Xc&`$Gj(VZ(>p+AOK_a|%oQRrgkH{ltk|xH$#-X?{?O}mIV7#OB z@~pAJdK9OiY7V9hHCd6BtXzkagl2ARf289Pva#bRNNgO3-Z)99eLuE#E458Mtx~h?ohSYK){v`UL)ZSXV+EPQFF@@?02PrF27y6_W76~HxVMPS<(Z|( zX@4q()*YTRyg(h=5PYmthC9;e#?>AvSLzMhc#LYkGMOzgJ<)A*!)Al4ZO}b4dhc4Y zJl*+SP~fk#bHQ)eC&^j8n27iP$5t?i+F4~$87_l_Xnc%KvqH8}6M!(bhQhNH>;xIL zAH-)#D+R9ev!8JwyLau8ek%JpXo<(EMWl`VB%DngI2|Vrs6`|8xnLlu3^;XT?jd`5 zeBt}RElO4!muRj}XXx1VRrC^U1P$PK1P3g2R1hjxHnW z&bIVo@k8(Lqqjpv`;{1h?cOhkfTq-EZ=k0HL9vRsr3x#liH3wtaQXg@895UEc^C5L z`m_ulHtAHN^~1F1xzA$PPo8M3Mj{UC&|<_4C&yJ~^%AYwD|*o6>wG&0%xyi_0HbjG zZ+|+CP8v99ZhWEX^XI5oa~5960c1_yf5I&}10qbkN+rtG#kvUvazK!M!fRmXU*iKl z=IZRYCxPig4_{A97cOvAN1ZU}JMBJG0MrPCgAu8b$ePi{4%&PB9tWQAu?wu7OgVg5 zF&at=o`i<-OIRZ&Wg`0ygwoYPZoy+rwE0-S%7U241(xzsH+< z-fQ1P6r2$dYmre0^^EYV>W!cnqjw>^+ZTYod}=wcV$gtxq|1mFaF=YL>p2!KrltdO zNw8tdEnK<%&3Y;-V=|#!LwnNcdvllX!U`HQ0o{gUL~Z~=VWj0X^+QoMQcox67P1z4 zJpV$44GO^#DKqjE9=!4K#5m?a8U%n+vK3)_y!+Doh?hXHHmbj%g|Yl@f4Hh%s6|nR zLf%{bv*Z^>e_zE+e#sw%h3NQ%@X+*-v?VwqgiMP{`XeAZqkf^kU(D0npHn^9Qm6Pu zMF$+tv{BO;ccu1IQtj0yYsJOkJi39IJrS3_o}V9gK>a*@rlRwDj|eswE=7<#Zdp{g zm2L{iO?jt}_*>CQ@kn}QfxdAFeQe?lI!Auu!4huWYt&L)7u22{D@cZI+YM(3sOwq5 zbYTxw)^V?}gIs9qJXAQe8Kt^|az!@bO+CuI#3l2#VF7Rr8^Rd8HGd$7#~H5B-1Dld zh+v#qj%%G)Mr({_`n3A@dzYMyGC_`dZ8IE=8}Q7B(OP!>f%4~F6ePFpF)O${e-G#T zdwqeTKQ^ssIBkKk;}IK?3&vX6e{_-Fvn3fQy)%9I$dQ9$@jwxBR&}#%=g2WDj1+FC zPA57pkoo0~()g7h-s^G950EcmLfcJ9moIh^ja_jl2AHuY^ncU#e$d_hsh+l5BbZH5 zyq@5?&2gk{)>BZga0@`x9wn|%Q;IV~gx7*;L@;fs?hh`AoUjYdJy<_XlH+L54`D7_ zRX2!lpue6#bm{2VNB84?+aN-1{WVHTtJ|sH?C_0SL}ccyRia#QWO{nc3#foon6pv} z6H0(E?0`&9;MtEljKWhB3KF&Up*f^j61Oha@^mLu*a>U2qavhxy={p{=&@A(Q`&4i z1NW_ITNcflAS!4}7)I-n!Lm<2CZa!KmfmafJ2%>iB_HL9ohNb%ZZ8}0`ET{Y$^hz- z%5NZ)2aeIMz<+I{UK;bgCbm6^&`3yX9fXJD*j~KabdFuc)juOKK-&p3jZ6N1%lCx2O>C2tR?BM)}c8#RAI&`CO0%VnI z7`d+$8^epE*?9x|Tb4c<$G?5Pglvl zElaLV5Q>9u*QPhva^qQ@U})->Mbn{{{>dbKvOQ+b()b{fSanSmE^bc%W}_=1 z0V!jDza@9(#!FyNHY1ypT&d_QQG_Sq)pNJ*o}V~fa^#IXS?^hpsO{8Ag2dabst>~@ z?S1aK^l!T^F7;$UYp|=I^P*2JqI6-ZM%U$^PALaPV7CGg*k_XMPu`f>A$99U=(pL|N5VulL{E&T^LDgWTO_$hdM8G(**N53EL*;^+@J@(;(tA8nFhM z^ZBn!bU}Ut{-Jw1?p-Ik3q1W)+VP*?20wE&1@c6~*7`pn$A13Qox~qIb#r@BzfWIP z?P<(3VObEL4*UlJxk40qrFQjdp2h0_4mH3gLDW@zjCiT-yOAMnLLcIkfRMU76d&bO z@2+rBrI4kJRI88m$&<;-^XCuLi7zAZ%rYxclr@s02(FJ6yZQ&$9AiIAeGNHqb#G)< z92$aMS9s1{Z*LW!CIMvNnB$hYli3`Q)oq{Rvv!LM_yAbyk#RRys%nsN+cmz^-byj% zwC3}_<4ZcPessorr#AW6*Czb$Z~qchb$_73xz$obrJW|Dcj^__CQ=cJW9cn=b20zs z5ptFY3;j!#+K;^sHY@bHIWy41`04i;H1Pe2x3w+FGLz3i7oJePgQo~i5T6?`B<`0! zt>R)>B1<&fMD%Iw>X=(82!ot041YY4$U{+)Y{@M_CpgNrI~ko|?B8t3Uq?sQMEu4h zreFH&p&Em5`EAUnF?#cD#&mxre_`HSz}BF|6SFZ_fKZX7l?MBoESMD<-o+>yjz zdQaEODVizUUmp=AbK2CD>DN-nlsO-8f$oYSJ3E8h=XW~nl4EeV5qxiIxoDE-b&FO} zId7}Q8rzYz&i-jAEG~F_AtEFXM?N<53>E6jfpT_TfSLelf z;JsMwlsXLiC*W}p?~Tvpnc&hh32wr2orM$8hx6C;O4MfpHshB>s=ckY=8HM?E3VLE zf6Cq6`DaS$NK#i*9-Ap$xH9e6=UXqMw8z87=gl#=b4h#|m#5J`KHGP>{(w@@%_cE? zn&@O|{qe|Pz&z$Q|oV_+(|d z*L{HZL20f&E%@u5AY!DdOWW9>)XNo%0TN3GA4G>Z);R-Zn1 z-@cQ6&A9jB_VBL^)372_&c9gxvDFPq3&)%%90P5GBlXh0AO6YyQDXpLRhnm8&HosP z#`Mra^LE=y>shT*L-luw5I@i?kC0v2XRoAqbDH&WqH8BSX%RtJPT? z+qCXOwWRBS(elr`m*^(t;SE-^hr7R~XJ8A}xiwbfuWihv=|A^u?XO}zk;=sGqnrMT z(N`&QEnk`{GMb(^447>$18&vZE-LWYt?tZqPx$As1;vxZ*J=3}dx!j)Rh>&_5jWRW zYFRpFGzYW(&+EfJm$Eaq=#{K(+**U{e-i%fBi_OBob6MkW}>Dy8VNs8V8akgBZvJ7 z#A4;#f)(CPDl-?qAP;p@g$mWMU&TX0qM6Ka#5gLY{fkA_@h zrsKRurS^e>iwYtDcw*oqJP4n-L2Wl*kPCG4I;}?VKhkd?4a< z`e8iX6LOuN@#I!>oM%I#^l9XkyHQz;0x7t=*W{H51@J=d~iJ*dkUlO~vKD17KdL&H9BT>wSk2m_LQrZj+$c1dQog zoZ~yD*%e=9+pzs=SW>tIrQ08CoxL6o`(=HEj;8W9W8sfDz>5bCZYy^#^F_)g&ptC} zT(&E{-j?Nq2Gv6j^%a`5O-M?ZtRcz?Vt-+kx~;Bctdtkor-Qhha}_q8wYJt>d2Z!y zL-%u2o?-V($FLT3PXpaI3`Bf}A*WaG*FCCe3c>f+P5e$~32pfq9I_N_OlWs;UeS9p zW`e;pwUA^B-}(nq7l00LbE;j_G~8#?ha#&+B``2H{R1Bv*q&1aQCaw+c6)iU*sop= z90l`2Y|#C^zmAu-1h-$9%r~pfm-)q1Jz|pZ<_WJ~g6P6T_VO=lu5=gcty(*LUS5*y z%-mbX0tlv_$GE9mUiZRq%FFvX~w({Y=|#Ext07+lQ$ z6&6}7g030fI#gf#{e*(zzWfw0lPy8Neo?M*yo5iYw;!aXq!MM*|a9i ze%_@3AU0dNU+Nb_ztOYYErZ=H=T?k@Ty2;UO1+|*z5LVBF}=n1Q(;0IFyVgx?#v3{ zNhVZa`hC6ibdYJ@horyGl8nsSX1`6>ipisRr&N zJlnV5vOG>zSON6#Fzk$Bo5j-^e}oI$A4gHrkp^X%HGM6?NCvR+E4d!dND|&fm)d*( zipBU+5r@juzE>YKn8IQWq76_fzat>QSLrvvk=@&GnS!;FoohH^2#Cnoe-A^HS=p8F zt2I|IrcVz_wzQ7da$7%>H+ZGF8q{TBj<+X)67@%d3_f+E6H7iHZE+`WvrH{Ja|KQ4 z)(NwJrp1)Rpt^KO2eUF4f6o#QWzc`&2C;#)a1clddy=UTl&Y!O1(2_Lwg`K=wNA83 zWX_l94O`q~|H-9_kK?jdtt}Y!?z_R9Upuj_{(1eoPdpgOs`(kZ{@C`_y^2lmXJoFS zoS#8s1Av%VheImfP4u=)v{lfyxgRp^n{>&1oh?w zEr@J7+OUL6?WX|wRna82lE9h|kD{MP|IvEKx=o|(ZVk7PnxASo*6+IuY6R!N0GAi@$bA5wSYHFTQgyvrt4- zdu2#BzCm`g`dc~h$wd(=pLOA|*$rw}(ZHKOP_euXn1dR59{$R^s86`sW3(#KC@-O? zkiR%6LgLM1KnJwWgqgxl$b1N!p5}CYUVMdQ=0scAM!}(bajc5* z{24X6I>ZW<68B^6(rV{bP9jcy9W(cat4rKZ>eFAtK}{fQtpS9KG$|;F*liY#JdF#N6ZWG z1{}YBGzoroJTCk}@C@04&n{;{%pqh5J zwMgQm1^DCTO{TFH7b~8&iy+j{StRl3QK0pDH`vw#obj7Z@HvQ_4>&qX{F!k34R$Tn zN;f@AiiIjtynb|yTlxJYkD5#8JF!H6a)F5tUO|%XmsXD6Ke|=bx!B?w< zG-z*JB>{TkG`wn7SQ}5tt};|Qh4~}if4F*>@-~39AiayF*F7d+ELAJmWhA1q!n5Bpl6sZR^?)s2>Zsm3U*sREm{5p1n{iH1VL2t zjX&d-8MEi*^RSCMT23`-7l&?h!+Pj>)l-R<;?pSD9|w+$ntK{Y+MiN%R<{+Os6g`~Nx!^=N{;5d5Q`6P&c4MEtcuXN$}=$a+pHx+ypcoGygKiD*JnQW4SQd5 zR$xu19*<*M{objnr9NIq^rNisI#*k~zhdID0BbplA~X6D<1?`=vrdLuc6pqx>)rU; z^R4f54~1%6VB6apC9G`t)}r|eIxlb)S!@%(zA2}q}dWF^05B`DjvVc zhwK$e$~u&KUP#U?SsTr_jxKi^826dnqx9yk!~!w1Z>~qYr*PHlk?f?g;~6w3q`v1q zTvy>_?r-hI`9ILF z_xaF2+NmF;a0}RL$dv_xXG|o-8!C9hv;4z9ta}cNHZR0CJIdus^EUYJPH88#-|4#_8jHt0n~n%TlYITYe-Yf{0zmM-eEZ zurv`E`~Z`NTVx*|4S%JZjFv&7{1u>Oq-!;v;;6bz+qGfAQlt}h_Ja-q^h33K?4ZNs z{s$embx@|Bs3f>xXzOi5&%1xF7SuFt#79=usR?CP>kz`x$1Jp+nVHo+#L2IF6bsn${XZd}_#E@h z2QuM}vRm03`of3BV(vO5TIrv`p_8spH~V(pYcrfW!pt+&x)KWv$4m9KUk6CRYjDhd zCBm$|nm_`5##8JXTXKLNXr_%qHU+L2NM+uNmd6mbxtpeqkC-kH-EOa=>O*V5Cp#VG zT`|I2SbdlfF#25W+#g#-ju!e!nH{y`$CiP5Ny5q3il3vjGEROpo)#kb>ejA@6MaAr zgVT!UJ383Tv~L5s$YPY)&`iIc1QeVF`ozWCH+Ky1$%t|Wsm#@_!xaa2XzN!b^DS`h z;_ciCaf_Va4-Pd&UglQ3Octk-Kj8i#g=wL8C3zHv7lTEdu9*NOV1wmxl!mad+As1s z_53m<5>IQ}P&|Bd)e=j*5oOR6&E=AmofUtDSo(Qx_Wav{DVm)WL;Z0Q9&_vXI~VVa zRP8ExVIF_emh(xTf~CC0To$FNNiPX27yv(dAb~#9;l6&6X?6BonC6&0weLO2lC0AN zoIyN>VQ|^id2h{-liMG;Fd?n8I;~;rS=Kn}lR6A}1l6ucU@h1i&b3PP;7h_GC#PJz zGM`g)@_<*C+QGW__LD-5Lwm`}>@U@|peap`Q!Zy&p=GT_Cx3=CERMu^e?3AH%`FHm>-W!Lwd zdOUNLP8y8#e7AaQM<#}a9fK3bcDoXKy@otce1dmPFN!>#q3VRwby_kH%lZ*~3|d|t ziv>9WSOeh`m~AHPlc>O{f%`4LrXg&Gqj$Z*I4lA`WJd9GJU{s=y>mHq36oLzZVs|O z2TCWUc{TjaqfDLCabaY>faB%gJ0zn%>8%m$Cv-eqW*dK z%$_wQHM*YVu%~`I(+zxPve12uj)Cx@o(4)^(J2EHvhi;I80FgN(62n?HS?=YmQsc@ zO;dP3;28Mv&jBq~@vB@3w&JLh zmbA$|MT0&K8dG>fGnU%x618vv@=?)jDjP1pMy56b)(ktu!Zi`>JlW})3=Sg$54bsp z7PB8WW{+orL*m1?_PzBfnzIy$BqDmfhUO{mRZtPU`@p#B1Y5t6eoS%hn{Ai&XL^W# zc}cOutiYWqfog326jLN*0fv3+IQF$|y4Day=@UFH>3d2{Sl_!_2r`21`aYoF=Xdt> zbUatayxN_Pk4n(95{|jdHQK6ZK9>@0loRig>PUv4#GEhRX0Aolh3%I$zUT3Z`c#|X z@GICb`PP#x@D$#|7VB=9xw>MPN4hR5}Lx6YseRm(LszdpTox2zyU z-FlCFL3jI(%+h@7{#>fJ(h-DE&tvl@UH})pVjB;?4(&L1<`>Y^uXp$x7H8_o`%jhU zGga1$X+yOX3IED%{8rGh83w`cJ^yDGx zs%PVal?OGKwEJokFv0RMiKn&_g2e>i{b{n@WN*BZ)px8qQpB|IjETqO;_nApBe^#{ zxuIPXxzg+%Ky%D;0!-_HoZ&Kmw!DZrG(Cw{a~4m`(tL+UJdOh=BT=^jBy7QQV`Y<# zb=T?Db|eG55ilH05EGO!^}v#Hv4NDTr0<8Q?qz9Sl8zt#3QUs|Nx$>%P`T&3#gl(@ zcR;_#YK5LB?*b+)J{Rqib;I0#O^5)wybs&E`l>bS@^bF#x~c0pG_~h%L+tV?Wg0tF ztIn&(JhvADqJFJIPMH7~0hj%+tbM`FV`Qzj-zU%UDDEBADt|;THQ1g){FI`Sb~E2% zCaXz+Wy&O5gGMKXn0DpS7#JvX)>w@EtN$ow@Pgh zDOmuO8~z$|xQc1M$?<7F2gT~~5{odZX4H|zckFdCoSqdq3NF{@Uuc00TD(GCU1Tk7 z!5LhyJW!w(dE}N*mi_$A-#I4+hkyc5G*??zkmWS;p@1vqbbg)@>`s5C!~Enm6g1U~ zB%cjgU?lnslDPP8PFVk*hds2xsdl}`24biQ=&oibJfCdvFg zC`&*mdDU@R&nE+aHTLbkI(sYjpJPKO5^n2-3A(sUx1k{V$d08TgtlJAkP4`##kyaP zVfuNgqtZmaUwI`$qyP8KyR!W=hRy=9q?7U%MHp1DO09jV@pPY92U}kTrV8j$ca@bC z&&=6;$&C_?j{+o^1*U1&=3-;(`7|JOd)_?=i5 z4UeR_)c?kF&R6CNKa*?M&M#cdNkQs6?dNyS1{QGmfU=c-y)%|fd~!CR?sv3i*w&(x zSx}Um@M|KWDOd<ln!3JYzczuuD9b<(^JXHa!q~bXk7+?xJ7ob5xH`? zvoY!Qu;yb`N+qh#Sv+JVVvdB$TJr*%BaR~1QLN8L;NxQ9iIWvsd7kX2$0C2#{$it|xSU9{ zcFg|i5hg0UmB};ng&h9V4k(2F53}?`jD@2Lpa7U>2LyuXAhbHSy8LGXq7-9w1Q`t*nv;L*j69Rcdq}bA(K}MmsaZ;)l%VHg{PPL; zgLs2hdL(Q)Kj)lkugAK@%^ncsH`T_ND;0jGfcEwfIM|?f{5(6aUq@A2aTR~;QNFpS z5ATD>fI(c(ik~;VGy?CD(19h5F=NRJ8jO`0+C%*ntAdYP$>(`kk1kq%+mkKI^9lYj zVC(keh$m8}l8t!*s)GkrYze>F7p~ssuc<~obKkl=PeJUKy@b$WFvx_uPi*=hCft}= zKbO?qYzJ0E0Q9(?!}m5PNjb}Z2FEbhc?&=ta@3s1Yx`p$fwqG+Q4iR*kJhVU$K(Z+ zC(yngkHGuf^K?c=rLy~Sf7+$zFrH6yj)DzW_+@H;ax}-$y(u-pqRwSh-&gvPNS98| zxey0nkWp7w9ehAsUHIPKq^B%eoCT`zC_Q(Yi^#uO0C^jck($E&9}SCg`g6&BQ=n3? zW&F8&i7w1|_4nx{R`WIfyRy7`zO7h)9`81vFDpxRqIXMV=IkjWIGJl%3M$TPyfb`B42cWfv1dE|V_XV`Q{mKlXS38lwBpy3yYcdld|0F>PkR z(vuVFW&%znWiwy?>3n|9tQzr8c|e zs_t`zE<5y^`%)Q?Z_CVdTj~ z0r)=CL#LKQPvQ3CB_@l#Q(4};*tywaMyVH<+ZWKd`j!5q5Ib6AJn!Eshx7a#U=DZl z&dSz>9V}3u7c9}Rt?($c{3wU0cZDHG(Dpe)hu)=iQGcE(gMBw?)K_IPF9WaGGz%72 zxpQAVbObL6y0yawYo{{?ngm6)!ICZ_jcW|WGRx|JsHPtq;CH+2fbgRjy-PtJDhOsOMc`LGw^RMu+MP{3}VM#5VBb1IRMvrKbR9p>-*aSt_n@MIrSW0C8uA+8i%07B_}!qZP4f8|`c|VAt}F$APH1xnpK0sjT9IaD`?{IrT*Q*=%o%dn3lx~N4fU}Z z@$mCbBE3z_ZLWnVd&S1#yP&e;oJnO|Ha^G{TLKjg1c1yL&12{m_3)q-i8nHV?tqB_Ib7gNY%1m|c zbH_pwTS62rb$-YxeKP{V}743^ICo7|kQ_H$llk(nA#W83t zFY%F^9jEFm;N`;;Fuz?ZOf*T|@d50iZ@vtk()?qk!>qyPRM}Q?{0-|3yp_DPYQJiu zu&lZJ{1E80+Il+rXE}r8L>68ql#{#8rDqn=KGgTxZB{wW_r!4#QZG?++5Y{-5l+54 zj|T_8rf>`+V7ISb_vKwJkOdc_g+nWv7whYO3g)K^Ha0^FM31jemZ1i2r*qSo6r4lw z0aU-!`5d}6SK2NQovwuh-1D+VdzmX-31A11M?8$=_ZKdOvI_ZOce-0IF$uTejhx*V z%J8WOSFih{C@wOkAE(YD30;#(gzTG^Yt0JpdvZHiwc9vn8o?Qr<}KEa+Hzy6Lr<`?F zjWwbL37)~O=_|*LKElT@_1!@w_dC<37NX4KsY_3Xv&`_uN;>eY+3s1t(M8AanQ@#a zH^F8quef!ENf!=j`X;Pi()xH0YbDV4ne%_2n)CnI`|7_ax3zCUkdiO}rBON+NokPo z?h@(l20;MCT}Ml#=f592gWB1{en3+kMX7`5!+!pN^Wg^uxLNmF>#FZn zYiaVYXK8e=bs_>beAX}5rmuSfhU@Ldm!Mh8mCkz5=<|=1>gXJm-h;9Y9*4Q*cJuDg z>U*Y0m`>v0LclUS-TNs+k;%7Ha=nAYY~lr|U~_f(Qm!8RG$aVeAd-aZps8ZZnUG=E zSQLbH3h&7D^I2Gpgj8=adj$p}LmLyzbhE|-?<4)1Ot;+|EDkd_#4COro1F5@_patH z9$sHEH~4srdO6Os8hH$+a=Nr%9t`VG@Tt{VYrxkJujBNZe5-sm>vjo;ZZki5E3%1p zQh+D!pfMCv_j`^c@K{!aHJDzhajNLG-#7k>W(D-L1qtF)H{fC!7+zPX;Z~FDE>x(V z2t?`6Ia~(>$s@@HI|Dwi^!dSsR$jXAtTFGZ|D;e|msD8P(2Om))rUB?07s@xH4C+} zonG(W9eCrdPP^eYy|8Ajw<77KDls!6`qZGIocK&*f?2%GciaDmVc&2;iRPO*{UUg7 zRDsblO8GTy(gk)Eu~F(Cy*Gu)wTz~jM?I&>rA9ee<8_;`Lw#DiaXG&J#~P|wP?W`G za#*?fpe|IQM1Ikjkc{|b=itIn{pC!qY$_4a4{1eWqlx82$l;W(StBZqk@kr6X1?9z z3yiw-GW%g8Z?{zR#>7+=d>a)$4zCAoU+PT}iup_*t*6V^p;d`9#h4=jI}gGt`W2bA zzVTWw7P`>AX*&Fh^c|QEj@S-uxHO$`?+SVvVgQ}1x7sH1J@c1|d6gxR;G@m6Xj<>$ z1hZgXECs)i^Peg=TIX?Di+IqskUO*Nw90^~DHI>Q; zGPj*LFzF=|G2J#iy^vbk# z>K+o$Smz(`xzh34Bh!3`4->H(Z^~$1WcoS)I%&O%FuD$Ps8mVZ98NG>bI0|qcTYg9 z=e9d}3y>FuXFRy_mM%6g12K?zk2wer@a4L}qTd6F49&L`v=&oYf5v4k5=3&pDIhDg z4+p*HSsTLLHP!;wA#gp30Gt3aKNicJM8GnhgRb#Sl}c6)XV=A+$EsV=71UGs;K&r{ zH^?D_+d_sd12!&hu54&@*(R8YgW_T++F)DJV6nMoiK)(ZFT&k!zFCrpGx_+cncMdZ zf{0=Eb(#L58?i3)1()V?gC3@H;D{xw1ntAT@>G}`kSMnu>8+^9yk#w@Utn*5gRM~8 z!s!Im*+(waCmMjgCHkt|YA9$}QyWeoJKFWOi)%uLO(P9g%avB|@GUtlM=IZ>k(};3 zw4KKUAbTkTtO!RWSf7w`S-&YWg*PS{rdYRnMqRAL29XY?a(mF@C|!gfO_m75SZAm8 zo=FHQk#I3t6OwZK&npHGAnL_WdH-AI&w(Y<2ePU@2U!!~=c(x{C(| zSuvb5FHWI) z#FfI;m_1Hro(GUK5)`}6D|qNVgT9BkUM#p(6T$S#q=xukEIaahSX7)uHQmYSH$YKI zK=daJ_-)n>OOI6)y47g|qH-LrueW+J?5f}aU0B2*%}hDf3NRqDUEHv5TUC4kS*xEt zC-$O{T40V}E_5TEaM-Vi1e}qv9H7h@P$yCjIvzE#@_ z3t@DPzJ}pLUHFCDfh@Mc!&~G5aWl>;*31_c|0ua0UX2k zGm;>l9tgDY`F_OL^)+b?Q2$1$6D^tVuy9PSHSX=}cI?ZPQMDbo_Tb?^&<1z_;P7R?Z_Wo*UBWN`#_iDNB!sltRZOsAwo0)iMj|QH0TSpgx_|s8Pi4bZaP*#ml*(T*X1EUg-|i$m9j^OgkLCx_a`YOO8$=4 z2|k301mbG^0P^q)7&7tsYz9r|>4dh7KLqbhga@c~-Z7f>1hV`uH7ac^!@M=C+FfUR zrc&YeN?!50S%xd0lQFH7s54q44F_~9%;m7<8SLg-I+?DUz@!z;lkIpYZ|A0PK09?u zw&m>83!hnd^svIuCM{vI#WT1vU6F#9 zp+;x@+J2uC+pX(bO}90TWB{CCZ=_R9Ey?*XZmeHpplk1{su-6tSG~Pc3vl{2;Q<#K zGGGKc$X{bZJMDum&tCdylVI6v*|KY5w)E|2w-4w}V&QY;iH}`o(GCl4O*8 z;x_HU8Oty`Pf6HEc}3vZ*CWA4qR5++C;PRz6#_uN@6lRukG*;L1( z^M2ue_yVMM2dxJFPpp z=RzW%S9;H?;#ewRz7C&Fxi`{OaD6ZOyZ37j+U3w*4i*G4OtYy(P8jApeU@JeP@A33d~0 zInW+m_Ws5Q^agczz`JqRE4$>Bw{{NiA0MH9iiD3!+9ZEE*6a+b{#*#D=9m_la4Tw& z(0P@B_|!F3`2~v3F}94)wNHZ2IPYPoU0xl%JCssrC;3>atj7YAO4&a!=h`G8Kyd2M zkUj4(x_Sy{zizE{xb_{ z7oNLP_ELl7ZCppN>4m-Rybp8bx}nTwFEbaL-OqmZa&3h8|Eje3PF^)NXr@3SCf#b| zx?i*XouzILo%qDvls#)@S&cUP+ZdiqXS@}=yc5Zu=rL}d+#Y(iZ|gCXlom*zq=#q^ zSZahbSPA%{gF)kR+#V5I_eUC!sf)%AV~}rTRlcQ6VI4}9r3t93X$zgJ9OqlMg-XZ~ z@hW^TPTbgA&3#z6m^dW{7Dq%0eW)E8s@mdKAI`sh2SK!hW9v_vFTW`?76K{W0q^kW zU)sFaXkRigpHVJyHwpy$fmYMOUQMB!R={Zy=}15fWfZ&Z_V`+dWxYV~=J9!9M>%Rs1Pf;M zlsAjzBNBt8J(X-1HP*ER*F{T^6|2X0?>CIBRmSf?A-wa|ZZ$r~2U%w>Db?1w&T3zDdHgAB*SYNYrXF`Xjw_!*?W~RXc(HxQToh zEy_|Xeot5=@ns$N0+hcAUR#B2TXz;<`fcE}^%M1|I$uDqQB9d{trH1U-o=o!CX;Qi zsM>y!1fG~N|LJ*9J*n9z0h=pOL8jMti&ZH9q01gC5o#<6TV>YZIoH+^^MWD*PvA8I zkC92qB;|-=*reoS+A(9V_2RpW(wVRCVPMw#!E=Pd1Yg`>&Kq$;&m0Qe25o$KbSKxW ziM-vt#XKrqoqp~`wp?gWsu5GaHVR9AK^8K?ui+5pwd*kbPE|c~qEQ@9kB+P@@7FyZ zRj;C8GLuo6HZ!XTl%LK&A~cIFTUf3!%xg;QYUL#>XnR`y%kDBC{j$3#Bl7bfIfiQS z4xhdiIY+-=j~xg)YOcETN1SE}2S~zC6}hcZle+k)Du|V1O-GaQ?HSBz8^7ud|5XLi z;I5fXqxVDPx+v@Afefj$S$f4otX5H?hf2MAb#q0>uPrSuhRrNHi)5M5nbhy)o^vYB zDAUURqufFE3bjN)t?4|3e_yzF@lqS2GC$}p@SrTAK4f5QgpTB!ETMO5sTXjiJ@+eF z6|?4LlMo|ou;)Oehwi44sc@{%BSSitw%!mG6)NcjO6#8i`M5R8{GEKWo&n!QPxnJ&pYwi7g!81 z&Z2bQ`GjGcEHv-Xgw+zK1%!ME7)Fl(C-aLC2l;SNFy&c?or6tA#VvL6<55ASZTtFT z?N(t9J09yrpnUp#wKZynz?Z%CA|3r!TdhfExvQ2^+o;wD$xTKwr8Y_%y%lYlz$OBk zDH~j=!eand!5o#@?<0GE1Se&=pl@O-+W72(P)D&r32iTzCJ1E}6pT&7;t$52fsQMUj@>*2pz4`o_obCFWNi-Ev z;3VAp$)J!{)e05#I`etQ#9~b0y{Plyeo(;?MRYkKOcpbwiGs7`Gl?358NbD)*w^-c zo7finrfqs9qPb-vBW;43MD#Yr#-x3H^n6@`c@qDT(=Y@d1qoF=w- z&WAb7c=4|`Wg=Bi&J*nhF1WL5C3^Y$kdR+~ej8usF&e@c}(~NA*g@-L0 zb_G6$U#|>t8M$tO00|qg@cu)Ut*m6z%OZ40bopU0X=}e>OB)(4QZbH|dTlS}d ziJ;Tb9?GAD`KD!B@4V$0vO%m?sLn{s#t$~-Eu&UnV5pF?oQEMrvJH`^Q!hlU5^y7q zz6=as$V%6>sl|x0Dj;A74z17K?FyfL*!L#q%?+#Uz-HtdgO?N zEe$8u9;Vq!Kh^lwe)TOPpUGU~e753H1Rfa4S8o@pftUpMt&#JMGZHjlz#P;$> zO33HY8JKk}vcF`!Yrec}Fz{0zpRxP?!d5^CZu57o8D?Q@cgCVGV2|O5OMQ-FwC{=4 zk3(VOb`7PF5IY*-5Uex}zM`xcXwA>_0E@0@iG=2U1sOrQc+NNBOf3^Z-1A;!ZbPp! zBK)Pkwuj)89xzXB&C?uF7ZEn7HXZZoWq#piI`Zt+wYBl5s&id5b-}b6LZ=-J%RV+L z0=E{d1TvWsqA^Ni`&&KAalGQJ@p)GsocpztvfVkv2nf=IXk5-Ku(A`w!QHI7Eh8AR zocQk!#xxpCdlPf|1-%xJ4E1z*=6@EV*ZBXc4LLlI8brynVcQe%KZ9SJ^>|XPw?45p zfDx#o7ee2WazE4YJ+f2ED+(C z7jkIACsVm>&d&WO239(*{QO6^xLq@XhEv;fatC|rtYNa(two5TvCW7@J%{$Kq!N=Z zicE$!`e47AB0t%&n3!DKv+lYny;l$3LHJFp(Z|MVVHXTaFP%3&*evCk^)XrB&GyaY zReAWTTJ*V}Lsxy-{Jf*@KpC+Ge!H#CvHH?FpZ7`Sa(hUmnyN!60nI4HcKc%@R#6L) zNvnJ`qSRu0Vms?7@HyN(?BAmF_b9?X*Z$rIbkyYC;ekU(L?i|+2 zZ_g7?-PQ^q4)z+WZ3)q1u?cTtQ|jT0VWXU70ZlV1fs;1**}dlbhCOEC1*$+u3)w0L z57lJV(^+v->U*6slmbHM5D4QKs>F5x%oRG?33&ptq7U0PS>w-S(U1a)2FM!KLL<4D ztCo&kLp48bi$~j>)t~EgQ^=-rupE6!hl(6;ou!>knJQPHgPl!h`NZhA*TQ^fa_!|z z#POV>7w?_4&aXGxueKttT5a38=bzCaO3l0q@G?q+51viW(yePq%>Jsv2uD%4AY1v6xhb&xI$xqScRIKGAS3DFOwo66BCOZ7OIvl<{qmpK8`5l?k@c`H3&WG<>J z3ei(hMGyAny4OS}XK0*&G<&YtV6ge(S4dPcA+nEcYnT=)KKiDp!fG5{*HHHDADw6@MI03iz=Y!>zGTe)LACX=M^#(siZi7j9b1 z8=;rGOLYZVB8@CSR)K4ze@mdxwPM6=8iJZuIuE6fVBIO$oLKX19W=^*=r&{-bsOFO zMMCpbMQ>excw^x@7V8B`ZY+_}gJD~}Q+Oa*#!P?EAO+8~Um5!3uLz1@ z-#fgm)6C*XrrIPBJbZ*K3=ha(6=$zmy}ylkYbON(|3C;M#{!h($pY${dxPF!<3Tbj zY7a$rjmzoerwKm3+xK^z*<#YU+Eq0ImuE7_PL|d+Y)$RBm>BU}z-LEdjWP!O1LKWI za^$T}3Z14%3*Y&*yRz!6y@%ylj~8b^W?LKD0~iPjsA`xpCdD16DHipVF8X#!XGUU) z4LrlL)MOvjLz+~FF&Aq*<~%~YX+Ktic{$Zz*HeV;Y2^4+wnh8Q_=;ke($k~clIpFf z$t-)k+~%^41EJ!o5H(TudS1@-33)EG8PEr?OJ7Be5CFY_inB-YEw+2dg>HnEla~gm z&6}Sg4h`*;dlx2zFnF+Py$fCc6D~?ZKf&uRa9eD5W#?1h>{qR5x&4~0PA7ij6Q~xl zFNqUe4PPxr=cdO&~-4N8w>35}_(qA-!R3yn)!Y&%G1dc*B)?v&Fn z<3zm-Bp?QstX&nt#&ILxZ;O@*w^LoUu2m)j#IyqH$0`7Osv{sh0buCH)jb4 z`V-dTEFF2_6J9u5@pH2EZp^9l2S8zJyt>t1Tk$q*x=**HH3vp(R7TzDoSpJpf=1-BJR@OR;=~B-r@wog#Hi#vBKRs{L$)}+LRwY}+BeV0a>;R? z@8Jm~&4{!gLFfgi!CYNIPd-`9BaY3R0ms|t`{o1S1j2-7Z+5=H^A$mywWuG*28_#D zbNXr;Wj*Ozx!8=~ne*RjsAT8uTwrEFy!mv}dFsATwX0-V3JE+xdjpSMK?!%yYxS$!c`G8-Tm?eFi zrwkDYs!vIMXl!JA9JAw75DdFgMt69CbM=sj{pHlq3v|QnnPr?*;xd_ab0Ik(+&+}T zfMb^p-1kGoYh%5w5u3DZ`PiQ}DPl;8OH%nZh95@BYk^{0ScCLVSgt{lfNS(fE7v@d z7jXG2QlYEZErs{qAC0!^4TEyS`hm+f9r$ti-KzZHB|qPX7~d7oPPC=!iYtVuMxroz z<62&2Y{dH-nDZ|KQU1>9K5kcQ>C_$xVG>FAe6Cylry0aka()8tm&wZ^A+oJ`jV56v zjg}u?<^zW37;o1Fi7d^EdB~!bP1DcIG5}QVr{6(AKow@pvFAOQQ%`m|Z9xiuR{Nxz zq5?>@1S-hJIIU6y51}K`qE!=$yD|;f8KD;TRo(NSjLQ$lU84xWmO~2c0r?xtUUFQw zPyL1C852h;aq9F9Tet{iiO;HqZ?O-PHdWT4HuslC#su9mp2e%~A!ZFNUPR5=*Spmm z@Q-iL)|Z@f14oDHs(PigWE46p8L}-N7rH!OJnB1?DAP+3pgnvF1AFUP-9OzhWa}HS zY)|!|IZr>IYQ=A2FB3bD4!DXutV(DqXVM2M{XM->U`O7&3DxL~aqx^?FkOX+Ij)TguwU-~{KlEQRZ z&*P^^Fp+>p7R`?l=mM?NbxWGeNXHlwLnjdI$wZ}@3oF9|P}F&zM&My@-*l@U|gttw#W{*5!-y2oQR8J8w)AaypSPw`goWu5} zJm8Cnx9DVWu&~fY8mJU-qGXAHn%!koF)i)Glo(F@nbb8&qSe-Z0nJ)lAT*JZE+#a| zzuSnu#F23gv;(x}2*ATCl>`BEV6n~>1LbEw_k1C!HM{G;gF9ak!dCD?;&IjxvXT{T zNGlMBeP1Gb!pn6iH-c~Iv#6*e&{V4k2rO?9t6j^r-h;qiyxIufBcC)CQ$P+|_L-+umOaMU&5 zipZFu>re)|sEKq<73Mp#d8=ily(XKSWytP#RiIj$@n*4xh5@&LWkiNLX>Nmy2G2)Y zbeNad6}s|i@l9PdDIcXs{Yqqfh!n{ZYE8+d;m-fps!jmD2G&Tg0GAk9sMz;0p%OkA z8PP=7<37&{w+pOeV$L=cxS;+=Nn8vw3a*ZJmCmel!qfVQf3}AGvz_t}>-d}8Y{-bT z=3&KeV5KeoDMx?#B+`PmqjJCEh>GVw4)TxZW28{L<2UZ58T_*>??1g(BWHn}(O=f} z`}o~zK-b)w4%-Iy@2vG_eEN@1M^qgndR`*t#Q%L9pl}Xliy_QmHs-}YnpFR?wqNw^ zt-2KmBD-DVb;C0sDu8Fs5^?$dC`9|~P=Wf`H20%KWY_{{xo=vWW_D#|jEIb_TOPk`*o8H#*i>FMDxubul`M)phH=6!@$WUv0k0H!r zHir2I+Vs8yXd^&XgLA_(AF^(_#CKQ7_uji{n^b@r2d{4Pn;4jY@)t)b>BKy^;cdM& zB2QwCIp6|mHT*X`_8~&VggOw^7>|Db2Uq`f&w%>MXD6Eet+S*zOubv0%EZfr1OA8* zQ%CfV?CW1f4HUqBCM82rHA{HYShCqMe6p`KDBj%pgFF5@y@6948Xn(ShItSmt#9$(68qD~Ox#WYJOtJtv0P`|8 z#r}pp{|_*a5RjR_!$D-f`T(ClOZyEy|A+MhtQL5NP4M?6C%b8zD1Jd$DO>lO82IPCUmO*W&UYhh!J)a2MdvbH z!`FP1vTnqDNOYeeOim{T|0a!4aSJfW(`l_YP5mR<{X}9qmuQv17{Z&z$^~%c-#J;O zXxM=FsJSU>ev^`oM#TdBHI#ocUDZ!rHP z>0dtq!20izivarlL{>m~*4Xym1S&UlsbZ;=K{lrKHzR(a-^Vi%=UB;0b;YBiF*BMc1omd_p0ma$>bu=(BAY2QiH5fOrFyPt>{{2=lbi9G`b(@X< z*H-~(*x{FJ;{T={pZxavN`n<$WW0!GS>x)_`0msYpCQL9(o z2X?eH{N4APm{{nSc~G)Dy~#XOJt(~2OcqOh0|SfvFF*wZDgPIs`sL{M{x3lFzW~)g zbjAMyRR1kNrFUeedg~TFk<2Sm^*?~lKa9u!3G)3fSoI5X{V!NW^}k@%Z&GvgzhD&* zHYw2+sFD1a0Mi<+@}r9V7}9?tH(nexb=a$a#Kow#P{YsyLCM7TX8(gbKcpJC5kiEf zFf=Ac^D98z!N;EcsbNROd5HK0#vcjZKY?YsRp3T;*pb-EhI|qx;qaCOkQxc>6FSn@DE>KF-s)l zrJH_)xq|*6377tpi+~RW4h6PYfgISDEK?8Y+Z^@W_Z@qpD45rES^mKJ@k&&67f+B` zU#X3A>>hA3W<8VJ7RydS3YXg?ot6X5z~!=pLw)*>Y6iox(gk!*t{XR*HJe*~;99m% zOEqMH%r|3H&5p#L(IZA3rK|BLn@s7lZ%-7ir?=E+q*GeEbik*eX4|M`cFPNWP z=8=88@|C`lIZsad&6~84&Q^#Z5|VaKr|NsmgaXv-qhw@ZZxwAn_=9%61tKBVQF$!y z-^z^X2}l5dpZF9C-TI!Q5JQ7MwV(4E6>)k1+$I3?exji$@|5)#2}90x^a8lvNT&$* zRiXm5r@z*(k*!--97QE#*f*<#j_#VtU2fPKWK%=(y9cez7pM%2Z3~qtL}q))Y{u&} z3!qMxXt@-Bpra%6=Si#g(E|1HP!nyw?A<~cJ#^#jI^bCSNU(0_X0F&Kf$xF9}bu}T{J zuN`diRL+W^SA-sUiyBaA1Y{wM&Tp}gB+?*Z7~Zt!BjoPJEqJ(R>)#jR&*!DcYd=@p zSLdJ<9n4E?z5&(^`$&%=IfkxSZPz3fJ!C&w>^4gj@pb#coUh0|^~i}jclTBpn8EGT0Q+nwSf z^Ae~xVpoxO<&u~KSU&zTngo=Az*(G)a%|x4I=lI)$#R2vazXD2!iNtVzeW%@19t~> z)93!Hiw$Hf-&@C?pu`E7zc-+cdGbSI@zfq36S^2CNt|%8F_6l-kW|*wYqD+qr2*F{7?cg3&c7QM?=wWv8ha5Iaj4Cq+G5*(O-4E z4l)I1Z@=U?4gm?N#N+|De?x(L%4N%r&$oeVfoPiD58W4=-P|%>)_Op=ZRK@q&aBRC zsCFNq(#Sj#_;p_15K17EMsec+d;0=#V9M-Zmhf^be8~s;K_SPWK#}}ce}HC9)9C7{7?nt`kKuv*Y3dE$VK*K8<7{LxF-7`>{?2MyO9qDhwmizrjY z8eLrW3p3F;e)}`qyF`4shX4!rxE(GHmKnBwyAl#~mOTD4^p7MWuNJzxgz8J}91>9B zUW1E9(0ceg;0Qi`$@U$^Dcikb^2PnVfD2|VoB8?j{;CY0sXPs z#W#=_L?L_ubZN5t|0G>r5gw14xVPf7jEF+a4*SPi#e(29lNO=3q`iX3X-V1F+>XF`Rb|aPUvQAQhDnTOjFHwv zG`ou>1!}iU!_c{aW{2IZlBCe3aY%F$TV33`OM80aa3beIqIYCz_4PA)49$?cB-+)* zOGd3*FQ$7F$FYo<^3h~mF?H~AC-z!?L&?1SXl%{<9F*Oj`&B&)s)+JYN@45|J1P~h zwjeTHHiI!r`U{qGDM7V~TiH_46j#wDKp#L;rl8NoBw@0Oa>#p;ujpTlXw7_V7n|~Z zcE2)0mwejIn=h?10xm--n-w$oFW{godUmyDcUE{@)@51R(TUN*({{x5<$ARLSqztL zk%qNiALRXZS17L2?K}D)H*lqIQ%|`8Ke(hk{Si3w&MD9Gq?XaHHypZ4346I%?|E2K z-GhoVgaUj89&eIWR&NkH3O$vAmPi0A-JSl z6Sq`x8DWLf-bPv59Kqkx=A?E6K^MT8n_!N7HHRfL-2-`+JWr9}@(HZ<9>ir7CI7c? zkb$-^p;jL-WE@Sl-#KWahGDKw%V6_#e{mZ){D|=y7)@BOzuvFzmVj~D<7vGLJmH#F z2^IF8(M4Pe-VtG@;$k=qoH%|o3)-R?b=2zm(h%jlerfwF=nrf%k@NX>*Ha2UZxNbyHj}X!_sUBJVdJ)PnOySnOf#8>=;D_!tUuu?>k>WUgr2YOCz06jaRQ9Nk5x91hAhD|)Jl zM#;;dgfkJ1PF_+|yFuo@ehU%aBJw|trDQg&;F?GRB{o-Tu~W{>)cg5pZ^lavI)PdS zE8lv@=iQN;$S*UPU+b@kZ!sV8nt2la4|Eayc5zv)J^JGG075k5QQ*z)e~nlk_IxCK zeLjqI)-^m%%%ii@nwKU|wHe74weJJb`v0svlw)t5*cQ(!(+7_YC*+s6SZCzG>X4CN zm&0@=0~5^$Q_q)J5eGiWu9=v5mx8J(xfFut@oxCnBf15+j>rp`8xAqsQ5w#6o*|7e zKB8D9H-wbu)EROm+@s)gg?@cHR|i2V7iq~qf?WOR=~QS1nASg7zJ?TQt!3j#a5aFVkM6P zIL2!I$pN&weRYeVCeGI!Ln~|GkvD#mokIqDcJ6KkKKIz zpx{yO)3$pC$6JFL_4z6o^?HI^@r-J|;w^zwyq8&5yIGgM$s~R&A*A+|pA!8|0(h?9 z;nFwHT@78OE=NmtoNvS_EwlqWY9Syg)XSEA;fQN@I$(4)2H-E^HhFdb-4MQUM?LHi z2I(V+(e<2x%OIEkdrYpVbPE^+U+66RT7O_L`T0}C5OZbsy|fn^<7%&H{mM7{L1V~( z3KmF4ky$@E!)}0#k?`)h@D)73Ew#&Zjc^@k%MhmqE-cR5;N?Wq0A{}+6+r~v-VdVW zF|S29T%Qe}QVt424+D;#PLI$jT^n8hd?9?;+tB_KmuLMT#s4Y_g!@p~%VWy+nx%tD z`)F;TB9ATc)J=UtRy5rWGM%JbVe&47du!f8h$<)3ii^OG2TZb{ zDP%>Jw1${|A9eJ|y@wg5va6LZwDwzdR0khbHgvGYoDdyBcsEQowScCW)D_d!lJw%8 ztbwt{X!<4j*>!`*L8l6ZRNH9R{p#*6G+RD`AJj3X6pX}JRnMZc$xt8g_5{#4rJ!Zu z*xJ%}Ml;9dK^?zFJ3DJ_>VwOn*!MqlGVblaVB5y)7x;))fBXHrA0M8hypP1chqgwY zd0!0E;M$uj%iLod;jV?i!YV4Lz1V{6?xq|z)HJ^sA74DfUHsbK6LT9Kw^Y%7b=kJt z|E(DM1K7R&rTY(T7!04KbnQNoUwP&o^lh}=^Kz6qo4lSkJxaxe7XZ$FJM$9x|u zvd(IB&*Xzl5Sp2^a=&1eO1Oex7r)ohn^}PXD0usg!5!v601-wz8ryw&k5&7o@BSB) zI&>VO4@amr^}r=bm31&kwYkq)7`^3Ot(7VU<&J zUYMg!>$JRKv@4vE-X!Izx}P6Ur<5w~(ALVKE)Wz1);dn=C7w;dD%FsG>2Z~=4HA(F zQeat_$GR*ejwcvK^IxwTjb|`B{x&gL5~*T)8c$tJRhD)do2r>qTm2*(lL2)R4P~0g z(ca!(oq#(@BTOaRxQqDGA4`+cygGPLSJ>zigE+?&eezw?v8f6p;ZINTb$ZT}Z{3%# zgv1HZJ|R3YN)n;sFf_>JuIqXC8qKA{u=VI1ZC<7+v`k3h)y+(JnjTl_ihO~`prsvqeiI^lNFJSWI`~0sdE_$Cvk4%;6ePta7 zwDGy4N)g(=A(*3DxXEQ(Q76u1oD2(N@yC}`yeg(o`l3Nx*c--bB#Cs%O6^@sKE^Vr zLZ!$`u-%luHfh_%UWqdUUK*TEG|*-1`{UUe3|!Jvk$tcl_jM@5Dt^pm(Y4CN&Kog5x%xZsh%$1EWf^n$frKb zB%W;*nAXEA#GBT0!~*rgG)q|!6q?k$CcMeWI#Mm2P$8uJ!pjcO#y+^_y-!?+N7=b< zHW!v>)ibGQ@CTRF((we}$uH@Gc|5{6P@Yhk+pc8o~xr32)SWdp(*h z)7$2U5ZDYYX`{p?divqr*vJSKi}J@Af91&6Un| z^ct(oAZ=!EZKi6SL-=w}>(G2)W6|)1X*+jFk9SRa^6lr_pQpSma=wbGjcdfdli1{9 z(DS?^i5+cvCQl>IR12I>1cj(~$YulQ-Z*Eac01>n+Hx512E=kZs7&i|Yo==bu3Lic zJwp)NX(bm{(>yX^#l;W&$XquO-&G#rf{~(81G{aGP zXp`@jPmMcbrK?Fr?E+I|HW>CToRHZ!*hJ92l+XBQO~AGP#A;5Ngd6o3NygI%Lz%!#H0^th8TT{mqgHTPX-C^^!RgTwO#j;dD$(VwsS_BCXy8u zgLsbhO1nh_@U&Bt-zy}el(v%fqgYij*1)3YcLLkf7=3Fj1Zf;jKNAtte2xM`&&Cy< zerkNPTZur?YP>`hG~sA(5c-&q5UP!(CL(@EDrkNUXQiW4)`>QR8Tx5Pl<%w~i$PS> znZNnt54FqWi?f{bwS(ZyHCj5gIk7m^qt20eJV)6%uEg#!e(yco~xalT)=TTPmVS4#CCkw^_4=|lm?KHE<=p7x%a?#Wqqa*BgW{6zIi3S5xyu*#Sd5-M z_|ypUg#`g>H*ok;@g$mePJAyu$y&xfV!*%Z$zwrlnr2I0w(`d8@13ZW*eUa~wMFG^ zif14`gNX6YkuyAI64``MA(+rDcPbACnHAyY#B(-|fD3UtNwM#CPtt4ke*+5=D;G~H zEruz6GDd`zI8C0-*;IUWLp2{srm8S#<}SaBCLA2{DUI3lC+VH`Lep;_KLMfN@E|nO zv6yI%WN%U&;%16HYgIH=(OXkAlmRVCJ?aqs$`;=T$o+!hqt)cL`?+OByQv>uwQ$EZ z%%8y=3=3GI)Q(Qngf}Ei@HLOPT=cV8Yv1f1zQ;WWfvQf9e_>+ojV zcDg8yvm1H^X8Lc@f5G=C0DPU8sy1twuDiJM(+d0)_|KkgOmb)WxjGyC0Rg4!ixMsE z(c_OlQaSWj<2;avP1j{Vvy+U&S3%z8IyFL8My>TMgUr8MIfKV2HBwWzrQ9CS)uhBe ztf9xXdo>W6KJmu$3ui7S8dZ!I%%@48H<)eVTwII-WieJ?lXh_S{7b0wk2$PP@V!Ex z^P|nzvna&6Gmm;ixzRkOjNQmyF1L8qFsN0E;%VsuVEjQoHVbYds~#Q3sp2E5q`=OC2Qh891-X^#Epl*ISiQ8+5&Tv6WnMk z(7T%A9dIDzM@(Ib`6W}t_DkbiLIS+!PaK>1-V6JlIjTghQrLL@sM8AK!7-g&o4$i* zbjPc;5<)wd*5Jke(!rlE6@!p4bSg>UP6_pvxW)T*ar0WE?A3=x>j{#>xJj!n1}2#& zoBR>G>w#3Llr<{|EbeSJh({mMsNoUeM^#OaTYk39_^1*G;hV)kynJ#@I*c9?D2%$fJ zlj8S$4A)oAzDx3utZ}Kl;=KOpExAvJe$izsUBwrL(&4i zo{Psr!JTg!JrX#e!0POmPoW@feb<8CwCt*TUu(A1$Y_1A;*#Dm}iVs z#zK+fV$TW|+x+XgWzk;mIssP+1qqKmQ?m_ltd@v-VodOXoHArdMT2`S)>c~~OK|mBOr1dv=`Wru?Q5g?K zd}HR`mz~*BmI#gfu*HvpD$wxWInVrvNhK&f`ACRx|JtKp&`=cfM^rM6V*`3bT!|ot zs$`edst2RY4^Dq<{PyvSbLR8cfZu$6oDtm--fMZ;nJnH@cpRN^Cb* zXD080T_>nJN<7X`4m$TiCFl{2v@)o%yr`Q2Yp$AG7RQPvGQgy7bv$>KS$52`e53@* zul%^_yE@vJ;4mlCC$R6fZykc}$gXkgS~rMFlNQrJqn!TzW9CJ?z1Ht+r&;8lFA<8T5>7^1`h;nL|0!9(H-b=+ zqkdf5*!M*&VM(E2xg%tl&qG=UR6Mk5HjUA@kuSc!MoXlv^SJ)fDe+ncH6QzoixIVm z>Xwv-O z+*F8}l)^2vFcoTZrox05Eq1`}kboz1!dfXUrp{y8D|%NNKzpM=>O~XBk#|lk+FFmM zN^hLt5VxV{h7>T%wX`za*|tk)ihRNHQ1c1#&HH?Nx7W0;yL)B2(Yh-_Oxu;!Jnvn+ z>Q^4ES2=g?vb^n9zpY&!C0X>u9h!9_Vp5CZc~xc6>Cx+cwTVrWQRd%ovP#1+W6O8b z+-#xOr*EFxwQKHz8=ohc8N+lH7S!H6hi_7IUWM=jSZd|03^j zqvaZ~!4t+}U}xypUwom&7vY2j94-A0ANpELx0yUy#%vbol;?T0)Rx8W?-!0<>2m!< z<*3O@7bFE6l-}Q~K7LvKx0Tr+m-HiQQ|(gI?;rUXuh;Q6>GOg`k3wE)<*(w1*#9H< zcW2&8(E!T@8dvXW?T2I@hZ7uM&YWF%``7p7Z`SyHJN%}8mfn-J&^byIM3@S;m;O8@ zYIW3W@2+1}>2vo(N?gm+Q;<4`T@G0sKhC!|FF*C~YtrrhX_IUAMpy!4^vm1Zv)%5P z_5epgG?bl>PwMM9*US)e_~0u}uD!v_&y~#UyW3z3>>Zj%KfSW@_1bg)@3pQ}2`u$` zUcY~9J1__?hzhQF&hWNOcuoH9tHv))7Dey9`)dO%d>m#Acx1`n^wD}WvpF_> zVO-7JBY$(U_a2!v6?keyKy-EAzYUe{*Xsjnom>~pRtgB1;Q#aI&o3v{*+T*^y-QZm z&7L&vWb;gC3oGe>D~H}5e&}3gvQPz_Qmy0~x2P< zbU#0TIn{2f&fiT>cJ8`VHtXw}c>>~RwRtQbXPtKC-WlmXXSJ^Q+0_C?$F5H67Ax93 z&mufpZ&tYClOCYB?vpgz!gbqXOx8P{kOYcHoj6G)gz}iR!;byt-WpD#PnCQ&3tQ}&BG7NYagF7d-clv zbqi+i*(o(^W%KH7@{Wg(ojAr`qH=V9sg0{Z=fC_9#^F&cix=+>PPp2#N?F6%vM3=lJ%03l2dMPR{yH?!nd;W=aiXK zkLqQ(jMR z`}$|Mb(m%!xH9SMzGw-3Por&%_W!q;m-pjuaCmvA-@G-;9$!8F!sl(~sWWGm{b#?F W5SY0~R7aKp2s~Z=T-G@yGywp3mZf6= diff --git a/Documentation/Testing/Scenarios.md b/Documentation/Testing/Scenarios.md deleted file mode 100644 index fabf589f97..0000000000 --- a/Documentation/Testing/Scenarios.md +++ /dev/null @@ -1,67 +0,0 @@ -# Guide: Testing Scenarios - -## Purpose - -This document describes how to load data-based scenarios, including glucose values, dose history, and carb entries, into Loop on demand. - -## File Format - -A scenario consists of a single JSON file containing glucose, basal, bolus, and carb entry histories. Each history corresponds to a property of the scenario JSON object—a list of individual entries. Each entry has one or more properties describing its value (e.g. `unitsPerHourValue` and `duration`) and a _relative_ date offset, in seconds (e.g. 0 means 'right now' and -300 means '5 minutes ago'). - -For example, a carb entry history might look like this: - -```json -"carbEntries": [ - { - "gramValue": 30, - "dateOffset": -300, - "absorptionTime": 10800 - }, - { - "gramValue": 15, - "dateOffset": 900, - "absorptionTime": 7200, - "enteredAtOffset": -900 - } -] -``` - -Carb entries have two date offsets: `dateOffset`, which describes the date at which carbs were consumed, and `enteredAtOffset`, which describes the date at which the carb entry was created. The second carb entry in the example above was entered 30 minutes early. - -## Generating Scenarios - -A Python script with classes corresponding to the entry types is available at `/Scripts/make_scenario.py`. Running it will generate a sample script, which will allow you to inspect the file format in more detail. - -## Loading Scenarios - -Launch Loop in the Xcode simulator. - -Before loading scenarios, mock pump and CGM managers must be enabled in Loop. From the status screen, tap the settings icon in the bottom-right corner; then, tap on each of the pump and CGM rows and select the Simulator option from the presented action sheets: - -![](Images/mock_managers.png) - -Next, type 'scenario' in the search bar in the bottom-right corner of the Xcode console with the Loop app running: - -![](Images/scenarios_url.png) - -The first line will include `[TestingScenariosManager]` and a path to the simulator-specific directory in which to place scenario JSON files. - -With one or more scenarios placed in the listed directory, the debug menu can be activated by "shaking" the iPhone: in the simulator, press ^⌘Z. The scenario selection screen will appear: - -![](Images/scenarios_menu.png) - -Tap on a scenario to select it, then press 'Load' in the top-right corner to load it into Loop. - -With the app running, additional scenarios can be added to the scenarios directory; the changes will be detected, and the scenario list reloaded. - -## Time Travel - -Because all historic date offsets are relative, scenarios can be stepped through one or more loop iterations at a time, so long as the scenario contains sufficient past or future data. - -Swiping right or left on a scenario cell reveals the 'rewind' or 'advance' button, respectively: - -![](Images/rewind.png) - -Tap on the button, and you will be prompted for a number of loop iterations to progress backward or forward in time. Note that advancing forward will run the full algorithm for each step and in turn apply the suggested basal at each decision point. - -For convenience, an active scenario can be stepped through without leaving the status screen. Swipe right or left on the toolbar at the bottom of the screen to move one loop iteration into the past or future, respectively. diff --git a/Documentation/User Icons/LoopingPump.png b/Documentation/User Icons/LoopingPump.png deleted file mode 100644 index 753e486c3dbc084197262574b40de8c7e89c3950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15380 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