From a42f0c0eabe3547e9cb11499ca163f81d4442446 Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Sun, 30 Aug 2026 15:19:07 -0500 Subject: [PATCH] Update string catalogs 18 new keys reach translation for the first time -- the sensor-check alert, the packet-inspector and chart explanatory text, and the clinical channel subscription description among them. The diff is dominated by a one-time serialiser normalisation, not by content: 162 existing entries are rewritten with a space before the colon and keys sorted alphabetically within each entry, which is how current Xcode writes xcstrings. No keys are removed. Once normalised the file is stable -- a rebuild afterwards leaves it clean. Build-regenerated; no hand edits. --- LibreLoop/Localizable.xcstrings | 229 ++++---- LibreLoopUI/Localizable.xcstrings | 879 ++++++++++++++++-------------- 2 files changed, 586 insertions(+), 522 deletions(-) diff --git a/LibreLoop/Localizable.xcstrings b/LibreLoop/Localizable.xcstrings index 127e3d6..91fe2ae 100644 --- a/LibreLoop/Localizable.xcstrings +++ b/LibreLoop/Localizable.xcstrings @@ -1,110 +1,125 @@ { - "sourceLanguage": "en", - "strings": { - "%1$@ can't reconnect to your FreeStyle Libre 3. Scan the sensor again to resume CGM readings. If it was recently inserted and keeps failing, the sensor may be defective — replace it.": { - "extractionState": "manual", - "comment": "Reconnect-failed alert body (1: appName)" - }, - "Active": { - "extractionState": "manual", - "comment": "Sensor lifecycle: active" - }, - "Authenticating": { - "extractionState": "manual", - "comment": "Pairing stage: handshaking" - }, - "Can't reconnect after %d tries — re-scan the sensor to reconnect (or replace it if it was recently inserted).": { - "extractionState": "manual", - "comment": "Reconnect-failed status after many attempts" - }, - "Connecting": { - "extractionState": "manual", - "comment": "Pairing stage: connecting" - }, - "Expired": { - "extractionState": "manual", - "comment": "Sensor lifecycle: expired" - }, - "Initializing": { - "extractionState": "manual", - "comment": "Sensor lifecycle: initializing" - }, - "No sensor": { - "extractionState": "manual", - "comment": "Sensor lifecycle: no sensor paired" - }, - "OK": { - "extractionState": "manual", - "comment": "Alert acknowledge button" - }, - "Re-scan sensor": { - "extractionState": "manual", - "comment": "Reconnect-failed alert title" - }, - "Replace sensor": { - "extractionState": "manual", - "comment": "Sensor failure alert title" - }, - "Scanning sensor": { - "extractionState": "manual", - "comment": "Pairing stage: NFC scanning" - }, - "Searching for sensor": { - "extractionState": "manual", - "comment": "Pairing stage: BLE searching" - }, - "Sensor ended": { - "extractionState": "manual", - "comment": "Sensor ended alert title" - }, - "Sensor ends in 2 hours": { - "extractionState": "manual", - "comment": "2h sensor-expiry alert title" - }, - "Sensor ends tomorrow": { - "extractionState": "manual", - "comment": "24h sensor-expiry alert title" - }, - "Sensor failed": { - "extractionState": "manual", - "comment": "Sensor lifecycle title: sensor failed (detail says replace)" - }, - "Sensor session ended": { - "extractionState": "manual", - "comment": "Sensor expired alert title" - }, - "Signal loss": { - "extractionState": "manual", - "comment": "Sensor lifecycle: signal loss" - }, - "Stabilizing": { - "extractionState": "manual", - "comment": "Sensor lifecycle: stabilizing after pairing" - }, - "Warming up": { - "extractionState": "manual", - "comment": "Sensor lifecycle: warming up" - }, - "Your FreeStyle Libre 3 sensor expires %@. Replace it before then to avoid a CGM interruption.": { - "extractionState": "manual", - "comment": "24h sensor-expiry alert body (expiry date/time)" - }, - "Your FreeStyle Libre 3 sensor expires at %@. Replace it now to avoid a CGM interruption.": { - "extractionState": "manual", - "comment": "2h sensor-expiry alert body (expiry time)" - }, - "Your FreeStyle Libre 3 sensor has expired. Replace it to resume CGM readings.": { - "extractionState": "manual", - "comment": "Sensor expired alert body" - }, - "Your FreeStyle Libre 3 sensor has stopped working and needs to be replaced to resume CGM readings.": { - "extractionState": "manual", - "comment": "Sensor failure alert body" - }, - "Your FreeStyle Libre 3 sensor session has ended. Replace it to resume CGM readings.": { - "extractionState": "manual", - "comment": "Sensor ended alert body" + "sourceLanguage" : "en", + "strings" : { + "%1$@ can't reconnect to your FreeStyle Libre 3. Scan the sensor again to resume CGM readings. If it was recently inserted and keeps failing, the sensor may be defective — replace it." : { + "comment" : "Reconnect-failed alert body (1: appName)", + "extractionState" : "manual" + }, + "Active" : { + "comment" : "Sensor lifecycle: active", + "extractionState" : "manual" + }, + "Authenticating" : { + "comment" : "Pairing stage: handshaking", + "extractionState" : "manual" + }, + "Can't reconnect after %d tries — re-scan the sensor to reconnect (or replace it if it was recently inserted)." : { + "comment" : "Reconnect-failed status after many attempts", + "extractionState" : "manual" + }, + "Check sensor" : { + "comment" : "Sensor check alert title" + }, + "Connecting" : { + "comment" : "Pairing stage: connecting", + "extractionState" : "manual" + }, + "Expired" : { + "comment" : "Sensor lifecycle: expired", + "extractionState" : "manual" + }, + "Initializing" : { + "comment" : "Sensor lifecycle: initializing", + "extractionState" : "manual" + }, + "Loop is having trouble communicating with your FreeStyle Libre 3 sensor. CGM readings may pause briefly and should resume automatically. No action is needed unless this keeps happening." : { + "comment" : "Sensor check alert body (transient transmission error)" + }, + "No sensor" : { + "comment" : "Sensor lifecycle: no sensor paired", + "extractionState" : "manual" + }, + "OK" : { + "comment" : "Alert acknowledge button", + "extractionState" : "manual" + }, + "Re-scan sensor" : { + "comment" : "Reconnect-failed alert title", + "extractionState" : "manual" + }, + "Replace sensor" : { + "comment" : "Sensor failure alert title", + "extractionState" : "manual" + }, + "Scanning sensor" : { + "comment" : "Pairing stage: NFC scanning", + "extractionState" : "manual" + }, + "Searching for sensor" : { + "comment" : "Pairing stage: BLE searching", + "extractionState" : "manual" + }, + "Sensor ended" : { + "comment" : "Sensor ended alert title", + "extractionState" : "manual" + }, + "Sensor ends in 2 hours" : { + "comment" : "2h sensor-expiry alert title", + "extractionState" : "manual" + }, + "Sensor ends tomorrow" : { + "comment" : "24h sensor-expiry alert title", + "extractionState" : "manual" + }, + "Sensor failed" : { + "comment" : "Sensor lifecycle title: sensor failed (detail says replace)", + "extractionState" : "manual" + }, + "Sensor session ended" : { + "comment" : "Sensor expired alert title", + "extractionState" : "manual" + }, + "Signal loss" : { + "comment" : "Sensor lifecycle: signal loss", + "extractionState" : "manual" + }, + "Stabilizing" : { + "comment" : "Sensor lifecycle: stabilizing after pairing", + "extractionState" : "manual" + }, + "Warming up" : { + "comment" : "Sensor lifecycle: warming up", + "extractionState" : "manual" + }, + "Your FreeStyle Libre 3 sensor ends %@. When you replace it, the new sensor warms up for about an hour before readings resume — a short CGM gap is normal." : { + "comment" : "24h sensor-expiry alert body (expiry date/time)" + }, + "Your FreeStyle Libre 3 sensor ends at %@. Have a new sensor ready — it warms up for about an hour before readings resume, so expect a short CGM gap." : { + "comment" : "2h sensor-expiry alert body (expiry time)" + }, + "Your FreeStyle Libre 3 sensor expires %@. Replace it before then to avoid a CGM interruption." : { + "comment" : "24h sensor-expiry alert body (expiry date/time)", + "extractionState" : "manual" + }, + "Your FreeStyle Libre 3 sensor expires at %@. Replace it now to avoid a CGM interruption." : { + "comment" : "2h sensor-expiry alert body (expiry time)", + "extractionState" : "manual" + }, + "Your FreeStyle Libre 3 sensor has ended. Apply a new sensor to resume CGM — it warms up for about an hour before the first reading." : { + "comment" : "Sensor expired alert body" + }, + "Your FreeStyle Libre 3 sensor has expired. Replace it to resume CGM readings." : { + "comment" : "Sensor expired alert body", + "extractionState" : "manual" + }, + "Your FreeStyle Libre 3 sensor has stopped working and needs to be replaced to resume CGM readings." : { + "comment" : "Sensor failure alert body", + "extractionState" : "manual" + }, + "Your FreeStyle Libre 3 sensor session has ended. Replace it to resume CGM readings." : { + "comment" : "Sensor ended alert body", + "extractionState" : "manual" } }, - "version": "1.0" -} + "version" : "1.0" +} \ No newline at end of file diff --git a/LibreLoopUI/Localizable.xcstrings b/LibreLoopUI/Localizable.xcstrings index 848bfef..c8d7745 100644 --- a/LibreLoopUI/Localizable.xcstrings +++ b/LibreLoopUI/Localizable.xcstrings @@ -1,554 +1,603 @@ { - "sourceLanguage": "en", - "strings": { - "%1$@'s algorithm was designed and tuned against CGMs that emit a new reading every 5 minutes. With this setting on, %1$@ receives a new reading from the FreeStyle Libre 3 every minute instead.": { - "extractionState": "manual", - "comment": "Minute-by-minute warning paragraph 1 (1: appName)" + "sourceLanguage" : "en", + "strings" : { + "—" : { + "comment" : "A placeholder string.", + "isCommentAutoGenerated" : true }, - "%@ remaining": { - "extractionState": "manual", - "comment": "Lifecycle bar detail: active time remaining" + "(%@)" : { + }, - "%@ until ready": { - "extractionState": "manual", - "comment": "Lifecycle bar detail: warmup time remaining" + "%@ remaining" : { + "comment" : "Lifecycle bar detail: active time remaining", + "extractionState" : "manual" }, - "8-character hex (little-endian)": { - "extractionState": "manual", - "comment": "Receiver ID field placeholder" + "%@ until ready" : { + "comment" : "Lifecycle bar detail: warmup time remaining", + "extractionState" : "manual" }, - "Activated": { - "extractionState": "manual", - "comment": "Sensor activation date row label" + "%@/min" : { + }, - "Apply a new Sensor": { - "extractionState": "manual", - "comment": "Apply-sensor screen title" + "%1$@'s algorithm was designed and tuned against CGMs that emit a new reading every 5 minutes. With this setting on, %1$@ receives a new reading from the FreeStyle Libre 3 every minute instead." : { + "comment" : "Minute-by-minute warning paragraph 1 (1: appName)", + "extractionState" : "manual" }, - "Authenticating with sensor…": { - "extractionState": "manual", - "comment": "Pairing status: handshaking" + "• Dosing decisions may shift sooner or further than what %1$@'s review and tuning guidance assumes." : { + "comment" : "Minute-by-minute warning bullet 1 (1: appName)", + "extractionState" : "manual" }, - "Avoid scars, moles, stretch marks, lumps, and insulin injection sites. Rotate sites between applications.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 1 note" + "• Trend math, retrospective correction, and momentum effects were validated at the 5-minute cadence." : { + "comment" : "Minute-by-minute warning bullet 2", + "extractionState" : "manual" }, - "Awaiting first reading": { - "extractionState": "manual", - "comment": "Lifecycle bar detail: awaiting first reading after pairing" + "• You're accepting responsibility for monitoring outcomes more closely while this is on." : { + "comment" : "Minute-by-minute warning bullet 3", + "extractionState" : "manual" }, - "BLE PIN": { - "extractionState": "manual", - "comment": "BLE PIN row label" + "8-character hex (little-endian)" : { + "comment" : "Receiver ID field placeholder", + "extractionState" : "manual" }, - "Bluetooth": { - "extractionState": "manual", - "comment": "Bluetooth address row label\n Bluetooth connection row label" + "Activated" : { + "comment" : "Sensor activation date row label", + "extractionState" : "manual" }, - "Cancel": { - "extractionState": "manual", - "comment": "Cancel button" + "Apply a new Sensor" : { + "comment" : "Apply-sensor screen title", + "extractionState" : "manual" }, - "Clinical backfill": { - "extractionState": "manual", - "comment": "Sample source: clinical backfill" + "Authenticating with sensor…" : { + "comment" : "Pairing status: handshaking", + "extractionState" : "manual" }, - "Connected": { - "extractionState": "manual", - "comment": "Connection status: connected" + "Avoid scars, moles, stretch marks, lumps, and insulin injection sites. Rotate sites between applications." : { + "comment" : "Apply-sensor help step 1 note", + "extractionState" : "manual" }, - "Connecting…": { - "extractionState": "manual", - "comment": "Connection status: connecting\n Pairing status: connecting" + "Awaiting first reading" : { + "comment" : "Lifecycle bar detail: awaiting first reading after pairing", + "extractionState" : "manual" }, - "Continue": { - "extractionState": "manual", - "comment": "Continue button" + "BLE PIN" : { + "comment" : "BLE PIN row label", + "extractionState" : "manual" }, - "Copied %d lines": { - "extractionState": "manual", - "comment": "Activity log copied confirmation" + "Bluetooth" : { + "comment" : "Bluetooth address row label\n Bluetooth connection row label", + "extractionState" : "manual" }, - "Copy log": { - "extractionState": "manual", - "comment": "Copy activity log button" + "Cancel" : { + "comment" : "Cancel button", + "extractionState" : "manual" }, - "Couldn't parse hex.": { - "extractionState": "manual", - "comment": "Receiver ID validation error: parse failure" + "Clinical backfill" : { + "comment" : "Sample source: clinical backfill", + "extractionState" : "manual" }, - "Debug Info": { - "extractionState": "manual", - "comment": "Settings section: debug info" + "Connected" : { + "comment" : "Connection status: connected", + "extractionState" : "manual" }, - "Delete": { - "extractionState": "manual", - "comment": "Delete button" + "Connecting…" : { + "comment" : "Connection status: connecting\n Pairing status: connecting", + "extractionState" : "manual" }, - "Delete CGM": { - "extractionState": "manual", - "comment": "Delete CGM button" + "Continue" : { + "comment" : "Continue button", + "extractionState" : "manual" }, - "Delete CGM?": { - "extractionState": "manual", - "comment": "Delete CGM confirmation title" + "Copied %d lines" : { + "comment" : "Activity log copied confirmation", + "extractionState" : "manual" }, - "Developer": { - "extractionState": "manual", - "comment": "Settings section: developer tools" + "Copy log" : { + "comment" : "Copy activity log button", + "extractionState" : "manual" }, - "Disconnected": { - "extractionState": "manual", - "comment": "Connection status: disconnected" + "Couldn't parse hex." : { + "comment" : "Receiver ID validation error: parse failure", + "extractionState" : "manual" }, - "Display only": { - "extractionState": "manual", - "comment": "Reading is display-only, not used for dosing" + "Debug Info" : { + "comment" : "Settings section: debug info", + "extractionState" : "manual" }, - "Do not remove the cap from the sensor applicator until you're ready to apply the sensor.": { - "extractionState": "manual", - "comment": "Apply-sensor cap instruction" + "Delete" : { + "comment" : "Delete button", + "extractionState" : "manual" }, - "Do not reuse the cap. The sterile barrier is broken once removed.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 3 note" + "Delete CGM" : { + "comment" : "Delete CGM button", + "extractionState" : "manual" }, - "Done": { - "extractionState": "manual", - "comment": "Done button" + "Delete CGM?" : { + "comment" : "Delete CGM confirmation title", + "extractionState" : "manual" }, - "Enable": { - "extractionState": "manual", - "comment": "Enable button" + "Developer" : { + "comment" : "Settings section: developer tools", + "extractionState" : "manual" }, - "Enter exactly 8 hex characters.": { - "extractionState": "manual", - "comment": "Receiver ID validation error: wrong length" + "Disconnected" : { + "comment" : "Connection status: disconnected", + "extractionState" : "manual" }, - "Enter the receiver ID this sensor was originally paired under. The sensor only accepts a switch-receiver command from the same ID it remembers — there's no way to recover without it.": { - "extractionState": "manual", - "comment": "Recovery screen explanation" + "Display only" : { + "comment" : "Reading is display-only, not used for dosing", + "extractionState" : "manual" }, - "Every realtime reading (~1/min) is sent to %1$@.": { - "extractionState": "manual", - "comment": "Forwarding footer: minute-by-minute on (1: appName)" + "Do not remove the cap from the sensor applicator until you're ready to apply the sensor." : { + "comment" : "Apply-sensor cap instruction", + "extractionState" : "manual" }, - "Example: `78563412`. If this sensor was paired with this app before, the value is shown as \"Receiver ID\" in the Debug Info section of the Libre 3 CGM settings page.": { - "extractionState": "manual", - "comment": "Receiver ID field help text" + "Do not reuse the cap. The sterile barrier is broken once removed." : { + "comment" : "Apply-sensor help step 3 note", + "extractionState" : "manual" }, - "Experimental setting": { - "extractionState": "manual", - "comment": "Minute-by-minute warning header" + "Done" : { + "comment" : "Done button", + "extractionState" : "manual" }, - "Falling quickly ⇊": { - "extractionState": "manual", - "comment": "Trend: falling quickly" + "Each entry is one decoded packet. Tap to see when it arrived and every decoded field — including the realtime frame's historical lag, which is why the embedded 5-min value is always ~17 min behind." : { + "comment" : "A footer for the LibreLoopStreamDebugView.", + "isCommentAutoGenerated" : true }, - "Falling ↘": { - "extractionState": "manual", - "comment": "Trend: falling" + "Each series is plotted by lifeCount (minutes since sensor start). Realtime current and Clinical word[5] are identical by spec — clinical dots should land on the realtime line except across reconnect gaps." : { + "comment" : "A description of the Libre 3 glucose streams.", + "isCommentAutoGenerated" : true }, - "Filter": { - "extractionState": "manual", - "comment": "Activity log filter picker label" + "Enable" : { + "comment" : "Enable button", + "extractionState" : "manual" }, - "Forwarding to %1$@": { - "extractionState": "manual", - "comment": "Sample detail section: forwarding (1: appName)\n Settings section: forwarding (1: appName)" + "Enter exactly 8 hex characters." : { + "comment" : "Receiver ID validation error: wrong length", + "extractionState" : "manual" }, - "Glucose Streams": { - "extractionState": "manual", - "comment": "Developer: glucose streams debug view" + "Enter the receiver ID this sensor was originally paired under. The sensor only accepts a switch-receiver command from the same ID it remembers — there's no way to recover without it." : { + "comment" : "Recovery screen explanation", + "extractionState" : "manual" }, - "Historical backfill": { - "extractionState": "manual", - "comment": "Sample source: historical backfill" + "Every realtime reading (~1/min) is sent to %1$@." : { + "comment" : "Forwarding footer: minute-by-minute on (1: appName)", + "extractionState" : "manual" }, - "Hold steady for a moment so the sensor seats fully against the skin.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 4 note" + "Example: `78563412`. If this sensor was paired with this app before, the value is shown as \"Receiver ID\" in the Debug Info section of the Libre 3 CGM settings page." : { + "comment" : "Receiver ID field help text", + "extractionState" : "manual" }, - "Hold the BACK of your phone against the sensor.": { - "extractionState": "manual", - "comment": "Scan-sensor help step 1 body" + "Experimental setting" : { + "comment" : "Minute-by-minute warning header", + "extractionState" : "manual" }, - "Hold the top of your phone against the sensor.": { - "extractionState": "manual", - "comment": "Scan-sensor instruction" + "Falling ↘" : { + "comment" : "Trend: falling", + "extractionState" : "manual" }, - "Hold your phone to the sensor": { - "extractionState": "manual", - "comment": "Pairing status: NFC scanning" + "Falling quickly ⇊" : { + "comment" : "Trend: falling quickly", + "extractionState" : "manual" }, - "How to apply a Sensor": { - "extractionState": "manual", - "comment": "Apply-sensor help screen title" + "Filter" : { + "comment" : "Activity log filter picker label", + "extractionState" : "manual" }, - "HOW TO APPLY A SENSOR": { - "extractionState": "manual", - "comment": "Apply-sensor help button" + "Forwarding to %1$@" : { + "comment" : "Sample detail section: forwarding (1: appName)\n Settings section: forwarding (1: appName)", + "extractionState" : "manual" }, - "How to scan a Sensor": { - "extractionState": "manual", - "comment": "Scan-sensor help screen title" + "Glucose Streams" : { + "comment" : "Developer: glucose streams debug view", + "extractionState" : "manual" }, - "HOW TO SCAN A SENSOR": { - "extractionState": "manual", - "comment": "Scan-sensor help button" + "Historical backfill" : { + "comment" : "Sample source: historical backfill", + "extractionState" : "manual" }, - "If your phone moves away, the scan will fail and you'll need to try again.": { - "extractionState": "manual", - "comment": "Scan-sensor help step 2 note" + "Hold steady for a moment so the sensor seats fully against the skin." : { + "comment" : "Apply-sensor help step 4 note", + "extractionState" : "manual" }, - "Initializing": { - "extractionState": "manual", - "comment": "CGM status highlight: waiting for first reading" + "Hold the BACK of your phone against the sensor." : { + "comment" : "Scan-sensor help step 1 body", + "extractionState" : "manual" }, - "Issue": { - "extractionState": "manual", - "comment": "Sample detail: quality issue" + "Hold the top of your phone against the sensor." : { + "comment" : "Scan-sensor instruction", + "extractionState" : "manual" }, - "Keep it still — your phone will vibrate once the sensor is paired.": { - "extractionState": "manual", - "comment": "Scan-sensor stillness instruction" + "Hold your phone to the sensor" : { + "comment" : "Pairing status: NFC scanning", + "extractionState" : "manual" }, - "Keep the phone still. Pairing takes a few seconds.": { - "extractionState": "manual", - "comment": "Scan-sensor help step 2 body" + "How to apply a Sensor" : { + "comment" : "Apply-sensor help screen title", + "extractionState" : "manual" }, - "Last attempt %@": { - "extractionState": "manual", - "comment": "Reconnect error: time of last attempt" + "HOW TO APPLY A SENSOR" : { + "comment" : "Apply-sensor help button", + "extractionState" : "manual" }, - "Last Reading": { - "extractionState": "manual", - "comment": "Settings section: last reading" + "How to scan a Sensor" : { + "comment" : "Scan-sensor help screen title", + "extractionState" : "manual" }, - "Last reading %@": { - "extractionState": "manual", - "comment": "Lifecycle bar detail: time since last reading" + "HOW TO SCAN A SENSOR" : { + "comment" : "Scan-sensor help button", + "extractionState" : "manual" }, - "Leave this off unless you understand the implications. You can turn it off again at any time.": { - "extractionState": "manual", - "comment": "Minute-by-minute warning footer" + "If your phone moves away, the scan will fail and you'll need to try again." : { + "comment" : "Scan-sensor help step 2 note", + "extractionState" : "manual" }, - "Let the area air-dry completely before applying.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 2 note" + "Initializing" : { + "comment" : "CGM status highlight: waiting for first reading", + "extractionState" : "manual" }, - "Lift the applicator straight away from your arm.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 5 body" + "Issue" : { + "comment" : "Sample detail: quality issue", + "extractionState" : "manual" }, - "Next": { - "extractionState": "manual", - "comment": "Next button" + "Keep it still — your phone will vibrate once the sensor is paired." : { + "comment" : "Scan-sensor stillness instruction", + "extractionState" : "manual" }, - "No": { - "extractionState": "manual", - "comment": "Sample detail: not sent to Loop" + "Keep the phone still. Pairing takes a few seconds." : { + "comment" : "Scan-sensor help step 2 body", + "extractionState" : "manual" }, - "No activity logged yet.": { - "extractionState": "manual", - "comment": "Empty activity log" + "Keeps the clinical channel subscribed so the clinical/raw charts update every minute. Off by default — only needed for stream inspection, and it adds per-reconnect clinical traffic. Takes effect on the next reconnect." : { + "comment" : "A description of the effect of the \"Continuous clinical stream\" toggle.", + "isCommentAutoGenerated" : true }, - "No activity matching this filter.": { - "extractionState": "manual", - "comment": "Empty filtered activity log" + "Last attempt %@" : { + "comment" : "Reconnect error: time of last attempt", + "extractionState" : "manual" }, - "No readings — replace the sensor.": { - "extractionState": "manual", - "comment": "Last reading placeholder when the sensor has failed" + "Last Reading" : { + "comment" : "Settings section: last reading", + "extractionState" : "manual" }, - "Not paired": { - "extractionState": "manual", - "comment": "Connection status: not paired" + "Last reading %@" : { + "comment" : "Lifecycle bar detail: time since last reading", + "extractionState" : "manual" }, - "Only one reading every ~5 minutes is sent to %1$@, matching the cadence other CGMs use.": { - "extractionState": "manual", - "comment": "Forwarding footer: minute-by-minute off (1: appName)" + "Leave this off unless you understand the implications. You can turn it off again at any time." : { + "comment" : "Minute-by-minute warning footer", + "extractionState" : "manual" }, - "Pair a new sensor?": { - "extractionState": "manual", - "comment": "Replace sensor confirmation title" + "Let the area air-dry completely before applying." : { + "comment" : "Apply-sensor help step 2 note", + "extractionState" : "manual" }, - "Pair new sensor": { - "extractionState": "manual", - "comment": "Pair new sensor button" + "Lift the applicator straight away from your arm." : { + "comment" : "Apply-sensor help step 5 body", + "extractionState" : "manual" }, - "Pairing": { - "extractionState": "manual", - "comment": "Pairing progress screen title" + "Lower = smoother. Realtime and Clinical word[5] should match; Embedded 5-min should be lowest." : { + "comment" : "A description of the meaning of the noise values.", + "isCommentAutoGenerated" : true }, - "Path": { - "extractionState": "manual", - "comment": "Sample detail: source path" + "Next" : { + "comment" : "Next button", + "extractionState" : "manual" }, - "Preparing…": { - "extractionState": "manual", - "comment": "Pairing status: preparing" + "No" : { + "comment" : "Sample detail: not sent to Loop", + "extractionState" : "manual" }, - "Press the applicator firmly against the prepared site.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 4 body" + "No activity logged yet." : { + "comment" : "Empty activity log", + "extractionState" : "manual" }, - "Quality": { - "extractionState": "manual", - "comment": "Sample detail section: quality" + "No activity matching this filter." : { + "comment" : "Empty filtered activity log", + "extractionState" : "manual" }, - "Rate of change": { - "extractionState": "manual", - "comment": "Sample detail: rate of change" + "No clinical raw data yet." : { + "comment" : "A placeholder text displayed when a user has not yet", + "isCommentAutoGenerated" : true }, - "Reading": { - "extractionState": "manual", - "comment": "Sample detail section: reading" + "No readings — replace the sensor." : { + "comment" : "Last reading placeholder when the sensor has failed", + "extractionState" : "manual" }, - "Realtime (live BLE)": { - "extractionState": "manual", - "comment": "Sample source: realtime" + "No reads captured yet." : { + "comment" : "A message displayed when a user has not yet captured any reads.", + "isCommentAutoGenerated" : true }, - "Reason": { - "extractionState": "manual", - "comment": "Sample detail: not-forwarded reason" + "Noise (mean |Δ| between consecutive points)" : { + "comment" : "A label displayed above a section of a view that shows", + "isCommentAutoGenerated" : true }, - "Receiver ID": { - "extractionState": "manual", - "comment": "Receiver ID field label\n Receiver ID row label" + "Not paired" : { + "comment" : "Connection status: not paired", + "extractionState" : "manual" }, - "Recent Activity": { - "extractionState": "manual", - "comment": "Settings section: recent activity log" + "Only one reading every ~5 minutes is sent to %1$@, matching the cadence other CGMs use." : { + "comment" : "Forwarding footer: minute-by-minute off (1: appName)", + "extractionState" : "manual" }, - "Recent Readings": { - "extractionState": "manual", - "comment": "Settings section: recent readings" + "Pair a new sensor?" : { + "comment" : "Replace sensor confirmation title", + "extractionState" : "manual" }, - "Reconnecting…": { - "extractionState": "manual", - "comment": "Connection status: reconnecting" + "Pair new sensor" : { + "comment" : "Pair new sensor button", + "extractionState" : "manual" }, - "Recover existing sensor": { - "extractionState": "manual", - "comment": "Recover existing sensor button\n Recovery screen title" + "Pair New Sensor" : { + "comment" : "Prominent action to pair a new sensor when the current one needs replacement" }, - "Recovery": { - "extractionState": "manual", - "comment": "Recovery screen title" + "Pairing" : { + "comment" : "Pairing progress screen title", + "extractionState" : "manual" }, - "Replace sensor": { - "extractionState": "manual", - "comment": "Lifecycle bar detail: replace sensor" + "Path" : { + "comment" : "Sample detail: source path", + "extractionState" : "manual" }, - "Replace\nSensor": { - "extractionState": "manual", - "comment": "CGM status highlight: sensor failed, replace it" + "Preparing…" : { + "comment" : "Pairing status: preparing", + "extractionState" : "manual" }, - "Rising quickly ⇈": { - "extractionState": "manual", - "comment": "Trend: rising quickly" + "Press the applicator firmly against the prepared site." : { + "comment" : "Apply-sensor help step 4 body", + "extractionState" : "manual" }, - "Rising ↗": { - "extractionState": "manual", - "comment": "Trend: rising" + "Quality" : { + "comment" : "Sample detail section: quality", + "extractionState" : "manual" }, - "Run a finger around the adhesive edge to make sure the sensor is secure.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 6 body" + "Rate of change" : { + "comment" : "Sample detail: rate of change", + "extractionState" : "manual" }, - "Sample detail": { - "extractionState": "manual", - "comment": "Sample detail screen title" + "Raw Reads (newest first)" : { + "comment" : "A label displayed above a list of raw reads.", + "isCommentAutoGenerated" : true }, - "Scan new Sensor": { - "extractionState": "manual", - "comment": "Scan-sensor screen title" + "Reading" : { + "comment" : "Sample detail section: reading", + "extractionState" : "manual" }, - "Searching for sensor over Bluetooth…": { - "extractionState": "manual", - "comment": "Pairing status: BLE searching" + "Realtime (live BLE)" : { + "comment" : "Sample source: realtime", + "extractionState" : "manual" }, - "Select a site on the back of your upper arm.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 1 body" + "Reason" : { + "comment" : "Sample detail: not-forwarded reason", + "extractionState" : "manual" }, - "Send every reading": { - "extractionState": "manual", - "comment": "Minute-by-minute warning screen title" + "Receiver ID" : { + "comment" : "Receiver ID field label\n Receiver ID row label", + "extractionState" : "manual" }, - "Send every reading (experimental)": { - "extractionState": "manual", - "comment": "Experimental minute-by-minute forwarding toggle" + "Recent Activity" : { + "comment" : "Settings section: recent activity log", + "extractionState" : "manual" }, - "Sensor": { - "extractionState": "manual", - "comment": "Sensor model row label\n Settings section: sensor" + "Recent Readings" : { + "comment" : "Settings section: recent readings", + "extractionState" : "manual" }, - "Sensor %@ paired": { - "extractionState": "manual", - "comment": "Pairing status: success with serial" + "Reconnecting…" : { + "comment" : "Connection status: reconnecting", + "extractionState" : "manual" }, - "Sensor diagnostics": { - "extractionState": "manual", - "comment": "Sample detail section: diagnostics" + "Recover existing sensor" : { + "comment" : "Recover existing sensor button\n Recovery screen title", + "extractionState" : "manual" }, - "Sensor\nExpired": { - "extractionState": "manual", - "comment": "CGM status highlight: sensor expired" + "Recovery" : { + "comment" : "Recovery screen title", + "extractionState" : "manual" }, - "Sensor\nStabilizing": { - "extractionState": "manual", - "comment": "CGM status highlight: sensor stabilizing after pairing" + "Replace\nSensor" : { + "comment" : "CGM status highlight: sensor failed, replace it", + "extractionState" : "manual" }, - "Sensor\nWarmup": { - "extractionState": "manual", - "comment": "CGM status highlight: sensor warming up" + "Replace sensor" : { + "comment" : "Lifecycle bar detail: replace sensor", + "extractionState" : "manual" }, - "Sent": { - "extractionState": "manual", - "comment": "Sample detail: sent to Loop" + "Rising ↗" : { + "comment" : "Trend: rising", + "extractionState" : "manual" }, - "Serial": { - "extractionState": "manual", - "comment": "Sensor serial row label" + "Rising quickly ⇈" : { + "comment" : "Trend: rising quickly", + "extractionState" : "manual" }, - "Show all %d": { - "extractionState": "manual", - "comment": "Expand activity log to N lines\n Expand recent readings list to N" + "Run a finger around the adhesive edge to make sure the sensor is secure." : { + "comment" : "Apply-sensor help step 6 body", + "extractionState" : "manual" }, - "Show fewer": { - "extractionState": "manual", - "comment": "Collapse activity log\n Collapse recent readings list" + "Sample detail" : { + "comment" : "Sample detail screen title", + "extractionState" : "manual" }, - "Signal\nLoss": { - "extractionState": "manual", - "comment": "CGM status highlight: signal loss" + "Scan new Sensor" : { + "comment" : "Scan-sensor screen title", + "extractionState" : "manual" }, - "Source": { - "extractionState": "manual", - "comment": "Sample detail section: source" + "Searching for sensor over Bluetooth…" : { + "comment" : "Pairing status: BLE searching", + "extractionState" : "manual" }, - "Stable →": { - "extractionState": "manual", - "comment": "Trend: stable" + "Select a site on the back of your upper arm." : { + "comment" : "Apply-sensor help step 1 body", + "extractionState" : "manual" }, - "Start pairing": { - "extractionState": "manual", - "comment": "Start pairing button" + "Send every reading" : { + "comment" : "Minute-by-minute warning screen title", + "extractionState" : "manual" }, - "STEP 1": { - "extractionState": "manual", - "comment": "Apply-sensor help step 1 title\n Scan-sensor help step 1 title" + "Send every reading (experimental)" : { + "comment" : "Experimental minute-by-minute forwarding toggle", + "extractionState" : "manual" }, - "STEP 2": { - "extractionState": "manual", - "comment": "Apply-sensor help step 2 title\n Scan-sensor help step 2 title" + "Sensor" : { + "comment" : "Sensor model row label\n Settings section: sensor", + "extractionState" : "manual" }, - "STEP 3": { - "extractionState": "manual", - "comment": "Apply-sensor help step 3 title\n Scan-sensor help step 3 title" + "Sensor\nExpired" : { + "comment" : "CGM status highlight: sensor expired", + "extractionState" : "manual" }, - "STEP 4": { - "extractionState": "manual", - "comment": "Apply-sensor help step 4 title" + "Sensor\nStabilizing" : { + "comment" : "CGM status highlight: sensor stabilizing after pairing", + "extractionState" : "manual" }, - "STEP 5": { - "extractionState": "manual", - "comment": "Apply-sensor help step 5 title" + "Sensor\nWarmup" : { + "comment" : "CGM status highlight: sensor warming up", + "extractionState" : "manual" }, - "STEP 6": { - "extractionState": "manual", - "comment": "Apply-sensor help step 6 title" + "Sensor %@ paired" : { + "comment" : "Pairing status: success with serial", + "extractionState" : "manual" }, - "Temperature (raw)": { - "extractionState": "manual", - "comment": "Sample detail: raw sensor temperature" + "Sensor diagnostics" : { + "comment" : "Sample detail section: diagnostics", + "extractionState" : "manual" }, - "The receiver ID is assigned by %1$@ when it first pairs a sensor. It's saved in this app and shown on the Libre 3 settings page — write it down if you want to re-pair this sensor after reinstalling %1$@.": { - "extractionState": "manual", - "comment": "Recovery screen footnote (1: appName)" + "Sent" : { + "comment" : "Sample detail: sent to Loop", + "extractionState" : "manual" }, - "The sensor should only be applied to the back of your upper arm.": { - "extractionState": "manual", - "comment": "Apply-sensor instruction" + "Serial" : { + "comment" : "Sensor serial row label", + "extractionState" : "manual" }, - "The sensor stays on your arm; the applicator comes off empty.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 5 note" + "Show all %d" : { + "comment" : "Expand activity log to N lines\n Expand recent readings list to N", + "extractionState" : "manual" }, - "This can change how %1$@ reacts to glucose movement compared to default behavior:": { - "extractionState": "manual", - "comment": "Minute-by-minute warning paragraph 2 (1: appName)" + "Show fewer" : { + "comment" : "Collapse activity log\n Collapse recent readings list", + "extractionState" : "manual" }, - "This removes the FreeStyle Libre 3 CGM from %1$@. You'll need to re-pair to resume readings.": { - "extractionState": "manual", - "comment": "Delete CGM confirmation message (1: appName)" + "Signal\nLoss" : { + "comment" : "CGM status highlight: signal loss", + "extractionState" : "manual" }, - "This stops monitoring the current sensor and starts pairing for a new one. The CGM stays configured with Loop.": { - "extractionState": "manual", - "comment": "Replace sensor confirmation message" + "Source" : { + "comment" : "Sample detail section: source", + "extractionState" : "manual" }, - "Time": { - "extractionState": "manual", - "comment": "Recent readings column header: time\n Sample detail: time" + "Stable →" : { + "comment" : "Trend: stable", + "extractionState" : "manual" }, - "Time (relative)": { - "extractionState": "manual", - "comment": "Sample detail: relative time" + "Start pairing" : { + "comment" : "Start pairing button", + "extractionState" : "manual" }, - "Trend": { - "extractionState": "manual", - "comment": "Recent readings column header: trend\n Sample detail: trend" + "STEP 1" : { + "comment" : "Apply-sensor help step 1 title\n Scan-sensor help step 1 title", + "extractionState" : "manual" }, - "Try again": { - "extractionState": "manual", - "comment": "Retry button" + "STEP 2" : { + "comment" : "Apply-sensor help step 2 title\n Scan-sensor help step 2 title", + "extractionState" : "manual" }, - "Twist off the cap from the sensor applicator.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 3 body" + "STEP 3" : { + "comment" : "Apply-sensor help step 3 title\n Scan-sensor help step 3 title", + "extractionState" : "manual" }, - "Value": { - "extractionState": "manual", - "comment": "Sample detail: glucose value" + "STEP 4" : { + "comment" : "Apply-sensor help step 4 title", + "extractionState" : "manual" }, - "Waiting for first reading": { - "extractionState": "manual", - "comment": "Lifecycle bar detail: waiting for first reading" + "STEP 5" : { + "comment" : "Apply-sensor help step 5 title", + "extractionState" : "manual" }, - "Waiting for first reading…": { - "extractionState": "manual", - "comment": "Last reading placeholder before the first reading" + "STEP 6" : { + "comment" : "Apply-sensor help step 6 title", + "extractionState" : "manual" }, - "Wash the site with plain soap, dry, then clean with an alcohol wipe.": { - "extractionState": "manual", - "comment": "Apply-sensor help step 2 body" + "Temperature (raw)" : { + "comment" : "Sample detail: raw sensor temperature", + "extractionState" : "manual" }, - "Yes": { - "extractionState": "manual", - "comment": "Sample detail: sent to Loop" + "The receiver ID is assigned by %1$@ when it first pairs a sensor. It's saved in this app and shown on the Libre 3 settings page — write it down if you want to re-pair this sensor after reinstalling %1$@." : { + "comment" : "Recovery screen footnote (1: appName)", + "extractionState" : "manual" }, - "Yes (display only)": { - "extractionState": "manual", - "comment": "Sample detail: sent display-only" + "The sensor should only be applied to the back of your upper arm." : { + "comment" : "Apply-sensor instruction", + "extractionState" : "manual" }, - "Your phone will vibrate when pairing succeeds.": { - "extractionState": "manual", - "comment": "Scan-sensor help step 3 body" + "The sensor stays on your arm; the applicator comes off empty." : { + "comment" : "Apply-sensor help step 5 note", + "extractionState" : "manual" }, - "• Dosing decisions may shift sooner or further than what %1$@'s review and tuning guidance assumes.": { - "extractionState": "manual", - "comment": "Minute-by-minute warning bullet 1 (1: appName)" + "This can change how %1$@ reacts to glucose movement compared to default behavior:" : { + "comment" : "Minute-by-minute warning paragraph 2 (1: appName)", + "extractionState" : "manual" }, - "• Trend math, retrospective correction, and momentum effects were validated at the 5-minute cadence.": { - "extractionState": "manual", - "comment": "Minute-by-minute warning bullet 2" + "This removes the FreeStyle Libre 3 CGM from %1$@. You'll need to re-pair to resume readings." : { + "comment" : "Delete CGM confirmation message (1: appName)", + "extractionState" : "manual" }, - "• You're accepting responsibility for monitoring outcomes more closely while this is on.": { - "extractionState": "manual", - "comment": "Minute-by-minute warning bullet 3" + "This stops monitoring the current sensor and starts pairing for a new one. The CGM stays configured with Loop." : { + "comment" : "Replace sensor confirmation message", + "extractionState" : "manual" + }, + "Time" : { + "comment" : "Recent readings column header: time\n Sample detail: time", + "extractionState" : "manual" + }, + "Time (relative)" : { + "comment" : "Sample detail: relative time", + "extractionState" : "manual" + }, + "Trend" : { + "comment" : "Recent readings column header: trend\n Sample detail: trend", + "extractionState" : "manual" + }, + "Try again" : { + "comment" : "Retry button", + "extractionState" : "manual" + }, + "Twist off the cap from the sensor applicator." : { + "comment" : "Apply-sensor help step 3 body", + "extractionState" : "manual" + }, + "Value" : { + "comment" : "Sample detail: glucose value", + "extractionState" : "manual" + }, + "Waiting for first reading" : { + "comment" : "Lifecycle bar detail: waiting for first reading", + "extractionState" : "manual" + }, + "Waiting for first reading…" : { + "comment" : "Last reading placeholder before the first reading", + "extractionState" : "manual" + }, + "Waiting for stream data…" : { + "comment" : "A placeholder text displayed when no glucose data is", + "isCommentAutoGenerated" : true + }, + "Wash the site with plain soap, dry, then clean with an alcohol wipe." : { + "comment" : "Apply-sensor help step 2 body", + "extractionState" : "manual" + }, + "Yes" : { + "comment" : "Sample detail: sent to Loop", + "extractionState" : "manual" + }, + "Yes (display only)" : { + "comment" : "Sample detail: sent display-only", + "extractionState" : "manual" + }, + "Your phone will vibrate when pairing succeeds." : { + "comment" : "Scan-sensor help step 3 body", + "extractionState" : "manual" } }, - "version": "1.0" -} + "version" : "1.1" +} \ No newline at end of file