From 487eb6970cbd69a5da682faa44b58204d710fb0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 14 Aug 2026 05:02:49 +0200 Subject: [PATCH 01/16] Polish the copy the audit flagged across all six locales - Singular variants for the bulk-delete toast and confirm dialog (measurements + mood); the call sites branch on a count of one. - Consent confirm buttons shortened so they no longer overflow the small button on phones. - Workouts empty-state CTA is source-neutral instead of assuming an iPhone with Apple Health. - "Pills" is no longer a navigation term in a medication app: DE says Navigations-Chips, EN chips, PL chipy; ES/FR/IT subtitles align with their own established terms. - Health-score insufficient hint drops the translationese and fixes the pronoun. - Side-effect tag helper uses the established Stimmungs-Tags term. - Success toasts that are single fragments lose the terminal period (37 keys, all locales). - Integration pill parked state short enough to survive truncation. - The iPhone-managed reminder badge carries a short label; the full sentence moved to a helper line below instead of clipping mid-word. --- messages/de.json | 109 ++++++++++-------- messages/en.json | 105 +++++++++-------- messages/es.json | 93 ++++++++------- messages/fr.json | 93 ++++++++------- messages/it.json | 93 ++++++++------- messages/pl.json | 105 +++++++++-------- .../measurements/measurement-list.tsx | 24 ++-- .../sections/notifications-section.tsx | 12 +- src/components/mood/mood-list.tsx | 35 ++++-- .../__tests__/oauth-provider-card.test.tsx | 2 +- 10 files changed, 371 insertions(+), 300 deletions(-) diff --git a/messages/de.json b/messages/de.json index 4e2c2468d..144d7869b 100644 --- a/messages/de.json +++ b/messages/de.json @@ -560,7 +560,7 @@ "viewAll": "Alle anzeigen", "empty": { "title": "Noch keine Workouts", - "cta": "Öffne die Apple-Health-App auf dem iPhone, damit Workouts hier erscheinen." + "cta": "Verbinde eine Datenquelle in den Einstellungen, damit Workouts hier erscheinen." } }, "metric": { @@ -729,9 +729,12 @@ "sourceWhoop": "WHOOP", "sourceFitbit": "Fitbit", "bulkDeleteSuccess": "{count} Messwerte gelöscht", + "bulkDeleteSuccessOne": "Messwert gelöscht", "bulkDeleteError": "Fehler beim Löschen der ausgewählten Messungen", "bulkDeleteConfirmTitle": "{count} Messwerte löschen?", + "bulkDeleteConfirmTitleOne": "Diesen Messwert löschen?", "bulkDeleteConfirmBody": "Die {count} ausgewählten Messungen werden gelöscht. Direkt danach kannst du das kurz rückgängig machen.", + "bulkDeleteConfirmBodyOne": "Die ausgewählte Messung wird gelöscht. Direkt danach kannst du das kurz rückgängig machen.", "typePhq9Score": "PHQ-9-Wert", "typeGad7Score": "GAD-7-Wert", "typeGripStrength": "Griffstärke", @@ -879,9 +882,12 @@ "sourceTelegram": "Telegram", "sourceDaylio": "Daylio", "bulkDeleteSuccess": "{count} Einträge gelöscht", + "bulkDeleteSuccessOne": "Eintrag gelöscht", "bulkDeleteError": "Fehler beim Löschen der ausgewählten Einträge", "bulkDeleteConfirmTitle": "{count} Einträge löschen?", + "bulkDeleteConfirmTitleOne": "Diesen Eintrag löschen?", "bulkDeleteConfirmBody": "Die {count} ausgewählten Stimmungseinträge werden gelöscht. Direkt danach kannst du das kurz rückgängig machen.", + "bulkDeleteConfirmBodyOne": "Der ausgewählte Stimmungseintrag wird gelöscht. Direkt danach kannst du das kurz rückgängig machen.", "customize": "Stimmungs-Tags anpassen", "addTagInline": "Tag hinzufügen", "manage": { @@ -1599,7 +1605,7 @@ "siteThighRight": "Rechter Oberschenkel", "siteUpperArmLeft": "Linker Oberarm", "siteUpperArmRight": "Rechter Oberarm", - "sideEffectTagsHelp": "Tippe einen Chip, um ihn zu den Mood-Tags hinzuzufügen.", + "sideEffectTagsHelp": "Tippe einen Chip, um ihn zu den Stimmungs-Tags hinzuzufügen.", "sideEffectTagNausea": "Übelkeit", "sideEffectTagConstipation": "Verstopfung", "sideEffectTagDiarrhea": "Durchfall", @@ -1779,7 +1785,8 @@ "enabledToast": "Erinnerungen aktiv", "disabledToast": "Erinnerungen aus", "toggleFailed": "Erinnerungs-Einstellung konnte nicht geändert werden.", - "clientManagedChip": "Dein iPhone steuert die Erinnerungen für dieses Medikament." + "clientManagedChip": "Vom iPhone verwaltet", + "clientManagedHint": "Dein iPhone steuert die Erinnerungen für dieses Medikament." }, "settings": { "title": "Einstellungen", @@ -1932,7 +1939,7 @@ "addQuantityHelper": "1–1000 Einheiten pro Packung oder Behälter.", "addExpiryLabel": "Ablaufdatum (optional)", "addSubmit": "Erfassen", - "addSuccess": "Bestand erfasst.", + "addSuccess": "Bestand erfasst", "addFailed": "Bestand konnte nicht erfasst werden.", "adjustButton": "Anpassen", "adjustTitle": "Behälter korrigieren", @@ -1940,11 +1947,11 @@ "adjustQuantityLabel": "Verbleibende Einheiten", "adjustHelper": "Kapazität: {total} Einheiten.", "adjustSubmit": "Speichern", - "adjustSuccess": "Bestand aktualisiert.", + "adjustSuccess": "Bestand aktualisiert", "adjustFailed": "Bestand konnte nicht aktualisiert werden.", "deleteTitle": "Packung löschen?", "deleteDescription": "Entfernt diese Packung oder diesen Behälter dauerhaft aus dem Bestand. Protokollierte Einnahmen bleiben unverändert.", - "deleteSuccess": "Bestand gelöscht.", + "deleteSuccess": "Bestand gelöscht", "deleteFailed": "Bestand konnte nicht gelöscht werden.", "containerTypeLabel": "Behälterart", "containerType": { @@ -2139,7 +2146,7 @@ "scaleToggleLabel": "Diagrammskala" }, "import": { - "resultSuccess": "{imported} Einnahmen importiert.", + "resultSuccess": "{imported} Einnahmen importiert", "resultPartial": "{imported} importiert, {skipped} übersprungen.", "resultNothing": "Nichts importiert: alle {skipped} Einträge wurden übersprungen.", "resultAlreadyRecorded": "{recorded} Einnahmen sind bereits erfasst. Es wurde nichts Neues hinzugefügt.", @@ -2400,7 +2407,7 @@ "dragHandle": "Zum Sortieren ziehen", "show": "Einblenden", "hide": "Ausblenden", - "manageInSettings": "Pills & Detailseiten in den Einstellungen verwalten", + "manageInSettings": "Chips & Detailseiten in den Einstellungen verwalten", "groupSleep": "Schlaf", "groupMood": "Stimmung", "groupEvents": "Ereignisse", @@ -2461,7 +2468,7 @@ "yellow": "Einige Bereiche brauchen Aufmerksamkeit", "red": "Mindestens ein Bereich liegt außerhalb des Referenzbereichs" }, - "insufficient": "{count} von {required} Feldern der Gesundheit haben genug aktuelle Daten. Der Score braucht {required}, mindestens eines davon körperlich gemessen.", + "insufficient": "{count} von {required} Gesundheitsbereichen haben genug aktuelle Daten. Der Score braucht {required}, mindestens einen davon körperlich gemessen.", "anatomyToggle": "Wie dieser Score zustande kommt", "notScored": "Noch nicht bewertet ({count})", "method": "Der Score ist der gleich gewichtete Mittelwert der Säulen, die für ihn zählen, auf einer Skala von 0 bis 100. Jede Säule wird an einem veröffentlichten Referenzbereich gemessen, und die schwächste Säule kann den Gesamtbereich bestimmen. Eine Säule ohne ausreichend aktuelle Daten bleibt außen vor und zählt nicht als null. Die Referenzbereiche stammen aus veröffentlichten Quellen; welche Säulen zählen, entscheidest du selbst, deshalb ist die zusammengefasste Zahl selbst kein klinischer Standard.", @@ -2787,7 +2794,7 @@ "settingsDefaultWindowLabel": "Standard-Analysezeitraum", "settingsDefaultWindowHint": "Der Coach liest pro Chat diesen Zeitraum, sofern du im Drawer-Kopf nichts anderes auswählst.", "settingsSave": "Speichern", - "settingsSaved": "Gespeichert.", + "settingsSaved": "Gespeichert", "settingsCancel": "Abbrechen", "feedbackHelpful": "Hilfreich", "feedbackUnhelpful": "Nicht ganz", @@ -4159,13 +4166,13 @@ "overviewDescription": "Abschnitte ein- oder ausblenden und ihre Reihenfolge auf der Insights-Übersicht festlegen." }, "pillOrder": { - "title": "Navigations-Pills sortieren", - "description": "Ziehe die Pills in die gewünschte Reihenfolge und blende sie über das Augensymbol ein oder aus.", + "title": "Navigations-Chips sortieren", + "description": "Ziehe die Chips in die gewünschte Reihenfolge und blende sie über das Augensymbol ein oder aus.", "dragHandle": "Verschieben", - "saveSuccess": "Reihenfolge der Pills gespeichert.", - "saveError": "Speichern der Pill-Reihenfolge fehlgeschlagen.", + "saveSuccess": "Reihenfolge der Chips gespeichert", + "saveError": "Speichern der Chip-Reihenfolge fehlgeschlagen.", "save": "Speichern", - "empty": "Noch keine Navigations-Pills verfügbar.", + "empty": "Noch keine Navigations-Chips verfügbar.", "detail": "Ausgeblendete Detailseiten verschwinden auch aus der oberen Navigation." }, "customize": "Insights anpassen", @@ -4855,9 +4862,9 @@ "resetDefaultsConfirm": "Reihenfolge zurücksetzen", "moveUp": "Nach oben", "moveDown": "Nach unten", - "saveSuccess": "Quellen-Priorität gespeichert.", + "saveSuccess": "Quellen-Priorität gespeichert", "saveError": "Quellen-Priorität konnte nicht gespeichert werden.", - "resetSuccess": "Quellen-Priorität zurückgesetzt.", + "resetSuccess": "Quellen-Priorität zurückgesetzt", "perMetricToggle": "Pro Metrik anpassen ({count})", "perMetricHelp": "Metriken mit individueller Reihenfolge. Über diese Liste lässt sich eine einzelne Metrik mit einem Klick auf den Standard zurücksetzen, ohne die anderen anzufassen.", "perMetricEmpty": "Keine individuellen Anpassungen — jede Metrik nutzt die globale Reihenfolge oben.", @@ -5026,7 +5033,7 @@ "failed": "Der Import ist fehlgeschlagen. Bitte erneut versuchen.", "readFailed": "Diese Datei konnte nicht gelesen werden.", "resultSummary": "{measurements} Messwerte und {moods} Stimmungseinträge importiert, {skipped} übersprungen.", - "resultSuccess": "{measurements} Messwerte und {moods} Stimmungseinträge importiert.", + "resultSuccess": "{measurements} Messwerte und {moods} Stimmungseinträge importiert", "resultNothing": "Nichts importiert. Alle {skipped} Einträge wurden übersprungen.", "resultEmpty": "Diese Datei enthielt weder Messwerte noch Stimmungseinträge." }, @@ -5050,10 +5057,10 @@ "previewSummary": "Vorschau: {inserted} würden importiert, {skipped} übersprungen.", "resultSummary": "{inserted} neu importiert und {updated} aktualisiert, {skipped} übersprungen.", "rowError": "Zeile {line}: {reason}", - "resultSuccess": "{inserted} neu importiert und {updated} aktualisiert.", + "resultSuccess": "{inserted} neu importiert und {updated} aktualisiert", "resultNothing": "Nichts importiert. Alle {skipped} Zeilen wurden übersprungen.", "resultEmpty": "Diese Datei hat eine Kopfzeile, aber keine Datenzeilen.", - "previewSuccess": "Vorschau: {inserted} würden importiert.", + "previewSuccess": "Vorschau: {inserted} würden importiert", "previewNothing": "Vorschau: nichts würde importiert. Alle {skipped} Zeilen würden übersprungen.", "skipGroupOne": "{count} Zeile übersprungen: {reason}", "skipGroupFew": "{count} Zeilen übersprungen: {reason}", @@ -5145,8 +5152,8 @@ }, "insights": { "title": "Insights", - "description": "Reihenfolge der Übersicht und der Navigations-Pills.", - "subtitle": "Ordne die Übersichts-Bereiche und die Reihenfolge der Pills an." + "description": "Reihenfolge der Übersicht und der Navigations-Chips.", + "subtitle": "Ordne die Übersichts-Bereiche und die Reihenfolge der Chips an." }, "medications": { "title": "Medikamente", @@ -5175,7 +5182,7 @@ }, "modules": { "title": "Module", - "saved": "Gespeichert.", + "saved": "Gespeichert", "error": "Konnte nicht gespeichert werden. Bitte erneut versuchen.", "toggleable": { "title": "Was du trackst", @@ -5223,7 +5230,7 @@ "use": "Verwenden", "select": "Auswählen", "saveError": "Änderung konnte nicht gespeichert werden.", - "homeSaved": "Heimatort gespeichert.", + "homeSaved": "Heimatort gespeichert", "travelAdded": "Ortszeitraum hinzugefügt.", "travelRemoved": "Ortszeitraum entfernt.", "backfillQueued": "Nacherfassung eingeplant.", @@ -5280,7 +5287,7 @@ "current": "Deine gespeicherte Auswahl" }, "save": "Speichern", - "saved": "Gespeichert.", + "saved": "Gespeichert", "error": "Konnte nicht gespeichert werden. Bitte versuche es erneut.", "loadFailed": "Deine Auswahl konnte nicht geladen werden.", "eligibilityFailed": "Es ließ sich nicht prüfen, für welche Bereiche gerade Daten vorliegen. Die Schalter unten funktionieren trotzdem.", @@ -5318,7 +5325,7 @@ "auto": "Automatisch (Sprache)", "h24": "24 Stunden", "h12": "12 Stunden (AM/PM)", - "saved": "Stundenformat gespeichert.", + "saved": "Stundenformat gespeichert", "saveError": "Speichern des Stundenformats fehlgeschlagen." }, "dateFormat": { @@ -5328,7 +5335,7 @@ "dmy": "TT.MM.JJJJ", "mdy": "MM/TT/JJJJ", "ymd": "JJJJ-MM-TT", - "saved": "Datumsformat gespeichert.", + "saved": "Datumsformat gespeichert", "saveError": "Speichern des Datumsformats fehlgeschlagen." }, "username": "Nutzername", @@ -5622,7 +5629,7 @@ "clearBody": "Entfernt nur den Freitext. Allergien und Unverträglichkeiten bleiben unverändert.", "clearConfirm": "Notiz leeren", "save": "Speichern", - "savedToast": "Über-mich-Notiz gespeichert.", + "savedToast": "Über-mich-Notiz gespeichert", "clearedToast": "Über-mich-Notiz gelöscht.", "saveError": "Speichern fehlgeschlagen. Bitte versuche es erneut.", "loadError": "Die Notiz konnte nicht geladen werden.", @@ -5644,14 +5651,14 @@ "title": "Dokumente automatisch mit KI lesen", "subLabel": "Dokumente werden von deinem konfigurierten KI-Anbieter gelesen und indiziert, ohne dass du jedes Dokument einzeln bestätigen musst.", "honesty": "Wenn aktiviert, wird jedes hochgeladene Dokument an deinen konfigurierten KI-Anbieter gesendet, um gelesen, beschrieben und für die Suche indiziert zu werden – ohne Bestätigung pro Dokument. Das Einschalten wirkt außerdem rückwirkend: Bereits hochgeladene Dokumente ohne Zusammenfassung werden ebenfalls gesendet, bis zu 200 pro Einschaltvorgang. Das geschieht auf dem Server, und der Inhalt des Dokuments verlässt dabei diese Maschine in Richtung dieses Anbieters. Wenn dein konfigurierter Anbieter eine Abo-Verbindung ist (ein angemeldetes KI-Konto statt eines API-Schlüssels), gelten dessen eigene Datenschutzeinstellungen – Abo-Anbieter dürfen den Inhalt zur Verbesserung ihrer Modelle verwenden, und kein Auftragsverarbeitungsvertrag deckt das ab. Dokumente, die von einem selbst gehosteten lokalen Modell gelesen werden, verlassen deinen Server nie. Standardmäßig aus; aktiviere es nur, wenn du diesen Kompromiss für deine Dokumente akzeptierst.", - "confirm": "Ich verstehe – automatisches KI-Lesen aktivieren", + "confirm": "Verstanden — aktivieren", "cancel": "Abbrechen" }, "centralCodex": { "title": "Gemeinsamen KI-Zugang des Servers nutzen", "subLabel": "Leite KI-Anfragen über die vom Betreiber für diesen Server eingerichtete Verbindung — zusätzlich zu deinen eigenen Anbietern als Rückfallebene.", "honesty": "Der gemeinsame Zugang ist ein einzelnes angemeldetes KI-Konto, das der Betreiber für alle auf diesem Server verbunden hat — nicht dein eigener Schlüssel. Anfragen darüber werden vom Anbieter standardmäßig zum Training genutzt und von keiner Auftragsverarbeitungsvereinbarung gedeckt, die Stunden- und Wochenlimits des Kontos teilst du dir mit allen anderen, die zugestimmt haben, und deine eigenen Anbieter werden weiterhin zuerst versucht. Aktiviere es nur, wenn du diesen Kompromiss akzeptierst.", - "confirm": "Verstanden — gemeinsame Verbindung nutzen", + "confirm": "Verstanden — Verbindung nutzen", "cancel": "Abbrechen" }, "consent": { @@ -5673,7 +5680,7 @@ "description": "Lege fest, wie Distanzen und Geschwindigkeiten in Diagrammen und Kacheln angezeigt werden.", "metric": "Metrisch", "imperial": "Imperial", - "saved": "Einheiten-Einstellung gespeichert.", + "saved": "Einheiten-Einstellung gespeichert", "saveError": "Einheiten-Einstellung konnte nicht gespeichert werden." } }, @@ -5861,7 +5868,7 @@ "errorReconnect": "Fehler — neu verbinden", "warningServerError": "Sync fehlgeschlagen", "failureCount": "{count}/{threshold}", - "parkedReconnect": "Pausiert — manuell wieder verbinden", + "parkedReconnect": "Pausiert — neu verbinden", "notConnected": "Nicht verbunden", "justNow": "gerade eben", "minutesAgo": "vor {count} min", @@ -6038,7 +6045,7 @@ "expiryInvalid": "Die Gültigkeit muss zwischen 1 und {max} Tagen liegen.", "create": "Link erstellen", "tokenCreated": "Freigabe-Link erstellt", - "copied": "In die Zwischenablage kopiert.", + "copied": "In die Zwischenablage kopiert", "activeTitle": "Aktive Links", "noActive": "Keine aktiven Freigabe-Links.", "created": "Erstellt", @@ -6190,7 +6197,7 @@ "revokeSession": "Abmelden", "revokeError": "Anfrage konnte nicht abgeschlossen werden. Bitte erneut versuchen.", "signOutEverywhere": "Überall sonst abmelden", - "signOutEverywhereDone": "{count} andere Sitzung(en) abgemeldet.", + "signOutEverywhereDone": "{count} andere Sitzung(en) abgemeldet", "activityTitle": "Sicherheitsaktivität", "activityDescription": "Letzte Anmeldungen, Sicherheitsänderungen und Datenexporte deines Kontos.", "activityEmpty": "Noch keine Sicherheitsaktivität.", @@ -6271,7 +6278,7 @@ "revokeError": "Gerät konnte nicht entfernt werden. Bitte erneut versuchen.", "revoke": "Entfernen", "revokeAll": "Alle Geräte vergessen", - "revokeAllDone": "{count} vertrauenswürdige(s) Gerät(e) entfernt.", + "revokeAllDone": "{count} vertrauenswürdige(s) Gerät(e) entfernt", "unnamed": "Unbekanntes Gerät", "current": "Dieses Gerät", "expires": "Vertraut bis {date}", @@ -6596,13 +6603,13 @@ "maxUsesLabel": "Maximale Nutzungen", "maxUsesHint": "Wie viele Registrierungen dieser Link zulässt (1–50).", "createConfirm": "Einladung erstellen", - "createdToast": "Einladung erstellt.", + "createdToast": "Einladung erstellt", "createError": "Einladung konnte nicht erstellt werden.", "tokenTitle": "Einladungslink", "tokenOnceHint": "Nur jetzt kopierbar — kopiere den Link oder lass den QR-Code scannen.", "hashExplainer": "Gespeichert wird nur ein Hash des Links — er kann später nicht erneut angezeigt werden. Geht er verloren: Einladung widerrufen und neu erstellen.", "copyLink": "Link kopieren", - "copiedToast": "Link kopiert.", + "copiedToast": "Link kopiert", "copyError": "Kopieren fehlgeschlagen.", "qrAlt": "QR-Code des Einladungslinks", "loadError": "Einladungen konnten nicht geladen werden.", @@ -7345,7 +7352,7 @@ "saveError": "Speichern fehlgeschlagen. Bitte später erneut versuchen.", "hourLabel": "Erinnerungszeit", "hourAria": "Stunde der Stimmungs-Erinnerung", - "hourSavedToast": "Erinnerungszeit aktualisiert.", + "hourSavedToast": "Erinnerungszeit aktualisiert", "detail": "Greift nur auf bereits eingerichtete Kanäle (Telegram, ntfy, Web Push, Apple Push) zurück und schweigt, sobald du heute geloggt hast." }, "coachNudge": { @@ -7386,8 +7393,8 @@ "leadLabel": "Vorlaufzeit zum Nachbestellen (Tage)", "leadAria": "Vorlaufzeit zum Nachbestellen in Tagen", "leadHelp": "Die Warnung kommt um so viele Tage plus ein Dosisintervall früher, damit der Nachschub vor deiner letzten Dosis eintrifft. Ein einzelnes Medikament kann diesen Wert auf seinem Bestand-Tab überschreiben.", - "leadSavedToast": "Vorlaufzeit gespeichert.", - "savedToast": "Vorratsschwelle gespeichert.", + "leadSavedToast": "Vorlaufzeit gespeichert", + "savedToast": "Vorratsschwelle gespeichert", "enabledToast": "Vorratswarnungen aktiviert.", "disabledToast": "Vorratswarnungen deaktiviert.", "saveError": "Speichern fehlgeschlagen. Bitte später erneut versuchen.", @@ -8047,10 +8054,10 @@ "protected": "Ob beim Verkehr verhütet wurde.", "protectedLabel": "Was bedeutet geschützt?" }, - "saveSuccess": "Eintrag gespeichert.", - "deleteSuccess": "Eintrag gelöscht.", - "periodStartSaved": "Periodenbeginn gespeichert.", - "periodEndSaved": "Periodenende gespeichert.", + "saveSuccess": "Eintrag gespeichert", + "deleteSuccess": "Eintrag gelöscht", + "periodStartSaved": "Periodenbeginn gespeichert", + "periodEndSaved": "Periodenende gespeichert", "startedPeriodOnDate": "Periode hat an diesem Tag begonnen", "endedPeriodOnDate": "Periode an diesem Tag beendet" }, @@ -9311,7 +9318,7 @@ "freeText": { "label": "Freitext-Ergänzung (Allergien & Unverträglichkeiten)", "hint": "Eine Freitext-Ergänzung zur strukturierten Liste oben, für Kontext, den ein einzelner Eintrag nicht abbilden kann.", - "savedToast": "Allergie-Notiz gespeichert.", + "savedToast": "Allergie-Notiz gespeichert", "saveError": "Speichern fehlgeschlagen. Bitte versuche es erneut." } }, @@ -9370,7 +9377,7 @@ "conditionsLabel": "Chronische Erkrankungen", "focusLabel": "Worauf der Coach achtet", "loadError": "Vorerkrankungen konnten nicht geladen werden.", - "savedToast": "Erkrankungen gespeichert.", + "savedToast": "Erkrankungen gespeichert", "saveError": "Speichern fehlgeschlagen. Bitte versuche es erneut." }, "emergency": { @@ -9474,7 +9481,7 @@ }, "toast": { "duplicate": "Bereits gespeichert — das vorhandene Dokument wird hervorgehoben.", - "deleted": "Dokument gelöscht.", + "deleted": "Dokument gelöscht", "restoreFailed": "Das Dokument konnte nicht wiederhergestellt werden." }, "timeline": { @@ -9647,9 +9654,9 @@ "unverifiedNoteOther": "{count} Werte müssen noch geprüft werden und bleiben offen.", "finish": "Prüfung abschließen", "confirmFailed": "Die Prüfung konnte nicht gespeichert werden. Versuche es erneut.", - "savedToastOne": "1 Wert gespeichert.", - "savedToastFew": "{count} Werte gespeichert.", - "savedToastOther": "{count} Werte gespeichert.", + "savedToastOne": "1 Wert gespeichert", + "savedToastFew": "{count} Werte gespeichert", + "savedToastOther": "{count} Werte gespeichert", "nothingSavedToast": "Prüfung gespeichert. Es wurden keine Werte übernommen.", "extract": "Laborwerte auslesen", "extracting": "Liest aus…", @@ -10190,7 +10197,7 @@ "errorRateLimit": "Zu viele Profile in der letzten Stunde angelegt. Warte etwas und versuche es erneut." }, "toast": { - "savedTo": "In der Akte von {name} gespeichert." + "savedTo": "In der Akte von {name} gespeichert" }, "activityVerb": { "measurementCreate": "{name} hat einen Messwert eingetragen", diff --git a/messages/en.json b/messages/en.json index 9ac68943d..757706fb8 100644 --- a/messages/en.json +++ b/messages/en.json @@ -560,7 +560,7 @@ "viewAll": "View all", "empty": { "title": "No workouts yet", - "cta": "Open Apple Health on your iPhone to sync workouts here." + "cta": "Connect a data source in Settings to see workouts here." } }, "metric": { @@ -729,9 +729,12 @@ "sourceWhoop": "WHOOP", "sourceFitbit": "Fitbit", "bulkDeleteSuccess": "{count} measurements deleted", + "bulkDeleteSuccessOne": "Measurement deleted", "bulkDeleteError": "Error deleting the selected measurements", "bulkDeleteConfirmTitle": "Delete {count} measurements?", + "bulkDeleteConfirmTitleOne": "Delete this measurement?", "bulkDeleteConfirmBody": "The {count} selected measurements will be deleted. You can undo this for a short moment afterwards.", + "bulkDeleteConfirmBodyOne": "The selected measurement will be deleted. You can undo this for a short moment afterwards.", "typePhq9Score": "PHQ-9 score", "typeGad7Score": "GAD-7 score", "typeGripStrength": "Grip strength", @@ -879,9 +882,12 @@ "sourceTelegram": "Telegram", "sourceDaylio": "Daylio", "bulkDeleteSuccess": "{count} entries deleted", + "bulkDeleteSuccessOne": "Entry deleted", "bulkDeleteError": "Error deleting the selected entries", "bulkDeleteConfirmTitle": "Delete {count} entries?", + "bulkDeleteConfirmTitleOne": "Delete this entry?", "bulkDeleteConfirmBody": "The {count} selected mood entries will be deleted. You can undo this for a short moment afterwards.", + "bulkDeleteConfirmBodyOne": "The selected mood entry will be deleted. You can undo this for a short moment afterwards.", "customize": "Customize mood tags", "addTagInline": "Add tag", "manage": { @@ -1779,7 +1785,8 @@ "enabledToast": "Reminders on", "disabledToast": "Reminders off", "toggleFailed": "Could not change the reminder setting.", - "clientManagedChip": "Your iPhone manages reminders for this medication." + "clientManagedChip": "Managed by iPhone", + "clientManagedHint": "Your iPhone manages reminders for this medication." }, "settings": { "title": "Settings", @@ -1932,7 +1939,7 @@ "addQuantityHelper": "1–1000 units per pack or container.", "addExpiryLabel": "Expiry date (optional)", "addSubmit": "Register", - "addSuccess": "Supply registered.", + "addSuccess": "Supply registered", "addFailed": "The supply could not be registered.", "adjustButton": "Adjust", "adjustTitle": "Correct container", @@ -1940,11 +1947,11 @@ "adjustQuantityLabel": "Remaining units", "adjustHelper": "Capacity: {total} units.", "adjustSubmit": "Save", - "adjustSuccess": "Stock updated.", + "adjustSuccess": "Stock updated", "adjustFailed": "The stock could not be updated.", "deleteTitle": "Delete container?", "deleteDescription": "Permanently removes this pack or container from the stock. Logged intakes stay unchanged.", - "deleteSuccess": "Stock entry deleted.", + "deleteSuccess": "Stock entry deleted", "deleteFailed": "The stock entry could not be deleted.", "containerTypeLabel": "Container type", "containerType": { @@ -2139,7 +2146,7 @@ "scaleToggleLabel": "Chart scale" }, "import": { - "resultSuccess": "{imported} intakes imported.", + "resultSuccess": "{imported} intakes imported", "resultPartial": "{imported} imported, {skipped} skipped.", "resultNothing": "Nothing was imported: all {skipped} entries were skipped.", "resultAlreadyRecorded": "{recorded} intakes are already recorded. Nothing new was added.", @@ -2402,7 +2409,7 @@ "dragHandle": "Drag to reorder", "show": "Show", "hide": "Hide", - "manageInSettings": "Manage pills & detail pages in Settings", + "manageInSettings": "Manage chips & detail pages in Settings", "groupSleep": "Sleep", "groupMood": "Mood", "groupEvents": "Events", @@ -2787,7 +2794,7 @@ "settingsDefaultWindowLabel": "Default analysis window", "settingsDefaultWindowHint": "The Coach reads this much history per chat unless you override it from the drawer header.", "settingsSave": "Save", - "settingsSaved": "Saved.", + "settingsSaved": "Saved", "settingsCancel": "Cancel", "feedbackHelpful": "Helpful", "feedbackUnhelpful": "Not quite", @@ -4159,13 +4166,13 @@ "overviewDescription": "Show or hide sections and set their order on the Insights overview." }, "pillOrder": { - "title": "Sort the navigation pills", - "description": "Drag the pills into the order you want and show or hide them via the eye icon.", + "title": "Sort the navigation chips", + "description": "Drag the chips into the order you want and show or hide them via the eye icon.", "dragHandle": "Reorder", - "saveSuccess": "Pill order saved.", - "saveError": "Saving the pill order failed.", + "saveSuccess": "Chip order saved", + "saveError": "Saving the chip order failed.", "save": "Save", - "empty": "No navigation pills available yet.", + "empty": "No navigation chips available yet.", "detail": "Hidden detail pages are also removed from the top navigation." }, "customize": "Customize Insights", @@ -4855,9 +4862,9 @@ "resetDefaultsConfirm": "Reset order", "moveUp": "Move up", "moveDown": "Move down", - "saveSuccess": "Source priority saved.", + "saveSuccess": "Source priority saved", "saveError": "Saving the source priority failed.", - "resetSuccess": "Source priority reset to defaults.", + "resetSuccess": "Source priority reset to defaults", "perMetricToggle": "Per-metric overrides ({count})", "perMetricHelp": "Metrics you have customised away from the default ladder. Use this list to roll any single metric back to its constant default without touching the rest.", "perMetricEmpty": "No per-metric overrides set — every metric uses the global ladder above.", @@ -5026,7 +5033,7 @@ "failed": "The import failed. Please try again.", "readFailed": "Couldn't read that file.", "resultSummary": "Imported {measurements} measurements and {moods} mood entries, {skipped} skipped.", - "resultSuccess": "Imported {measurements} measurements and {moods} mood entries.", + "resultSuccess": "Imported {measurements} measurements and {moods} mood entries", "resultNothing": "Nothing was imported. All {skipped} entries were skipped.", "resultEmpty": "That file carried no measurements and no mood entries." }, @@ -5050,10 +5057,10 @@ "previewSummary": "Preview: {inserted} would import, {skipped} skipped.", "resultSummary": "Imported {inserted} new and updated {updated}, {skipped} skipped.", "rowError": "Line {line}: {reason}", - "resultSuccess": "Imported {inserted} new and updated {updated}.", + "resultSuccess": "Imported {inserted} new and updated {updated}", "resultNothing": "Nothing was imported. All {skipped} rows were skipped.", "resultEmpty": "That file has a header but no data rows.", - "previewSuccess": "Preview: {inserted} would import.", + "previewSuccess": "Preview: {inserted} would import", "previewNothing": "Preview: nothing would import. All {skipped} rows would be skipped.", "skipGroupOne": "{count} row skipped: {reason}", "skipGroupFew": "{count} rows skipped: {reason}", @@ -5145,8 +5152,8 @@ }, "insights": { "title": "Insights", - "description": "Overview and navigation-pill order.", - "subtitle": "Arrange your overview sections and pill order." + "description": "Overview and navigation-chip order.", + "subtitle": "Arrange your overview sections and chip order." }, "medications": { "title": "Medications", @@ -5175,7 +5182,7 @@ }, "modules": { "title": "Modules", - "saved": "Saved.", + "saved": "Saved", "error": "Couldn't save. Please try again.", "toggleable": { "title": "What you track", @@ -5223,7 +5230,7 @@ "use": "Use", "select": "Select", "saveError": "Could not save your change.", - "homeSaved": "Home location saved.", + "homeSaved": "Home location saved", "travelAdded": "Location period added.", "travelRemoved": "Location period removed.", "backfillQueued": "Backfill queued.", @@ -5280,7 +5287,7 @@ "current": "Your saved selection" }, "save": "Save", - "saved": "Saved.", + "saved": "Saved", "error": "Couldn't save. Please try again.", "loadFailed": "Couldn't load your selection.", "eligibilityFailed": "Couldn't check which pillars currently have data. The switches below still work.", @@ -5318,7 +5325,7 @@ "auto": "Automatic (language)", "h24": "24-hour", "h12": "12-hour (AM/PM)", - "saved": "Hour format saved.", + "saved": "Hour format saved", "saveError": "Saving the hour format failed." }, "dateFormat": { @@ -5328,7 +5335,7 @@ "dmy": "DD.MM.YYYY", "mdy": "MM/DD/YYYY", "ymd": "YYYY-MM-DD", - "saved": "Date format saved.", + "saved": "Date format saved", "saveError": "Saving the date format failed." }, "username": "Username", @@ -5622,7 +5629,7 @@ "clearBody": "This removes the free-text note only. Your allergies and intolerances stay exactly as they are.", "clearConfirm": "Clear note", "save": "Save", - "savedToast": "About-me note saved.", + "savedToast": "About-me note saved", "clearedToast": "About-me note cleared.", "saveError": "Could not save. Please try again.", "loadError": "The note could not be loaded.", @@ -5644,14 +5651,14 @@ "title": "Read documents automatically with AI", "subLabel": "Documents are read and indexed by your configured AI provider without a per-document tap.", "honesty": "When on, each document you upload is sent to your configured AI provider to be read, described, and indexed for search — with no per-document confirmation. Turning it on also reaches backwards: documents you have already uploaded that carry no summary yet are sent too, up to 200 each time you switch it on. This happens on the server and the document's contents leave this machine to that provider. If your configured provider is a subscription connection (a signed-in AI account rather than an API key), that provider's own data settings apply — subscription providers may use the content to improve their models, and no data-processing agreement covers it. Documents read by a self-hosted local model never leave your server. Off by default; turn it on only if you accept this trade for your documents.", - "confirm": "I understand — turn on automatic AI reading", + "confirm": "I understand — turn on", "cancel": "Cancel" }, "centralCodex": { "title": "Use the server's shared AI access", "subLabel": "Route AI requests through the connection the operator set up for this server, alongside your own providers as a fallback.", "honesty": "The shared access is a single signed-in AI account the operator connected for everyone on this server — not your own key. Requests you make on it are trained on by the provider by default and no data-processing agreement covers them, the account's hourly and weekly limits are shared with every other user who opted in, and your own configured providers are still tried first. Turn it on only if you accept this trade.", - "confirm": "I understand — use the shared connection", + "confirm": "I understand — use connection", "cancel": "Cancel" }, "consent": { @@ -5673,7 +5680,7 @@ "description": "Choose how distances and speeds are shown across charts and tiles.", "metric": "Metric", "imperial": "Imperial", - "saved": "Unit preference saved.", + "saved": "Unit preference saved", "saveError": "Could not save your unit preference." } }, @@ -5861,7 +5868,7 @@ "errorReconnect": "Error — reconnect", "warningServerError": "Sync failing", "failureCount": "{count}/{threshold}", - "parkedReconnect": "Paused — reconnect manually", + "parkedReconnect": "Paused — reconnect", "notConnected": "Not connected", "justNow": "just now", "minutesAgo": "{count} min ago", @@ -6038,7 +6045,7 @@ "expiryInvalid": "Expiry must be between 1 and {max} days.", "create": "Create link", "tokenCreated": "Share link created", - "copied": "Copied to clipboard.", + "copied": "Copied to clipboard", "activeTitle": "Active links", "noActive": "No active share links.", "created": "Created", @@ -6190,7 +6197,7 @@ "revokeSession": "Sign out", "revokeError": "Could not complete the request. Please try again.", "signOutEverywhere": "Sign out everywhere else", - "signOutEverywhereDone": "Signed out {count} other session(s).", + "signOutEverywhereDone": "Signed out {count} other session(s)", "activityTitle": "Security activity", "activityDescription": "Recent sign-ins, security changes, and data exports on your account.", "activityEmpty": "No security activity yet.", @@ -6271,7 +6278,7 @@ "revokeError": "Could not revoke the device. Please try again.", "revoke": "Revoke", "revokeAll": "Forget all devices", - "revokeAllDone": "Forgot {count} trusted device(s).", + "revokeAllDone": "Forgot {count} trusted device(s)", "unnamed": "Unknown device", "current": "This device", "expires": "Trusted until {date}", @@ -6596,13 +6603,13 @@ "maxUsesLabel": "Maximum uses", "maxUsesHint": "How many signups this link admits (1–50).", "createConfirm": "Create invite", - "createdToast": "Invite created.", + "createdToast": "Invite created", "createError": "Could not create the invite.", "tokenTitle": "Invite link", "tokenOnceHint": "Copyable only now — copy the link or have the QR code scanned.", "hashExplainer": "Only a hash of the link is stored, so it cannot be shown again later. If it gets lost, revoke the invite and create a new one.", "copyLink": "Copy link", - "copiedToast": "Link copied.", + "copiedToast": "Link copied", "copyError": "Copy failed.", "qrAlt": "QR code for the invite link", "loadError": "Could not load the invites.", @@ -7345,7 +7352,7 @@ "saveError": "Save failed. Please try again.", "hourLabel": "Reminder time", "hourAria": "Mood reminder hour", - "hourSavedToast": "Reminder time updated.", + "hourSavedToast": "Reminder time updated", "detail": "Routes only through channels you've already configured (Telegram, ntfy, Web Push, Apple Push) and stays silent once you've logged today." }, "coachNudge": { @@ -7386,8 +7393,8 @@ "leadLabel": "Reorder lead time (days)", "leadAria": "Reorder lead time in days", "leadHelp": "The alert fires this many days plus one dose-interval earlier so a refill arrives before your last dose. A single medication can override this on its supply tab.", - "leadSavedToast": "Reorder lead time saved.", - "savedToast": "Low-stock threshold saved.", + "leadSavedToast": "Reorder lead time saved", + "savedToast": "Low-stock threshold saved", "enabledToast": "Low-stock alerts enabled.", "disabledToast": "Low-stock alerts disabled.", "saveError": "Could not save. Please try again.", @@ -8047,10 +8054,10 @@ "protected": "Whether contraception was used during intercourse.", "protectedLabel": "What does protected mean?" }, - "saveSuccess": "Entry saved.", - "deleteSuccess": "Entry deleted.", - "periodStartSaved": "Period start saved.", - "periodEndSaved": "End of period saved.", + "saveSuccess": "Entry saved", + "deleteSuccess": "Entry deleted", + "periodStartSaved": "Period start saved", + "periodEndSaved": "End of period saved", "startedPeriodOnDate": "My period started this day", "endedPeriodOnDate": "My period ended this day" }, @@ -9311,7 +9318,7 @@ "freeText": { "label": "Free-text note (allergies & intolerances)", "hint": "A free-text supplement to the structured list above, for context a single entry cannot carry.", - "savedToast": "Allergy note saved.", + "savedToast": "Allergy note saved", "saveError": "Could not save. Please try again." } }, @@ -9370,7 +9377,7 @@ "conditionsLabel": "Chronic conditions", "focusLabel": "What the Coach watches", "loadError": "Couldn't load your conditions.", - "savedToast": "Conditions saved.", + "savedToast": "Conditions saved", "saveError": "Could not save. Please try again." }, "emergency": { @@ -9474,7 +9481,7 @@ }, "toast": { "duplicate": "Already stored — highlighting the existing document.", - "deleted": "Document deleted.", + "deleted": "Document deleted", "restoreFailed": "Couldn't restore the document." }, "timeline": { @@ -9647,9 +9654,9 @@ "unverifiedNoteOther": "{count} values still need checking and stay pending.", "finish": "Finish review", "confirmFailed": "The review couldn't be saved. Try again.", - "savedToastOne": "1 value saved.", - "savedToastFew": "{count} values saved.", - "savedToastOther": "{count} values saved.", + "savedToastOne": "1 value saved", + "savedToastFew": "{count} values saved", + "savedToastOther": "{count} values saved", "nothingSavedToast": "Review saved. No values were added.", "extract": "Extract lab values", "extracting": "Extracting…", @@ -10190,7 +10197,7 @@ "errorRateLimit": "Too many profiles created in the last hour. Wait a while and try again." }, "toast": { - "savedTo": "Saved to {name}'s record." + "savedTo": "Saved to {name}'s record" }, "activityVerb": { "measurementCreate": "{name} added a reading", diff --git a/messages/es.json b/messages/es.json index b46e7ab59..36bbb67b4 100644 --- a/messages/es.json +++ b/messages/es.json @@ -560,7 +560,7 @@ "viewAll": "Ver todos", "empty": { "title": "Aún no hay entrenamientos", - "cta": "Abre la app Apple Salud en el iPhone para sincronizar los entrenamientos." + "cta": "Conecta una fuente de datos en los ajustes para ver aquí los entrenamientos." } }, "metric": { @@ -729,9 +729,12 @@ "sourceWhoop": "WHOOP", "sourceFitbit": "Fitbit", "bulkDeleteSuccess": "{count} mediciones eliminadas", + "bulkDeleteSuccessOne": "Medición eliminada", "bulkDeleteError": "Error al eliminar las mediciones seleccionadas", "bulkDeleteConfirmTitle": "¿Eliminar {count} mediciones?", + "bulkDeleteConfirmTitleOne": "¿Eliminar esta medición?", "bulkDeleteConfirmBody": "Las {count} mediciones seleccionadas se eliminarán. Justo después podrás deshacerlo durante un breve momento.", + "bulkDeleteConfirmBodyOne": "La medición seleccionada se eliminará. Justo después podrás deshacerlo durante un breve momento.", "typePhq9Score": "Puntuación PHQ-9", "typeGad7Score": "Puntuación GAD-7", "typeGripStrength": "Fuerza de agarre", @@ -879,9 +882,12 @@ "sourceTelegram": "Telegram", "sourceDaylio": "Daylio", "bulkDeleteSuccess": "{count} entradas eliminadas", + "bulkDeleteSuccessOne": "Entrada eliminada", "bulkDeleteError": "Error al eliminar las entradas seleccionadas", "bulkDeleteConfirmTitle": "¿Eliminar {count} entradas?", + "bulkDeleteConfirmTitleOne": "¿Eliminar esta entrada?", "bulkDeleteConfirmBody": "Las {count} entradas de estado de ánimo seleccionadas se eliminarán. Justo después podrás deshacerlo durante un breve momento.", + "bulkDeleteConfirmBodyOne": "La entrada de estado de ánimo seleccionada se eliminará. Justo después podrás deshacerlo durante un breve momento.", "customize": "Personalizar etiquetas de ánimo", "addTagInline": "Añadir etiqueta", "manage": { @@ -1779,7 +1785,8 @@ "enabledToast": "Recordatorios activados", "disabledToast": "Recordatorios desactivados", "toggleFailed": "No se pudo cambiar el ajuste de recordatorios.", - "clientManagedChip": "Tu iPhone gestiona los recordatorios de este medicamento." + "clientManagedChip": "Gestionado por el iPhone", + "clientManagedHint": "Tu iPhone gestiona los recordatorios de este medicamento." }, "settings": { "title": "Ajustes", @@ -1932,7 +1939,7 @@ "addQuantityHelper": "1–1000 unidades por envase o recipiente.", "addExpiryLabel": "Fecha de caducidad (opcional)", "addSubmit": "Registrar", - "addSuccess": "Existencias registradas.", + "addSuccess": "Existencias registradas", "addFailed": "No se pudieron registrar las existencias.", "adjustButton": "Ajustar", "adjustTitle": "Corregir envase", @@ -1940,11 +1947,11 @@ "adjustQuantityLabel": "Unidades restantes", "adjustHelper": "Capacidad: {total} unidades.", "adjustSubmit": "Guardar", - "adjustSuccess": "Existencias actualizadas.", + "adjustSuccess": "Existencias actualizadas", "adjustFailed": "No se pudieron actualizar las existencias.", "deleteTitle": "¿Eliminar envase?", "deleteDescription": "Elimina permanentemente este envase o recipiente de las existencias. Las tomas registradas no cambian.", - "deleteSuccess": "Entrada de existencias eliminada.", + "deleteSuccess": "Entrada de existencias eliminada", "deleteFailed": "No se pudo eliminar la entrada de existencias.", "containerTypeLabel": "Tipo de envase", "containerType": { @@ -2139,7 +2146,7 @@ "scaleToggleLabel": "Escala del gráfico" }, "import": { - "resultSuccess": "{imported} tomas importadas.", + "resultSuccess": "{imported} tomas importadas", "resultPartial": "{imported} importadas, {skipped} omitidas.", "resultNothing": "No se importó nada: se omitieron las {skipped} entradas.", "resultAlreadyRecorded": "{recorded} tomas ya están registradas. No se añadió nada nuevo.", @@ -2787,7 +2794,7 @@ "settingsDefaultWindowLabel": "Periodo de análisis por defecto", "settingsDefaultWindowHint": "El coach lee este periodo por chat, salvo que elijas otro en la cabecera del cajón.", "settingsSave": "Guardar", - "settingsSaved": "Guardado.", + "settingsSaved": "Guardado", "settingsCancel": "Cancelar", "feedbackHelpful": "Útil", "feedbackUnhelpful": "Poco útil", @@ -4162,7 +4169,7 @@ "title": "Ordenar las pestañas de navegación", "description": "Arrastra las pestañas al orden que quieras y muéstralas u ocúltalas con el icono del ojo.", "dragHandle": "Reordenar", - "saveSuccess": "Orden de las pestañas guardado.", + "saveSuccess": "Orden de las pestañas guardado", "saveError": "No se pudo guardar el orden de las pestañas.", "save": "Guardar", "empty": "Aún no hay pestañas de navegación disponibles.", @@ -4855,9 +4862,9 @@ "resetDefaultsConfirm": "Restablecer orden", "moveUp": "Subir", "moveDown": "Bajar", - "saveSuccess": "Prioridad de fuentes guardada.", + "saveSuccess": "Prioridad de fuentes guardada", "saveError": "No se pudo guardar la prioridad de fuentes.", - "resetSuccess": "Prioridad de fuentes restablecida a los valores predeterminados.", + "resetSuccess": "Prioridad de fuentes restablecida a los valores predeterminados", "perMetricToggle": "Ajustes por métrica ({count})", "perMetricHelp": "Métricas que has personalizado respecto al orden predeterminado. Usa esta lista para devolver cualquier métrica concreta a su valor predeterminado sin tocar las demás.", "perMetricEmpty": "No hay ajustes por métrica — todas las métricas usan el orden global de arriba.", @@ -5026,7 +5033,7 @@ "failed": "La importación falló. Inténtalo de nuevo.", "readFailed": "No se pudo leer ese archivo.", "resultSummary": "{measurements} mediciones y {moods} entradas de ánimo importadas, {skipped} omitidas.", - "resultSuccess": "{measurements} mediciones y {moods} entradas de ánimo importadas.", + "resultSuccess": "{measurements} mediciones y {moods} entradas de ánimo importadas", "resultNothing": "No se importó nada. Se omitieron las {skipped} entradas.", "resultEmpty": "Ese archivo no contenía mediciones ni entradas de ánimo." }, @@ -5050,10 +5057,10 @@ "previewSummary": "Vista previa: {inserted} se importarían, {skipped} omitidas.", "resultSummary": "{inserted} nuevas importadas y {updated} actualizadas, {skipped} omitidas.", "rowError": "Línea {line}: {reason}", - "resultSuccess": "{inserted} nuevas importadas y {updated} actualizadas.", + "resultSuccess": "{inserted} nuevas importadas y {updated} actualizadas", "resultNothing": "No se importó nada. Se omitieron las {skipped} filas.", "resultEmpty": "Ese archivo tiene encabezado pero ninguna fila de datos.", - "previewSuccess": "Vista previa: {inserted} se importarían.", + "previewSuccess": "Vista previa: {inserted} se importarían", "previewNothing": "Vista previa: no se importaría nada. Se omitirían las {skipped} filas.", "skipGroupOne": "{count} fila omitida: {reason}", "skipGroupFew": "{count} filas omitidas: {reason}", @@ -5146,7 +5153,7 @@ "insights": { "title": "Análisis", "description": "Orden de la vista general y de las pestañas de navegación.", - "subtitle": "Organiza las secciones de tu resumen y el orden de las píldoras." + "subtitle": "Organiza las secciones de tu resumen y el orden de las pestañas." }, "medications": { "title": "Medicamentos", @@ -5175,7 +5182,7 @@ }, "modules": { "title": "Módulos", - "saved": "Guardado.", + "saved": "Guardado", "error": "No se pudo guardar. Inténtalo de nuevo.", "toggleable": { "title": "Qué registras", @@ -5223,7 +5230,7 @@ "use": "Usar", "select": "Seleccionar", "saveError": "No se pudo guardar el cambio.", - "homeSaved": "Ubicación principal guardada.", + "homeSaved": "Ubicación principal guardada", "travelAdded": "Periodo de ubicación añadido.", "travelRemoved": "Periodo de ubicación eliminado.", "backfillQueued": "Relleno programado.", @@ -5280,7 +5287,7 @@ "current": "Tu selección guardada" }, "save": "Guardar", - "saved": "Guardado.", + "saved": "Guardado", "error": "No se pudo guardar. Inténtalo de nuevo.", "loadFailed": "No se pudo cargar tu selección.", "eligibilityFailed": "No se pudo comprobar qué pilares tienen datos ahora mismo. Los interruptores de abajo siguen funcionando.", @@ -5318,7 +5325,7 @@ "auto": "Automático (idioma)", "h24": "24 horas", "h12": "12 horas (AM/PM)", - "saved": "Formato horario guardado.", + "saved": "Formato horario guardado", "saveError": "No se pudo guardar el formato horario." }, "dateFormat": { @@ -5328,7 +5335,7 @@ "dmy": "DD.MM.AAAA", "mdy": "MM/DD/AAAA", "ymd": "AAAA-MM-DD", - "saved": "Formato de fecha guardado.", + "saved": "Formato de fecha guardado", "saveError": "No se pudo guardar el formato de fecha." }, "username": "Nombre de usuario", @@ -5622,7 +5629,7 @@ "clearBody": "Solo se elimina el texto libre. Tus alergias e intolerancias permanecen tal cual.", "clearConfirm": "Vaciar nota", "save": "Guardar", - "savedToast": "Nota «Sobre mí» guardada.", + "savedToast": "Nota «Sobre mí» guardada", "clearedToast": "Nota «Sobre mí» eliminada.", "saveError": "No se pudo guardar. Inténtalo de nuevo.", "loadError": "No se pudo cargar la nota.", @@ -5644,14 +5651,14 @@ "title": "Leer documentos automáticamente con IA", "subLabel": "Los documentos son leídos e indexados por tu proveedor de IA configurado, sin confirmar cada documento.", "honesty": "Cuando está activado, cada documento que subes se envía a tu proveedor de IA configurado para leerlo, describirlo e indexarlo para la búsqueda, sin confirmación por documento. Activarlo también actúa de forma retroactiva: los documentos que ya has subido y que aún no tienen resumen también se envían, hasta 200 cada vez que lo activas. Esto ocurre en el servidor y el contenido del documento sale de esta máquina hacia ese proveedor. Si tu proveedor configurado es una conexión de suscripción (una cuenta de IA con sesión iniciada en lugar de una clave de API), se aplican sus propios ajustes de datos: los proveedores de suscripción pueden usar el contenido para mejorar sus modelos, y ningún acuerdo de tratamiento de datos lo cubre. Los documentos leídos por un modelo local autoalojado nunca salen de tu servidor. Desactivado de forma predeterminada; actívalo solo si aceptas este compromiso para tus documentos.", - "confirm": "Lo entiendo: activar la lectura automática con IA", + "confirm": "Entendido: activar", "cancel": "Cancelar" }, "centralCodex": { "title": "Usar el acceso de IA compartido del servidor", "subLabel": "Enruta las solicitudes de IA a través de la conexión que el operador configuró para este servidor, junto a tus propios proveedores como alternativa.", "honesty": "El acceso compartido es una única cuenta de IA con sesión iniciada que el operador conectó para todos en este servidor, no tu propia clave. Las solicitudes que hagas se usan de forma predeterminada para entrenar los modelos del proveedor y ningún acuerdo de tratamiento de datos las cubre, los límites por hora y semanales de la cuenta se comparten con todos los demás que se han unido, y tus propios proveedores se prueban primero. Actívalo solo si aceptas este compromiso.", - "confirm": "Entendido: usar la conexión compartida", + "confirm": "Entendido: usar la conexión", "cancel": "Cancelar" }, "consent": { @@ -5673,7 +5680,7 @@ "description": "Elige cómo se muestran las distancias y velocidades en los gráficos y mosaicos.", "metric": "Métrico", "imperial": "Imperial", - "saved": "Preferencia de unidades guardada.", + "saved": "Preferencia de unidades guardada", "saveError": "No se pudo guardar tu preferencia de unidades." } }, @@ -5861,7 +5868,7 @@ "errorReconnect": "Error — reconectar", "warningServerError": "Sincronización con errores", "failureCount": "{count}/{threshold}", - "parkedReconnect": "Pausado — reconectar manualmente", + "parkedReconnect": "Pausado — reconectar", "notConnected": "No conectado", "justNow": "ahora mismo", "minutesAgo": "hace {count} min", @@ -6038,7 +6045,7 @@ "expiryInvalid": "La caducidad debe estar entre 1 y {max} días.", "create": "Crear enlace", "tokenCreated": "Enlace para compartir creado", - "copied": "Copiado al portapapeles.", + "copied": "Copiado al portapapeles", "activeTitle": "Enlaces activos", "noActive": "No hay enlaces para compartir activos.", "created": "Creado", @@ -6190,7 +6197,7 @@ "revokeSession": "Cerrar sesión", "revokeError": "No se pudo completar la solicitud. Inténtalo de nuevo.", "signOutEverywhere": "Cerrar sesión en los demás dispositivos", - "signOutEverywhereDone": "Se cerraron {count} sesión(es).", + "signOutEverywhereDone": "Se cerraron {count} sesión(es)", "activityTitle": "Actividad de seguridad", "activityDescription": "Inicios de sesión, cambios de seguridad y exportaciones recientes de tu cuenta.", "activityEmpty": "Aún no hay actividad de seguridad.", @@ -6271,7 +6278,7 @@ "revokeError": "No se pudo revocar el dispositivo. Inténtalo de nuevo.", "revoke": "Revocar", "revokeAll": "Olvidar todos los dispositivos", - "revokeAllDone": "Se olvidaron {count} dispositivo(s) de confianza.", + "revokeAllDone": "Se olvidaron {count} dispositivo(s) de confianza", "unnamed": "Dispositivo desconocido", "current": "Este dispositivo", "expires": "De confianza hasta el {date}", @@ -6596,13 +6603,13 @@ "maxUsesLabel": "Usos máximos", "maxUsesHint": "Cuántos registros admite este enlace (1–50).", "createConfirm": "Crear invitación", - "createdToast": "Invitación creada.", + "createdToast": "Invitación creada", "createError": "No se pudo crear la invitación.", "tokenTitle": "Enlace de invitación", "tokenOnceHint": "Solo se puede copiar ahora: copia el enlace o deja que escaneen el código QR.", "hashExplainer": "Solo se guarda un hash del enlace, por lo que no se puede volver a mostrar. Si se pierde, revoca la invitación y crea una nueva.", "copyLink": "Copiar enlace", - "copiedToast": "Enlace copiado.", + "copiedToast": "Enlace copiado", "copyError": "No se pudo copiar.", "qrAlt": "Código QR del enlace de invitación", "loadError": "No se pudieron cargar las invitaciones.", @@ -7345,7 +7352,7 @@ "saveError": "No se pudo guardar. Inténtalo de nuevo.", "hourLabel": "Hora del recordatorio", "hourAria": "Hora del recordatorio de ánimo", - "hourSavedToast": "Hora del recordatorio actualizada.", + "hourSavedToast": "Hora del recordatorio actualizada", "detail": "Se envía solo por canales ya configurados (Telegram, ntfy, Web Push, Apple Push) y permanece en silencio una vez que has registrado el ánimo hoy." }, "coachNudge": { @@ -7386,8 +7393,8 @@ "leadLabel": "Plazo de reposición (días)", "leadAria": "Plazo de reposición en días", "leadHelp": "El aviso se envía estos días más un intervalo de dosis antes, para que la reposición llegue antes de tu última dosis. Un medicamento concreto puede anular este valor en su pestaña de existencias.", - "leadSavedToast": "Plazo de reposición guardado.", - "savedToast": "Umbral de existencias guardado.", + "leadSavedToast": "Plazo de reposición guardado", + "savedToast": "Umbral de existencias guardado", "enabledToast": "Avisos de existencias bajas activados.", "disabledToast": "Avisos de existencias bajas desactivados.", "saveError": "No se pudo guardar. Inténtalo de nuevo.", @@ -8047,10 +8054,10 @@ "protected": "Si se usó anticoncepción durante las relaciones.", "protectedLabel": "¿Qué significa protegido?" }, - "saveSuccess": "Entrada guardada.", - "deleteSuccess": "Entrada eliminada.", - "periodStartSaved": "Inicio del periodo guardado.", - "periodEndSaved": "Fin del periodo guardado.", + "saveSuccess": "Entrada guardada", + "deleteSuccess": "Entrada eliminada", + "periodStartSaved": "Inicio del periodo guardado", + "periodEndSaved": "Fin del periodo guardado", "startedPeriodOnDate": "Mi periodo empezó este día", "endedPeriodOnDate": "Mi periodo terminó este día" }, @@ -9311,7 +9318,7 @@ "freeText": { "label": "Nota de texto libre (alergias e intolerancias)", "hint": "Un complemento de texto libre a la lista estructurada de arriba, para contexto que una entrada individual no puede reflejar.", - "savedToast": "Nota de alergias guardada.", + "savedToast": "Nota de alergias guardada", "saveError": "No se pudo guardar. Inténtalo de nuevo." } }, @@ -9370,7 +9377,7 @@ "conditionsLabel": "Enfermedades crónicas", "focusLabel": "Qué vigila el Coach", "loadError": "No se pudieron cargar tus enfermedades.", - "savedToast": "Enfermedades guardadas.", + "savedToast": "Enfermedades guardadas", "saveError": "No se pudo guardar. Inténtalo de nuevo." }, "emergency": { @@ -9474,7 +9481,7 @@ }, "toast": { "duplicate": "Ya estaba guardado — se resalta el documento existente.", - "deleted": "Documento eliminado.", + "deleted": "Documento eliminado", "restoreFailed": "No se pudo restaurar el documento." }, "timeline": { @@ -9647,9 +9654,9 @@ "unverifiedNoteOther": "{count} valores aún necesitan comprobación y quedan pendientes.", "finish": "Terminar revisión", "confirmFailed": "No se pudo guardar la revisión. Inténtalo de nuevo.", - "savedToastOne": "1 valor guardado.", - "savedToastFew": "{count} valores guardados.", - "savedToastOther": "{count} valores guardados.", + "savedToastOne": "1 valor guardado", + "savedToastFew": "{count} valores guardados", + "savedToastOther": "{count} valores guardados", "nothingSavedToast": "Revisión guardada. No se añadió ningún valor.", "extract": "Extraer valores de laboratorio", "extracting": "Extrayendo…", @@ -10190,7 +10197,7 @@ "errorRateLimit": "Demasiados perfiles creados en la última hora. Espera un poco y vuelve a intentarlo." }, "toast": { - "savedTo": "Guardado en el historial de {name}." + "savedTo": "Guardado en el historial de {name}" }, "activityVerb": { "measurementCreate": "{name} añadió una medición", diff --git a/messages/fr.json b/messages/fr.json index 821569cf0..be0c38ba8 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -560,7 +560,7 @@ "viewAll": "Tout voir", "empty": { "title": "Aucun entraînement", - "cta": "Ouvre l'app Apple Santé sur ton iPhone pour synchroniser les entraînements." + "cta": "Connecte une source de données dans les réglages pour afficher les entraînements ici." } }, "metric": { @@ -729,9 +729,12 @@ "sourceWhoop": "WHOOP", "sourceFitbit": "Fitbit", "bulkDeleteSuccess": "{count} mesures supprimées", + "bulkDeleteSuccessOne": "Mesure supprimée", "bulkDeleteError": "Erreur lors de la suppression des mesures sélectionnées", "bulkDeleteConfirmTitle": "Supprimer {count} mesures ?", + "bulkDeleteConfirmTitleOne": "Supprimer cette mesure ?", "bulkDeleteConfirmBody": "Les {count} mesures sélectionnées seront supprimées. Vous pourrez annuler cette action pendant un court instant juste après.", + "bulkDeleteConfirmBodyOne": "La mesure sélectionnée sera supprimée. Vous pourrez annuler cette action pendant un court instant juste après.", "typePhq9Score": "Score PHQ-9", "typeGad7Score": "Score GAD-7", "typeGripStrength": "Force de préhension", @@ -879,9 +882,12 @@ "sourceTelegram": "Telegram", "sourceDaylio": "Daylio", "bulkDeleteSuccess": "{count} entrées supprimées", + "bulkDeleteSuccessOne": "Entrée supprimée", "bulkDeleteError": "Erreur lors de la suppression des entrées sélectionnées", "bulkDeleteConfirmTitle": "Supprimer {count} entrées ?", + "bulkDeleteConfirmTitleOne": "Supprimer cette entrée ?", "bulkDeleteConfirmBody": "Les {count} entrées d'humeur sélectionnées seront supprimées. Vous pourrez annuler cette action pendant un court instant juste après.", + "bulkDeleteConfirmBodyOne": "L'entrée d'humeur sélectionnée sera supprimée. Vous pourrez annuler cette action pendant un court instant juste après.", "customize": "Personnaliser les étiquettes d’humeur", "addTagInline": "Ajouter une étiquette", "manage": { @@ -1779,7 +1785,8 @@ "enabledToast": "Rappels activés", "disabledToast": "Rappels désactivés", "toggleFailed": "Impossible de modifier le réglage des rappels.", - "clientManagedChip": "Votre iPhone gère les rappels de ce médicament." + "clientManagedChip": "Géré par l’iPhone", + "clientManagedHint": "Votre iPhone gère les rappels de ce médicament." }, "settings": { "title": "Réglages", @@ -1932,7 +1939,7 @@ "addQuantityHelper": "1–1000 unités par boîte ou contenant.", "addExpiryLabel": "Date de péremption (facultatif)", "addSubmit": "Enregistrer", - "addSuccess": "Stock enregistré.", + "addSuccess": "Stock enregistré", "addFailed": "Le stock n'a pas pu être enregistré.", "adjustButton": "Ajuster", "adjustTitle": "Corriger le contenant", @@ -1940,11 +1947,11 @@ "adjustQuantityLabel": "Unités restantes", "adjustHelper": "Capacité : {total} unités.", "adjustSubmit": "Enregistrer", - "adjustSuccess": "Stock mis à jour.", + "adjustSuccess": "Stock mis à jour", "adjustFailed": "Le stock n'a pas pu être mis à jour.", "deleteTitle": "Supprimer le contenant ?", "deleteDescription": "Supprime définitivement cette boîte ou ce contenant du stock. Les prises enregistrées restent inchangées.", - "deleteSuccess": "Entrée de stock supprimée.", + "deleteSuccess": "Entrée de stock supprimée", "deleteFailed": "L'entrée de stock n'a pas pu être supprimée.", "containerTypeLabel": "Type de contenant", "containerType": { @@ -2139,7 +2146,7 @@ "scaleToggleLabel": "Échelle du graphique" }, "import": { - "resultSuccess": "{imported} prises importées.", + "resultSuccess": "{imported} prises importées", "resultPartial": "{imported} importées, {skipped} ignorées.", "resultNothing": "Rien n’a été importé : les {skipped} entrées ont été ignorées.", "resultAlreadyRecorded": "{recorded} prises sont déjà enregistrées. Rien de nouveau n’a été ajouté.", @@ -2787,7 +2794,7 @@ "settingsDefaultWindowLabel": "Période d’analyse par défaut", "settingsDefaultWindowHint": "Le coach lit cette période par chat, sauf si tu en choisis une autre dans l’en-tête du panneau.", "settingsSave": "Enregistrer", - "settingsSaved": "Enregistré.", + "settingsSaved": "Enregistré", "settingsCancel": "Annuler", "feedbackHelpful": "Utile", "feedbackUnhelpful": "Peu utile", @@ -4162,7 +4169,7 @@ "title": "Trier les onglets de navigation", "description": "Faites glisser les onglets dans l'ordre souhaité et affichez-les ou masquez-les via l'icône en forme d'œil.", "dragHandle": "Réorganiser", - "saveSuccess": "Ordre des onglets enregistré.", + "saveSuccess": "Ordre des onglets enregistré", "saveError": "L'enregistrement de l'ordre des onglets a échoué.", "save": "Enregistrer", "empty": "Aucun onglet de navigation disponible pour le moment.", @@ -4855,9 +4862,9 @@ "resetDefaultsConfirm": "Réinitialiser l’ordre", "moveUp": "Monter", "moveDown": "Descendre", - "saveSuccess": "Priorité des sources enregistrée.", + "saveSuccess": "Priorité des sources enregistrée", "saveError": "Échec de l’enregistrement de la priorité des sources.", - "resetSuccess": "Priorité des sources rétablie aux valeurs par défaut.", + "resetSuccess": "Priorité des sources rétablie aux valeurs par défaut", "perMetricToggle": "Réglages par métrique ({count})", "perMetricHelp": "Métriques que vous avez personnalisées par rapport à l’ordre par défaut. Utilisez cette liste pour rétablir une métrique donnée à sa valeur par défaut sans toucher aux autres.", "perMetricEmpty": "Aucun réglage par métrique — chaque métrique utilise l’ordre global ci-dessus.", @@ -5026,7 +5033,7 @@ "failed": "L'import a échoué. Veuillez réessayer.", "readFailed": "Impossible de lire ce fichier.", "resultSummary": "{measurements} mesures et {moods} entrées d'humeur importées, {skipped} ignorées.", - "resultSuccess": "{measurements} mesures et {moods} entrées d'humeur importées.", + "resultSuccess": "{measurements} mesures et {moods} entrées d'humeur importées", "resultNothing": "Rien n'a été importé. Les {skipped} entrées ont toutes été ignorées.", "resultEmpty": "Ce fichier ne contenait ni mesures ni entrées d'humeur." }, @@ -5050,10 +5057,10 @@ "previewSummary": "Aperçu : {inserted} seraient importées, {skipped} ignorées.", "resultSummary": "{inserted} nouvelles importées et {updated} mises à jour, {skipped} ignorées.", "rowError": "Ligne {line} : {reason}", - "resultSuccess": "{inserted} nouvelles importées et {updated} mises à jour.", + "resultSuccess": "{inserted} nouvelles importées et {updated} mises à jour", "resultNothing": "Rien n'a été importé. Les {skipped} lignes ont toutes été ignorées.", "resultEmpty": "Ce fichier a un en-tête mais aucune ligne de données.", - "previewSuccess": "Aperçu : {inserted} seraient importées.", + "previewSuccess": "Aperçu : {inserted} seraient importées", "previewNothing": "Aperçu : rien ne serait importé. Les {skipped} lignes seraient toutes ignorées.", "skipGroupOne": "{count} ligne ignorée : {reason}", "skipGroupFew": "{count} lignes ignorées : {reason}", @@ -5146,7 +5153,7 @@ "insights": { "title": "Analyses", "description": "Ordre de la vue d'ensemble et des onglets de navigation.", - "subtitle": "Organisez les sections d'aperçu et l'ordre des pastilles." + "subtitle": "Organisez les sections d'aperçu et l'ordre des onglets." }, "medications": { "title": "Médicaments", @@ -5175,7 +5182,7 @@ }, "modules": { "title": "Modules", - "saved": "Enregistré.", + "saved": "Enregistré", "error": "Échec de l'enregistrement. Veuillez réessayer.", "toggleable": { "title": "Ce que vous suivez", @@ -5223,7 +5230,7 @@ "use": "Utiliser", "select": "Sélectionner", "saveError": "Impossible d'enregistrer la modification.", - "homeSaved": "Lieu de référence enregistré.", + "homeSaved": "Lieu de référence enregistré", "travelAdded": "Période de localisation ajoutée.", "travelRemoved": "Période de localisation supprimée.", "backfillQueued": "Récupération planifiée.", @@ -5280,7 +5287,7 @@ "current": "Votre sélection enregistrée" }, "save": "Enregistrer", - "saved": "Enregistré.", + "saved": "Enregistré", "error": "Enregistrement impossible. Veuillez réessayer.", "loadFailed": "Impossible de charger votre sélection.", "eligibilityFailed": "Impossible de vérifier quels piliers disposent de données. Les interrupteurs ci-dessous fonctionnent quand même.", @@ -5318,7 +5325,7 @@ "auto": "Automatique (langue)", "h24": "24 heures", "h12": "12 heures (AM/PM)", - "saved": "Format horaire enregistré.", + "saved": "Format horaire enregistré", "saveError": "Échec de l’enregistrement du format horaire." }, "dateFormat": { @@ -5328,7 +5335,7 @@ "dmy": "JJ.MM.AAAA", "mdy": "MM/JJ/AAAA", "ymd": "AAAA-MM-JJ", - "saved": "Format de date enregistré.", + "saved": "Format de date enregistré", "saveError": "Échec de l’enregistrement du format de date." }, "username": "Nom d'utilisateur", @@ -5622,7 +5629,7 @@ "clearBody": "Seul le texte libre est supprimé. Vos allergies et intolérances restent inchangées.", "clearConfirm": "Vider la note", "save": "Enregistrer", - "savedToast": "Note « À propos de moi » enregistrée.", + "savedToast": "Note « À propos de moi » enregistrée", "clearedToast": "Note « À propos de moi » supprimée.", "saveError": "Impossible d'enregistrer. Veuillez réessayer.", "loadError": "Impossible de charger la note.", @@ -5644,14 +5651,14 @@ "title": "Lire les documents automatiquement avec l'IA", "subLabel": "Les documents sont lus et indexés par votre fournisseur d'IA configuré, sans validation document par document.", "honesty": "Lorsque cette option est activée, chaque document que vous téléversez est envoyé à votre fournisseur d'IA configuré pour être lu, décrit et indexé pour la recherche, sans confirmation par document. L'activation agit aussi rétroactivement : les documents que vous avez déjà téléversés et qui n'ont pas encore de résumé sont envoyés eux aussi, jusqu'à 200 à chaque activation. Cela se produit sur le serveur et le contenu du document quitte cette machine vers ce fournisseur. Si votre fournisseur configuré est une connexion par abonnement (un compte d'IA connecté plutôt qu'une clé API), ses propres paramètres de données s'appliquent : les fournisseurs par abonnement peuvent utiliser le contenu pour améliorer leurs modèles, et aucun accord de traitement des données ne le couvre. Les documents lus par un modèle local auto-hébergé ne quittent jamais votre serveur. Désactivé par défaut ; activez-le uniquement si vous acceptez ce compromis pour vos documents.", - "confirm": "Je comprends — activer la lecture automatique par l'IA", + "confirm": "Compris — activer", "cancel": "Annuler" }, "centralCodex": { "title": "Utiliser l'accès IA partagé du serveur", "subLabel": "Acheminez les requêtes IA via la connexion que l'opérateur a configurée pour ce serveur, en complément de vos propres fournisseurs comme solution de repli.", "honesty": "L'accès partagé est un unique compte IA connecté que l'opérateur a relié pour tout le monde sur ce serveur, et non votre propre clé. Les requêtes que vous y faites servent par défaut à entraîner les modèles du fournisseur et aucun accord de traitement des données ne les couvre, les limites horaires et hebdomadaires du compte sont partagées avec tous les autres qui ont accepté, et vos propres fournisseurs sont essayés en premier. Ne l'activez que si vous acceptez ce compromis.", - "confirm": "J'ai compris — utiliser la connexion partagée", + "confirm": "Compris — utiliser la connexion", "cancel": "Annuler" }, "consent": { @@ -5673,7 +5680,7 @@ "description": "Choisissez l'affichage des distances et des vitesses dans les graphiques et les tuiles.", "metric": "Métrique", "imperial": "Impérial", - "saved": "Préférence d'unités enregistrée.", + "saved": "Préférence d'unités enregistrée", "saveError": "Impossible d'enregistrer votre préférence d'unités." } }, @@ -5861,7 +5868,7 @@ "errorReconnect": "Erreur — reconnecter", "warningServerError": "Échec de synchronisation", "failureCount": "{count}/{threshold}", - "parkedReconnect": "En pause — reconnecter manuellement", + "parkedReconnect": "En pause — reconnecter", "notConnected": "Non connecté", "justNow": "à l’instant", "minutesAgo": "il y a {count} min", @@ -6038,7 +6045,7 @@ "expiryInvalid": "L'expiration doit être comprise entre 1 et {max} jours.", "create": "Créer le lien", "tokenCreated": "Lien de partage créé", - "copied": "Copié dans le presse-papiers.", + "copied": "Copié dans le presse-papiers", "activeTitle": "Liens actifs", "noActive": "Aucun lien de partage actif.", "created": "Créé", @@ -6190,7 +6197,7 @@ "revokeSession": "Déconnecter", "revokeError": "Impossible de traiter la demande. Veuillez réessayer.", "signOutEverywhere": "Se déconnecter partout ailleurs", - "signOutEverywhereDone": "{count} autre(s) session(s) déconnectée(s).", + "signOutEverywhereDone": "{count} autre(s) session(s) déconnectée(s)", "activityTitle": "Activité de sécurité", "activityDescription": "Connexions récentes, modifications de sécurité et exports de données de votre compte.", "activityEmpty": "Aucune activité de sécurité pour l'instant.", @@ -6271,7 +6278,7 @@ "revokeError": "Impossible de révoquer l'appareil. Veuillez réessayer.", "revoke": "Révoquer", "revokeAll": "Oublier tous les appareils", - "revokeAllDone": "{count} appareil(s) de confiance oublié(s).", + "revokeAllDone": "{count} appareil(s) de confiance oublié(s)", "unnamed": "Appareil inconnu", "current": "Cet appareil", "expires": "De confiance jusqu'au {date}", @@ -6596,13 +6603,13 @@ "maxUsesLabel": "Utilisations maximales", "maxUsesHint": "Nombre d'inscriptions que ce lien autorise (1–50).", "createConfirm": "Créer l'invitation", - "createdToast": "Invitation créée.", + "createdToast": "Invitation créée", "createError": "Impossible de créer l'invitation.", "tokenTitle": "Lien d'invitation", "tokenOnceHint": "Copiable uniquement maintenant — copiez le lien ou faites scanner le code QR.", "hashExplainer": "Seul un hachage du lien est stocké : il ne pourra plus être affiché. En cas de perte, révoquez l'invitation et créez-en une nouvelle.", "copyLink": "Copier le lien", - "copiedToast": "Lien copié.", + "copiedToast": "Lien copié", "copyError": "Échec de la copie.", "qrAlt": "Code QR du lien d'invitation", "loadError": "Impossible de charger les invitations.", @@ -7345,7 +7352,7 @@ "saveError": "Échec de l’enregistrement. Réessayez.", "hourLabel": "Heure du rappel", "hourAria": "Heure du rappel d’humeur", - "hourSavedToast": "Heure du rappel mise à jour.", + "hourSavedToast": "Heure du rappel mise à jour", "detail": "Utilise uniquement les canaux déjà configurés (Telegram, ntfy, Web Push, Apple Push) et reste silencieux dès que tu as noté ton humeur aujourd’hui." }, "coachNudge": { @@ -7386,8 +7393,8 @@ "leadLabel": "Délai de réapprovisionnement (jours)", "leadAria": "Délai de réapprovisionnement en jours", "leadHelp": "L’alerte est envoyée ce nombre de jours plus un intervalle de dose plus tôt, pour qu’un réapprovisionnement arrive avant ta dernière dose. Un médicament donné peut remplacer cette valeur dans son onglet stock.", - "leadSavedToast": "Délai de réapprovisionnement enregistré.", - "savedToast": "Seuil de stock enregistré.", + "leadSavedToast": "Délai de réapprovisionnement enregistré", + "savedToast": "Seuil de stock enregistré", "enabledToast": "Alertes de stock faible activées.", "disabledToast": "Alertes de stock faible désactivées.", "saveError": "Échec de l’enregistrement. Réessayez.", @@ -8047,10 +8054,10 @@ "protected": "Si une contraception a été utilisée pendant le rapport.", "protectedLabel": "Que signifie protégé ?" }, - "saveSuccess": "Entrée enregistrée.", - "deleteSuccess": "Entrée supprimée.", - "periodStartSaved": "Début des règles enregistré.", - "periodEndSaved": "Fin des règles enregistrée.", + "saveSuccess": "Entrée enregistrée", + "deleteSuccess": "Entrée supprimée", + "periodStartSaved": "Début des règles enregistré", + "periodEndSaved": "Fin des règles enregistrée", "startedPeriodOnDate": "Mes règles ont commencé ce jour-là", "endedPeriodOnDate": "Mes règles se sont terminées ce jour-là" }, @@ -9311,7 +9318,7 @@ "freeText": { "label": "Note en texte libre (allergies et intolérances)", "hint": "Un complément en texte libre à la liste structurée ci-dessus, pour un contexte qu'une entrée seule ne peut pas refléter.", - "savedToast": "Note d'allergies enregistrée.", + "savedToast": "Note d'allergies enregistrée", "saveError": "Impossible d'enregistrer. Veuillez réessayer." } }, @@ -9370,7 +9377,7 @@ "conditionsLabel": "Affections chroniques", "focusLabel": "Ce que le Coach surveille", "loadError": "Impossible de charger vos antécédents.", - "savedToast": "Affections enregistrées.", + "savedToast": "Affections enregistrées", "saveError": "Impossible d'enregistrer. Veuillez réessayer." }, "emergency": { @@ -9474,7 +9481,7 @@ }, "toast": { "duplicate": "Déjà enregistré — le document existant est mis en évidence.", - "deleted": "Document supprimé.", + "deleted": "Document supprimé", "restoreFailed": "Impossible de restaurer le document." }, "timeline": { @@ -9647,9 +9654,9 @@ "unverifiedNoteOther": "{count} valeurs restent à vérifier et demeurent en attente.", "finish": "Terminer la vérification", "confirmFailed": "La vérification n’a pas pu être enregistrée. Réessayez.", - "savedToastOne": "1 valeur enregistrée.", - "savedToastFew": "{count} valeurs enregistrées.", - "savedToastOther": "{count} valeurs enregistrées.", + "savedToastOne": "1 valeur enregistrée", + "savedToastFew": "{count} valeurs enregistrées", + "savedToastOther": "{count} valeurs enregistrées", "nothingSavedToast": "Vérification enregistrée. Aucune valeur n’a été ajoutée.", "extract": "Extraire les valeurs de laboratoire", "extracting": "Extraction…", @@ -10190,7 +10197,7 @@ "errorRateLimit": "Trop de profils créés dans la dernière heure. Patientez un peu et réessayez." }, "toast": { - "savedTo": "Enregistré dans le dossier de {name}." + "savedTo": "Enregistré dans le dossier de {name}" }, "activityVerb": { "measurementCreate": "{name} a ajouté une mesure", diff --git a/messages/it.json b/messages/it.json index b60ec764f..71d04c96c 100644 --- a/messages/it.json +++ b/messages/it.json @@ -560,7 +560,7 @@ "viewAll": "Vedi tutti", "empty": { "title": "Nessun allenamento", - "cta": "Apri l'app Salute di Apple sull'iPhone per sincronizzare gli allenamenti." + "cta": "Collega una fonte di dati nelle impostazioni per vedere qui gli allenamenti." } }, "metric": { @@ -729,9 +729,12 @@ "sourceWhoop": "WHOOP", "sourceFitbit": "Fitbit", "bulkDeleteSuccess": "{count} misurazioni eliminate", + "bulkDeleteSuccessOne": "Misurazione eliminata", "bulkDeleteError": "Errore durante l'eliminazione delle misurazioni selezionate", "bulkDeleteConfirmTitle": "Eliminare {count} misurazioni?", + "bulkDeleteConfirmTitleOne": "Eliminare questa misurazione?", "bulkDeleteConfirmBody": "Le {count} misurazioni selezionate verranno eliminate. Subito dopo potrai annullare l’operazione per un breve momento.", + "bulkDeleteConfirmBodyOne": "La misurazione selezionata verrà eliminata. Subito dopo potrai annullare l’operazione per un breve momento.", "typePhq9Score": "Punteggio PHQ-9", "typeGad7Score": "Punteggio GAD-7", "typeGripStrength": "Forza di presa", @@ -879,9 +882,12 @@ "sourceTelegram": "Telegram", "sourceDaylio": "Daylio", "bulkDeleteSuccess": "{count} voci eliminate", + "bulkDeleteSuccessOne": "Voce eliminata", "bulkDeleteError": "Errore durante l'eliminazione delle voci selezionate", "bulkDeleteConfirmTitle": "Eliminare {count} voci?", + "bulkDeleteConfirmTitleOne": "Eliminare questa voce?", "bulkDeleteConfirmBody": "Le {count} voci dell'umore selezionate verranno eliminate. Subito dopo potrai annullare l’operazione per un breve momento.", + "bulkDeleteConfirmBodyOne": "La voce dell'umore selezionata verrà eliminata. Subito dopo potrai annullare l’operazione per un breve momento.", "customize": "Personalizza i tag dell’umore", "addTagInline": "Aggiungi tag", "manage": { @@ -1779,7 +1785,8 @@ "enabledToast": "Promemoria attivi", "disabledToast": "Promemoria disattivati", "toggleFailed": "Impossibile modificare l’impostazione dei promemoria.", - "clientManagedChip": "Il tuo iPhone gestisce i promemoria di questo farmaco." + "clientManagedChip": "Gestito dall’iPhone", + "clientManagedHint": "Il tuo iPhone gestisce i promemoria di questo farmaco." }, "settings": { "title": "Impostazioni", @@ -1932,7 +1939,7 @@ "addQuantityHelper": "1–1000 unità per confezione o contenitore.", "addExpiryLabel": "Data di scadenza (facoltativa)", "addSubmit": "Registra", - "addSuccess": "Scorta registrata.", + "addSuccess": "Scorta registrata", "addFailed": "Impossibile registrare la scorta.", "adjustButton": "Correggi", "adjustTitle": "Correggi il contenitore", @@ -1940,11 +1947,11 @@ "adjustQuantityLabel": "Unità rimanenti", "adjustHelper": "Capacità: {total} unità.", "adjustSubmit": "Salva", - "adjustSuccess": "Scorta aggiornata.", + "adjustSuccess": "Scorta aggiornata", "adjustFailed": "Impossibile aggiornare la scorta.", "deleteTitle": "Eliminare la confezione?", "deleteDescription": "Rimuove definitivamente questa confezione o contenitore dalla scorta. Le assunzioni registrate restano invariate.", - "deleteSuccess": "Scorta eliminata.", + "deleteSuccess": "Scorta eliminata", "deleteFailed": "Impossibile eliminare la scorta.", "containerTypeLabel": "Tipo di contenitore", "containerType": { @@ -2139,7 +2146,7 @@ "scaleToggleLabel": "Scala del grafico" }, "import": { - "resultSuccess": "{imported} assunzioni importate.", + "resultSuccess": "{imported} assunzioni importate", "resultPartial": "{imported} importate, {skipped} ignorate.", "resultNothing": "Non è stato importato nulla: tutte le {skipped} voci sono state ignorate.", "resultAlreadyRecorded": "{recorded} assunzioni sono già registrate. Non è stato aggiunto nulla di nuovo.", @@ -2787,7 +2794,7 @@ "settingsDefaultWindowLabel": "Periodo di analisi predefinito", "settingsDefaultWindowHint": "Il coach legge questo periodo per chat, salvo che tu non scelga diversamente nell’intestazione del drawer.", "settingsSave": "Salva", - "settingsSaved": "Salvato.", + "settingsSaved": "Salvato", "settingsCancel": "Annulla", "feedbackHelpful": "Utile", "feedbackUnhelpful": "Poco utile", @@ -4162,7 +4169,7 @@ "title": "Ordina le schede di navigazione", "description": "Trascina le schede nell'ordine desiderato e mostrale o nascondile con l'icona dell'occhio.", "dragHandle": "Riordina", - "saveSuccess": "Ordine delle schede salvato.", + "saveSuccess": "Ordine delle schede salvato", "saveError": "Salvataggio dell'ordine delle schede non riuscito.", "save": "Salva", "empty": "Nessuna scheda di navigazione ancora disponibile.", @@ -4855,9 +4862,9 @@ "resetDefaultsConfirm": "Reimposta ordine", "moveUp": "Sposta su", "moveDown": "Sposta giù", - "saveSuccess": "Priorità delle fonti salvata.", + "saveSuccess": "Priorità delle fonti salvata", "saveError": "Salvataggio della priorità delle fonti non riuscito.", - "resetSuccess": "Priorità delle fonti ripristinata ai valori predefiniti.", + "resetSuccess": "Priorità delle fonti ripristinata ai valori predefiniti", "perMetricToggle": "Personalizzazioni per metrica ({count})", "perMetricHelp": "Metriche che hai personalizzato rispetto all’ordine predefinito. Usa questo elenco per riportare una singola metrica al suo valore predefinito senza toccare le altre.", "perMetricEmpty": "Nessuna personalizzazione per metrica — ogni metrica usa l’ordine globale qui sopra.", @@ -5026,7 +5033,7 @@ "failed": "L'importazione non è riuscita. Riprova.", "readFailed": "Impossibile leggere il file.", "resultSummary": "{measurements} misurazioni e {moods} voci dell'umore importate, {skipped} saltate.", - "resultSuccess": "{measurements} misurazioni e {moods} voci dell'umore importate.", + "resultSuccess": "{measurements} misurazioni e {moods} voci dell'umore importate", "resultNothing": "Non è stato importato nulla. Tutte le {skipped} voci sono state saltate.", "resultEmpty": "Questo file non conteneva né misurazioni né voci dell'umore." }, @@ -5050,10 +5057,10 @@ "previewSummary": "Anteprima: {inserted} verrebbero importate, {skipped} saltate.", "resultSummary": "{inserted} nuove importate e {updated} aggiornate, {skipped} saltate.", "rowError": "Riga {line}: {reason}", - "resultSuccess": "{inserted} nuove importate e {updated} aggiornate.", + "resultSuccess": "{inserted} nuove importate e {updated} aggiornate", "resultNothing": "Non è stato importato nulla. Tutte le {skipped} righe sono state saltate.", "resultEmpty": "Questo file ha un'intestazione ma nessuna riga di dati.", - "previewSuccess": "Anteprima: {inserted} verrebbero importate.", + "previewSuccess": "Anteprima: {inserted} verrebbero importate", "previewNothing": "Anteprima: non verrebbe importato nulla. Tutte le {skipped} righe verrebbero saltate.", "skipGroupOne": "{count} riga saltata: {reason}", "skipGroupFew": "{count} righe saltate: {reason}", @@ -5146,7 +5153,7 @@ "insights": { "title": "Approfondimenti", "description": "Ordine della panoramica e delle schede di navigazione.", - "subtitle": "Disponi le sezioni della panoramica e l'ordine dei pill." + "subtitle": "Disponi le sezioni della panoramica e l'ordine delle schede." }, "medications": { "title": "Farmaci", @@ -5175,7 +5182,7 @@ }, "modules": { "title": "Moduli", - "saved": "Salvato.", + "saved": "Salvato", "error": "Salvataggio non riuscito. Riprova.", "toggleable": { "title": "Cosa monitori", @@ -5223,7 +5230,7 @@ "use": "Usa", "select": "Seleziona", "saveError": "Impossibile salvare la modifica.", - "homeSaved": "Posizione principale salvata.", + "homeSaved": "Posizione principale salvata", "travelAdded": "Periodo di posizione aggiunto.", "travelRemoved": "Periodo di posizione rimosso.", "backfillQueued": "Recupero pianificato.", @@ -5280,7 +5287,7 @@ "current": "La tua selezione salvata" }, "save": "Salva", - "saved": "Salvato.", + "saved": "Salvato", "error": "Non è stato possibile salvare. Riprova.", "loadFailed": "Non è stato possibile caricare la tua selezione.", "eligibilityFailed": "Non è stato possibile verificare quali pilastri hanno dati al momento. Gli interruttori qui sotto funzionano comunque.", @@ -5318,7 +5325,7 @@ "auto": "Automatico (lingua)", "h24": "24 ore", "h12": "12 ore (AM/PM)", - "saved": "Formato orario salvato.", + "saved": "Formato orario salvato", "saveError": "Salvataggio del formato orario non riuscito." }, "dateFormat": { @@ -5328,7 +5335,7 @@ "dmy": "GG.MM.AAAA", "mdy": "MM/GG/AAAA", "ymd": "AAAA-MM-GG", - "saved": "Formato data salvato.", + "saved": "Formato data salvato", "saveError": "Salvataggio del formato data non riuscito." }, "username": "Nome utente", @@ -5622,7 +5629,7 @@ "clearBody": "Rimuove solo il testo libero. Allergie e intolleranze restano invariate.", "clearConfirm": "Svuota nota", "save": "Salva", - "savedToast": "Nota «Su di me» salvata.", + "savedToast": "Nota «Su di me» salvata", "clearedToast": "Nota «Su di me» eliminata.", "saveError": "Impossibile salvare. Riprova.", "loadError": "Impossibile caricare la nota.", @@ -5644,14 +5651,14 @@ "title": "Leggi i documenti automaticamente con l'IA", "subLabel": "I documenti vengono letti e indicizzati dal provider di IA configurato, senza confermare ogni documento.", "honesty": "Quando è attivo, ogni documento che carichi viene inviato al provider di IA configurato per essere letto, descritto e indicizzato per la ricerca, senza conferma per singolo documento. Attivarlo agisce anche retroattivamente: i documenti che hai già caricato e che non hanno ancora un riassunto vengono inviati anch'essi, fino a 200 per ogni attivazione. Questo avviene sul server e il contenuto del documento lascia questa macchina verso quel provider. Se il provider configurato è una connessione in abbonamento (un account IA con accesso effettuato anziché una chiave API), si applicano le sue impostazioni sui dati: i provider in abbonamento possono usare il contenuto per migliorare i propri modelli e nessun accordo sul trattamento dei dati lo copre. I documenti letti da un modello locale self-hosted non lasciano mai il tuo server. Disattivato per impostazione predefinita; attivalo solo se accetti questo compromesso per i tuoi documenti.", - "confirm": "Ho capito: attiva la lettura automatica con l'IA", + "confirm": "Ho capito — attiva", "cancel": "Annulla" }, "centralCodex": { "title": "Usa l'accesso IA condiviso del server", "subLabel": "Instrada le richieste IA attraverso la connessione che l'operatore ha configurato per questo server, insieme ai tuoi provider come ripiego.", "honesty": "L'accesso condiviso è un unico account IA con accesso eseguito che l'operatore ha collegato per tutti su questo server, non la tua chiave. Le richieste che vi effettui vengono usate per impostazione predefinita per addestrare i modelli del provider e nessun accordo sul trattamento dei dati le copre, i limiti orari e settimanali dell'account sono condivisi con tutti gli altri che hanno aderito, e i tuoi provider vengono comunque provati per primi. Attivalo solo se accetti questo compromesso.", - "confirm": "Ho capito — usa la connessione condivisa", + "confirm": "Ho capito — usa la connessione", "cancel": "Annulla" }, "consent": { @@ -5673,7 +5680,7 @@ "description": "Scegli come vengono mostrate distanze e velocità nei grafici e nei riquadri.", "metric": "Metrico", "imperial": "Imperiale", - "saved": "Preferenza unità salvata.", + "saved": "Preferenza unità salvata", "saveError": "Impossibile salvare la preferenza delle unità." } }, @@ -5861,7 +5868,7 @@ "errorReconnect": "Errore — riconnetti", "warningServerError": "Sincronizzazione in errore", "failureCount": "{count}/{threshold}", - "parkedReconnect": "In pausa — riconnettere manualmente", + "parkedReconnect": "In pausa — riconnetti", "notConnected": "Non connesso", "justNow": "proprio ora", "minutesAgo": "{count} min fa", @@ -6038,7 +6045,7 @@ "expiryInvalid": "La scadenza deve essere tra 1 e {max} giorni.", "create": "Crea link", "tokenCreated": "Link di condivisione creato", - "copied": "Copiato negli appunti.", + "copied": "Copiato negli appunti", "activeTitle": "Link attivi", "noActive": "Nessun link di condivisione attivo.", "created": "Creato", @@ -6190,7 +6197,7 @@ "revokeSession": "Disconnetti", "revokeError": "Impossibile completare la richiesta. Riprova.", "signOutEverywhere": "Disconnetti ovunque", - "signOutEverywhereDone": "Disconnesse {count} altra/e sessione/i.", + "signOutEverywhereDone": "Disconnesse {count} altra/e sessione/i", "activityTitle": "Attività di sicurezza", "activityDescription": "Accessi recenti, modifiche di sicurezza ed esportazioni di dati del tuo account.", "activityEmpty": "Nessuna attività di sicurezza.", @@ -6271,7 +6278,7 @@ "revokeError": "Impossibile revocare il dispositivo. Riprova.", "revoke": "Revoca", "revokeAll": "Dimentica tutti i dispositivi", - "revokeAllDone": "Dimenticati {count} dispositivo/i attendibile/i.", + "revokeAllDone": "Dimenticati {count} dispositivo/i attendibile/i", "unnamed": "Dispositivo sconosciuto", "current": "Questo dispositivo", "expires": "Attendibile fino al {date}", @@ -6596,13 +6603,13 @@ "maxUsesLabel": "Utilizzi massimi", "maxUsesHint": "Quante registrazioni consente questo link (1–50).", "createConfirm": "Crea invito", - "createdToast": "Invito creato.", + "createdToast": "Invito creato", "createError": "Impossibile creare l'invito.", "tokenTitle": "Link di invito", "tokenOnceHint": "Copiabile solo adesso: copia il link o fai scansionare il codice QR.", "hashExplainer": "Viene salvato solo un hash del link: non potrà più essere mostrato. Se va perso, revoca l'invito e creane uno nuovo.", "copyLink": "Copia link", - "copiedToast": "Link copiato.", + "copiedToast": "Link copiato", "copyError": "Copia non riuscita.", "qrAlt": "Codice QR del link di invito", "loadError": "Impossibile caricare gli inviti.", @@ -7345,7 +7352,7 @@ "saveError": "Salvataggio non riuscito. Riprova.", "hourLabel": "Ora del promemoria", "hourAria": "Ora del promemoria dell’umore", - "hourSavedToast": "Ora del promemoria aggiornata.", + "hourSavedToast": "Ora del promemoria aggiornata", "detail": "Usa solo i canali già configurati (Telegram, ntfy, Web Push, Apple Push) e tace una volta registrato l’umore di oggi." }, "coachNudge": { @@ -7386,8 +7393,8 @@ "leadLabel": "Tempo di riordino (giorni)", "leadAria": "Tempo di riordino in giorni", "leadHelp": "L’avviso arriva questo numero di giorni più un intervallo di dose in anticipo, così la fornitura arriva prima dell’ultima dose. Un singolo farmaco può sovrascrivere questo valore nella sua scheda scorte.", - "leadSavedToast": "Tempo di riordino salvato.", - "savedToast": "Soglia delle scorte salvata.", + "leadSavedToast": "Tempo di riordino salvato", + "savedToast": "Soglia delle scorte salvata", "enabledToast": "Avvisi di scorte basse attivati.", "disabledToast": "Avvisi di scorte basse disattivati.", "saveError": "Salvataggio non riuscito. Riprova.", @@ -8047,10 +8054,10 @@ "protected": "Se durante il rapporto è stata usata la contraccezione.", "protectedLabel": "Cosa significa protetto?" }, - "saveSuccess": "Voce salvata.", - "deleteSuccess": "Voce eliminata.", - "periodStartSaved": "Inizio delle mestruazioni salvato.", - "periodEndSaved": "Fine delle mestruazioni salvata.", + "saveSuccess": "Voce salvata", + "deleteSuccess": "Voce eliminata", + "periodStartSaved": "Inizio delle mestruazioni salvato", + "periodEndSaved": "Fine delle mestruazioni salvata", "startedPeriodOnDate": "Le mestruazioni sono iniziate questo giorno", "endedPeriodOnDate": "Le mestruazioni sono finite questo giorno" }, @@ -9311,7 +9318,7 @@ "freeText": { "label": "Nota a testo libero (allergie e intolleranze)", "hint": "Un'integrazione a testo libero all'elenco strutturato qui sopra, per il contesto che una singola voce non può contenere.", - "savedToast": "Nota sulle allergie salvata.", + "savedToast": "Nota sulle allergie salvata", "saveError": "Impossibile salvare. Riprova." } }, @@ -9370,7 +9377,7 @@ "conditionsLabel": "Patologie croniche", "focusLabel": "Cosa tiene d'occhio il Coach", "loadError": "Impossibile caricare le tue patologie.", - "savedToast": "Patologie salvate.", + "savedToast": "Patologie salvate", "saveError": "Impossibile salvare. Riprova." }, "emergency": { @@ -9474,7 +9481,7 @@ }, "toast": { "duplicate": "Già archiviato — il documento esistente viene evidenziato.", - "deleted": "Documento eliminato.", + "deleted": "Documento eliminato", "restoreFailed": "Impossibile ripristinare il documento." }, "timeline": { @@ -9647,9 +9654,9 @@ "unverifiedNoteOther": "{count} valori devono ancora essere controllati e restano in sospeso.", "finish": "Concludi la revisione", "confirmFailed": "La revisione non è stata salvata. Riprova.", - "savedToastOne": "1 valore salvato.", - "savedToastFew": "{count} valori salvati.", - "savedToastOther": "{count} valori salvati.", + "savedToastOne": "1 valore salvato", + "savedToastFew": "{count} valori salvati", + "savedToastOther": "{count} valori salvati", "nothingSavedToast": "Revisione salvata. Nessun valore è stato aggiunto.", "extract": "Estrai i valori di laboratorio", "extracting": "Estrazione…", @@ -10190,7 +10197,7 @@ "errorRateLimit": "Troppi profili creati nell'ultima ora. Aspetta un po' e riprova." }, "toast": { - "savedTo": "Salvato nella cartella di {name}." + "savedTo": "Salvato nella cartella di {name}" }, "activityVerb": { "measurementCreate": "{name} ha aggiunto una misurazione", diff --git a/messages/pl.json b/messages/pl.json index 8a8535afd..bb3fbb60f 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -560,7 +560,7 @@ "viewAll": "Zobacz wszystkie", "empty": { "title": "Brak treningów", - "cta": "Otwórz aplikację Apple Zdrowie na iPhonie, aby zsynchronizować treningi." + "cta": "Połącz źródło danych w ustawieniach, aby zobaczyć tu treningi." } }, "metric": { @@ -729,9 +729,12 @@ "sourceWhoop": "WHOOP", "sourceFitbit": "Fitbit", "bulkDeleteSuccess": "Usunięto pomiary: {count}", + "bulkDeleteSuccessOne": "Usunięto pomiar", "bulkDeleteError": "Błąd podczas usuwania wybranych pomiarów", "bulkDeleteConfirmTitle": "Usunąć pomiary ({count})?", + "bulkDeleteConfirmTitleOne": "Usunąć ten pomiar?", "bulkDeleteConfirmBody": "Wybrane pomiary ({count}) zostaną usunięte. Zaraz po usunięciu możesz to przez chwilę cofnąć.", + "bulkDeleteConfirmBodyOne": "Wybrany pomiar zostanie usunięty. Zaraz po usunięciu możesz to przez chwilę cofnąć.", "typePhq9Score": "Wynik PHQ-9", "typeGad7Score": "Wynik GAD-7", "typeGripStrength": "Siła chwytu", @@ -879,9 +882,12 @@ "sourceTelegram": "Telegram", "sourceDaylio": "Daylio", "bulkDeleteSuccess": "Usunięto wpisy: {count}", + "bulkDeleteSuccessOne": "Usunięto wpis", "bulkDeleteError": "Błąd podczas usuwania wybranych wpisów", "bulkDeleteConfirmTitle": "Usunąć wpisy ({count})?", + "bulkDeleteConfirmTitleOne": "Usunąć ten wpis?", "bulkDeleteConfirmBody": "Wybrane wpisy nastroju ({count}) zostaną usunięte. Zaraz po usunięciu możesz to przez chwilę cofnąć.", + "bulkDeleteConfirmBodyOne": "Wybrany wpis nastroju zostanie usunięty. Zaraz po usunięciu możesz to przez chwilę cofnąć.", "customize": "Dostosuj tagi nastroju", "addTagInline": "Dodaj tag", "manage": { @@ -1779,7 +1785,8 @@ "enabledToast": "Przypomnienia włączone", "disabledToast": "Przypomnienia wyłączone", "toggleFailed": "Nie udało się zmienić ustawienia przypomnień.", - "clientManagedChip": "Twój iPhone zarządza przypomnieniami dla tego leku." + "clientManagedChip": "Zarządzane przez iPhone’a", + "clientManagedHint": "Twój iPhone zarządza przypomnieniami dla tego leku." }, "settings": { "title": "Ustawienia", @@ -1932,7 +1939,7 @@ "addQuantityHelper": "1–1000 jednostek na opakowanie lub pojemnik.", "addExpiryLabel": "Data ważności (opcjonalnie)", "addSubmit": "Zarejestruj", - "addSuccess": "Zapas zarejestrowany.", + "addSuccess": "Zapas zarejestrowany", "addFailed": "Nie udało się zarejestrować zapasu.", "adjustButton": "Skoryguj", "adjustTitle": "Popraw opakowanie", @@ -1940,11 +1947,11 @@ "adjustQuantityLabel": "Pozostałe jednostki", "adjustHelper": "Pojemność: {total} jednostek.", "adjustSubmit": "Zapisz", - "adjustSuccess": "Zapas zaktualizowany.", + "adjustSuccess": "Zapas zaktualizowany", "adjustFailed": "Nie udało się zaktualizować zapasu.", "deleteTitle": "Usunąć opakowanie?", "deleteDescription": "Trwale usuwa to opakowanie lub pojemnik z zapasu. Zarejestrowane dawki pozostają bez zmian.", - "deleteSuccess": "Zapas usunięty.", + "deleteSuccess": "Zapas usunięty", "deleteFailed": "Nie udało się usunąć zapasu.", "containerTypeLabel": "Rodzaj pojemnika", "containerType": { @@ -2139,7 +2146,7 @@ "scaleToggleLabel": "Skala wykresu" }, "import": { - "resultSuccess": "Zaimportowano przyjęcia: {imported}.", + "resultSuccess": "Zaimportowano przyjęcia: {imported}", "resultPartial": "Zaimportowano {imported}, pominięto {skipped}.", "resultNothing": "Nic nie zaimportowano: pominięto wszystkie wpisy ({skipped}).", "resultAlreadyRecorded": "Przyjęcia już zapisane: {recorded}. Nie dodano niczego nowego.", @@ -2402,7 +2409,7 @@ "dragHandle": "Przeciągnij, aby zmienić kolejność", "show": "Pokaż", "hide": "Ukryj", - "manageInSettings": "Zarządzaj pigułkami i stronami szczegółów w ustawieniach", + "manageInSettings": "Zarządzaj chipami i stronami szczegółów w ustawieniach", "groupSleep": "Sen", "groupMood": "Nastrój", "groupEvents": "Zdarzenia", @@ -2787,7 +2794,7 @@ "settingsDefaultWindowLabel": "Domyślny okres analizy", "settingsDefaultWindowHint": "Coach czyta ten okres na rozmowę, chyba że wybierzesz inny w nagłówku panelu.", "settingsSave": "Zapisz", - "settingsSaved": "Zapisano.", + "settingsSaved": "Zapisano", "settingsCancel": "Anuluj", "feedbackHelpful": "Przydatne", "feedbackUnhelpful": "Mało przydatne", @@ -4159,13 +4166,13 @@ "overviewDescription": "Pokaż lub ukryj sekcje i ustaw ich kolejność w przeglądzie Analiz." }, "pillOrder": { - "title": "Sortuj pigułki nawigacyjne", - "description": "Przeciągnij pigułki w wybranej kolejności i pokaż lub ukryj je ikoną oka.", + "title": "Sortuj chipy nawigacyjne", + "description": "Przeciągnij chipy w wybranej kolejności i pokaż lub ukryj je ikoną oka.", "dragHandle": "Zmień kolejność", - "saveSuccess": "Zapisano kolejność pigułek.", - "saveError": "Zapisanie kolejności pigułek nie powiodło się.", + "saveSuccess": "Zapisano kolejność chipów", + "saveError": "Zapisanie kolejności chipów nie powiodło się.", "save": "Zapisz", - "empty": "Brak dostępnych pigułek nawigacyjnych.", + "empty": "Brak dostępnych chipów nawigacyjnych.", "detail": "Ukryte strony szczegółów znikają również z górnej nawigacji." }, "customize": "Dostosuj Analizy", @@ -4855,9 +4862,9 @@ "resetDefaultsConfirm": "Zresetuj kolejność", "moveUp": "W górę", "moveDown": "W dół", - "saveSuccess": "Zapisano priorytet źródeł.", + "saveSuccess": "Zapisano priorytet źródeł", "saveError": "Zapisanie priorytetu źródeł nie powiodło się.", - "resetSuccess": "Przywrócono domyślny priorytet źródeł.", + "resetSuccess": "Przywrócono domyślny priorytet źródeł", "perMetricToggle": "Ustawienia dla poszczególnych metryk ({count})", "perMetricHelp": "Metryki dostosowane względem domyślnej kolejności. Użyj tej listy, aby przywrócić pojedynczą metrykę do wartości domyślnej, nie zmieniając pozostałych.", "perMetricEmpty": "Brak indywidualnych ustawień — każda metryka korzysta z globalnej kolejności powyżej.", @@ -5026,7 +5033,7 @@ "failed": "Import nie powiódł się. Spróbuj ponownie.", "readFailed": "Nie można odczytać tego pliku.", "resultSummary": "Zaimportowano {measurements} pomiarów i {moods} wpisów nastroju, pominięto {skipped}.", - "resultSuccess": "Zaimportowano {measurements} pomiarów i {moods} wpisów nastroju.", + "resultSuccess": "Zaimportowano {measurements} pomiarów i {moods} wpisów nastroju", "resultNothing": "Nic nie zaimportowano. Pominięto wszystkie {skipped} wpisów.", "resultEmpty": "Ten plik nie zawierał pomiarów ani wpisów nastroju." }, @@ -5050,10 +5057,10 @@ "previewSummary": "Podgląd: {inserted} zostanie zaimportowanych, pominięto {skipped}.", "resultSummary": "Zaimportowano {inserted} nowych i zaktualizowano {updated}, pominięto {skipped}.", "rowError": "Wiersz {line}: {reason}", - "resultSuccess": "Zaimportowano {inserted} nowych i zaktualizowano {updated}.", + "resultSuccess": "Zaimportowano {inserted} nowych i zaktualizowano {updated}", "resultNothing": "Nic nie zaimportowano. Pominięto wszystkie {skipped} wierszy.", "resultEmpty": "Ten plik ma nagłówek, ale nie zawiera wierszy danych.", - "previewSuccess": "Podgląd: {inserted} zostanie zaimportowanych.", + "previewSuccess": "Podgląd: {inserted} zostanie zaimportowanych", "previewNothing": "Podgląd: nic nie zostanie zaimportowane. Pominięte zostaną wszystkie {skipped} wierszy.", "skipGroupOne": "Pominięto {count} wiersz: {reason}", "skipGroupFew": "Pominięto {count} wiersze: {reason}", @@ -5145,8 +5152,8 @@ }, "insights": { "title": "Analizy", - "description": "Kolejność przeglądu i pigułek nawigacyjnych.", - "subtitle": "Rozmieść sekcje przeglądu i kolejność etykiet." + "description": "Kolejność przeglądu i chipów nawigacyjnych.", + "subtitle": "Rozmieść sekcje przeglądu i kolejność chipów." }, "medications": { "title": "Leki", @@ -5175,7 +5182,7 @@ }, "modules": { "title": "Moduły", - "saved": "Zapisano.", + "saved": "Zapisano", "error": "Nie udało się zapisać. Spróbuj ponownie.", "toggleable": { "title": "Co śledzisz", @@ -5223,7 +5230,7 @@ "use": "Użyj", "select": "Wybierz", "saveError": "Nie udało się zapisać zmiany.", - "homeSaved": "Zapisano lokalizację domową.", + "homeSaved": "Zapisano lokalizację domową", "travelAdded": "Dodano okres lokalizacji.", "travelRemoved": "Usunięto okres lokalizacji.", "backfillQueued": "Zaplanowano uzupełnianie.", @@ -5280,7 +5287,7 @@ "current": "Twój zapisany wybór" }, "save": "Zapisz", - "saved": "Zapisano.", + "saved": "Zapisano", "error": "Nie udało się zapisać. Spróbuj ponownie.", "loadFailed": "Nie udało się wczytać Twojego wyboru.", "eligibilityFailed": "Nie udało się sprawdzić, które filary mają teraz dane. Przełączniki poniżej i tak działają.", @@ -5318,7 +5325,7 @@ "auto": "Automatycznie (język)", "h24": "24-godzinny", "h12": "12-godzinny (AM/PM)", - "saved": "Zapisano format godziny.", + "saved": "Zapisano format godziny", "saveError": "Nie udało się zapisać formatu godziny." }, "dateFormat": { @@ -5328,7 +5335,7 @@ "dmy": "DD.MM.RRRR", "mdy": "MM/DD/RRRR", "ymd": "RRRR-MM-DD", - "saved": "Zapisano format daty.", + "saved": "Zapisano format daty", "saveError": "Nie udało się zapisać formatu daty." }, "username": "Nazwa użytkownika", @@ -5622,7 +5629,7 @@ "clearBody": "Usuwa tylko tekst notatki. Alergie i nietolerancje pozostają bez zmian.", "clearConfirm": "Wyczyść notatkę", "save": "Zapisz", - "savedToast": "Notatka „O mnie” zapisana.", + "savedToast": "Notatka „O mnie” zapisana", "clearedToast": "Notatka „O mnie” usunięta.", "saveError": "Nie udało się zapisać. Spróbuj ponownie.", "loadError": "Nie udało się wczytać notatki.", @@ -5644,14 +5651,14 @@ "title": "Automatyczne czytanie dokumentów przez AI", "subLabel": "Dokumenty są czytane i indeksowane przez skonfigurowanego dostawcę AI bez potwierdzania każdego dokumentu.", "honesty": "Po włączeniu każdy przesłany dokument jest wysyłany do skonfigurowanego dostawcy AI, aby go odczytać, opisać i zaindeksować do wyszukiwania — bez potwierdzania każdego dokumentu. Włączenie działa też wstecz: dokumenty już przesłane, które nie mają jeszcze streszczenia, również zostaną wysłane — do 200 przy każdym włączeniu. Dzieje się to na serwerze, a treść dokumentu opuszcza to urządzenie i trafia do tego dostawcy. Jeśli skonfigurowany dostawca to połączenie subskrypcyjne (zalogowane konto AI zamiast klucza API), obowiązują jego własne ustawienia danych — dostawcy subskrypcyjni mogą wykorzystywać treść do ulepszania swoich modeli i nie obejmuje tego żadna umowa powierzenia przetwarzania danych. Dokumenty odczytywane przez samodzielnie hostowany model lokalny nigdy nie opuszczają Twojego serwera. Domyślnie wyłączone; włącz je tylko wtedy, gdy akceptujesz ten kompromis dla swoich dokumentów.", - "confirm": "Rozumiem — włącz automatyczne czytanie przez AI", + "confirm": "Rozumiem — włącz", "cancel": "Anuluj" }, "centralCodex": { "title": "Użyj wspólnego dostępu AI serwera", "subLabel": "Kieruj zapytania AI przez połączenie skonfigurowane przez operatora dla tego serwera, obok Twoich własnych dostawców jako rozwiązanie awaryjne.", "honesty": "Wspólny dostęp to jedno zalogowane konto AI, które operator podłączył dla wszystkich na tym serwerze — nie Twój własny klucz. Zapytania, które przez nie wysyłasz, są domyślnie wykorzystywane do trenowania modeli dostawcy i nie obejmuje ich żadna umowa powierzenia przetwarzania danych, godzinowe i tygodniowe limity konta dzielisz z wszystkimi innymi, którzy się zgodzili, a Twoi właśni dostawcy są próbowani jako pierwsi. Włącz to tylko, jeśli akceptujesz ten kompromis.", - "confirm": "Rozumiem — użyj wspólnego połączenia", + "confirm": "Rozumiem — użyj połączenia", "cancel": "Anuluj" }, "consent": { @@ -5673,7 +5680,7 @@ "description": "Wybierz sposób wyświetlania odległości i prędkości na wykresach i kafelkach.", "metric": "Metryczne", "imperial": "Imperialne", - "saved": "Zapisano preferencję jednostek.", + "saved": "Zapisano preferencję jednostek", "saveError": "Nie udało się zapisać preferencji jednostek." } }, @@ -5861,7 +5868,7 @@ "errorReconnect": "Błąd — połącz ponownie", "warningServerError": "Synchronizacja nie działa", "failureCount": "{count}/{threshold}", - "parkedReconnect": "Wstrzymane — połącz ręcznie", + "parkedReconnect": "Wstrzymane — połącz ponownie", "notConnected": "Nie połączono", "justNow": "przed chwilą", "minutesAgo": "{count} min temu", @@ -6038,7 +6045,7 @@ "expiryInvalid": "Wygaśnięcie musi mieścić się między 1 a {max} dniami.", "create": "Utwórz link", "tokenCreated": "Link udostępniania utworzony", - "copied": "Skopiowano do schowka.", + "copied": "Skopiowano do schowka", "activeTitle": "Aktywne linki", "noActive": "Brak aktywnych linków udostępniania.", "created": "Utworzono", @@ -6190,7 +6197,7 @@ "revokeSession": "Wyloguj", "revokeError": "Nie udało się zrealizować żądania. Spróbuj ponownie.", "signOutEverywhere": "Wyloguj na pozostałych urządzeniach", - "signOutEverywhereDone": "Wylogowano {count} inną/e sesję/e.", + "signOutEverywhereDone": "Wylogowano {count} inną/e sesję/e", "activityTitle": "Aktywność zabezpieczeń", "activityDescription": "Ostatnie logowania, zmiany zabezpieczeń i eksporty danych Twojego konta.", "activityEmpty": "Brak aktywności zabezpieczeń.", @@ -6271,7 +6278,7 @@ "revokeError": "Nie udało się cofnąć urządzenia. Spróbuj ponownie.", "revoke": "Cofnij", "revokeAll": "Zapomnij wszystkie urządzenia", - "revokeAllDone": "Zapomniano {count} zaufane urządzenie/a.", + "revokeAllDone": "Zapomniano {count} zaufane urządzenie/a", "unnamed": "Nieznane urządzenie", "current": "To urządzenie", "expires": "Zaufane do {date}", @@ -6596,13 +6603,13 @@ "maxUsesLabel": "Maksymalna liczba użyć", "maxUsesHint": "Ile rejestracji dopuszcza ten link (1–50).", "createConfirm": "Utwórz zaproszenie", - "createdToast": "Zaproszenie utworzone.", + "createdToast": "Zaproszenie utworzone", "createError": "Nie udało się utworzyć zaproszenia.", "tokenTitle": "Link z zaproszeniem", "tokenOnceHint": "Do skopiowania tylko teraz — skopiuj link lub udostępnij kod QR do zeskanowania.", "hashExplainer": "Zapisywany jest tylko hash linku — nie można go później ponownie wyświetlić. W razie utraty unieważnij zaproszenie i utwórz nowe.", "copyLink": "Kopiuj link", - "copiedToast": "Link skopiowany.", + "copiedToast": "Link skopiowany", "copyError": "Kopiowanie nie powiodło się.", "qrAlt": "Kod QR linku z zaproszeniem", "loadError": "Nie udało się wczytać zaproszeń.", @@ -7345,7 +7352,7 @@ "saveError": "Zapis nieudany. Spróbuj ponownie.", "hourLabel": "Godzina przypomnienia", "hourAria": "Godzina przypomnienia o nastroju", - "hourSavedToast": "Godzina przypomnienia zaktualizowana.", + "hourSavedToast": "Godzina przypomnienia zaktualizowana", "detail": "Wysyłane tylko skonfigurowanymi już kanałami (Telegram, ntfy, Web Push, Apple Push) i milknie, gdy dziś zapisano nastrój." }, "coachNudge": { @@ -7386,8 +7393,8 @@ "leadLabel": "Czas na ponowne zamówienie (dni)", "leadAria": "Czas na ponowne zamówienie w dniach", "leadHelp": "Alert pojawia się o tyle dni plus jeden interwał dawki wcześniej, aby nowy zapas dotarł przed Twoją ostatnią dawką. Pojedynczy lek może nadpisać tę wartość na swojej karcie zapasu.", - "leadSavedToast": "Czas na ponowne zamówienie zapisany.", - "savedToast": "Próg zapasu zapisany.", + "leadSavedToast": "Czas na ponowne zamówienie zapisany", + "savedToast": "Próg zapasu zapisany", "enabledToast": "Alerty niskiego zapasu włączone.", "disabledToast": "Alerty niskiego zapasu wyłączone.", "saveError": "Zapis nieudany. Spróbuj ponownie.", @@ -8047,10 +8054,10 @@ "protected": "Czy podczas stosunku zastosowano antykoncepcję.", "protectedLabel": "Co oznacza zabezpieczony?" }, - "saveSuccess": "Wpis zapisany.", - "deleteSuccess": "Wpis usunięty.", - "periodStartSaved": "Początek miesiączki zapisany.", - "periodEndSaved": "Koniec miesiączki zapisany.", + "saveSuccess": "Wpis zapisany", + "deleteSuccess": "Wpis usunięty", + "periodStartSaved": "Początek miesiączki zapisany", + "periodEndSaved": "Koniec miesiączki zapisany", "startedPeriodOnDate": "Miesiączka zaczęła się tego dnia", "endedPeriodOnDate": "Miesiączka skończyła się tego dnia" }, @@ -9311,7 +9318,7 @@ "freeText": { "label": "Notatka tekstowa (alergie i nietolerancje)", "hint": "Tekstowe uzupełnienie ustrukturyzowanej listy powyżej, na kontekst, którego pojedynczy wpis nie odda.", - "savedToast": "Notatka o alergiach zapisana.", + "savedToast": "Notatka o alergiach zapisana", "saveError": "Nie udało się zapisać. Spróbuj ponownie." } }, @@ -9370,7 +9377,7 @@ "conditionsLabel": "Choroby przewlekłe", "focusLabel": "Na co zwraca uwagę Coach", "loadError": "Nie udało się wczytać Twoich chorób.", - "savedToast": "Choroby zapisane.", + "savedToast": "Choroby zapisane", "saveError": "Nie udało się zapisać. Spróbuj ponownie." }, "emergency": { @@ -9474,7 +9481,7 @@ }, "toast": { "duplicate": "Już zapisano — istniejący dokument został wyróżniony.", - "deleted": "Dokument usunięty.", + "deleted": "Dokument usunięty", "restoreFailed": "Nie udało się przywrócić dokumentu." }, "timeline": { @@ -9647,9 +9654,9 @@ "unverifiedNoteOther": "{count} wartości wymaga jeszcze sprawdzenia i pozostaje w oczekiwaniu.", "finish": "Zakończ przegląd", "confirmFailed": "Nie udało się zapisać przeglądu. Spróbuj ponownie.", - "savedToastOne": "Zapisano 1 wartość.", - "savedToastFew": "Zapisano {count} wartości.", - "savedToastOther": "Zapisano {count} wartości.", + "savedToastOne": "Zapisano 1 wartość", + "savedToastFew": "Zapisano {count} wartości", + "savedToastOther": "Zapisano {count} wartości", "nothingSavedToast": "Przegląd zapisany. Nie dodano żadnych wartości.", "extract": "Odczytaj wyniki laboratoryjne", "extracting": "Odczytywanie…", @@ -10190,7 +10197,7 @@ "errorRateLimit": "Zbyt wiele profili utworzonych w ostatniej godzinie. Odczekaj chwilę i spróbuj ponownie." }, "toast": { - "savedTo": "Zapisano w karcie użytkownika {name}." + "savedTo": "Zapisano w karcie użytkownika {name}" }, "activityVerb": { "measurementCreate": "{name} dodał pomiar", diff --git a/src/components/measurements/measurement-list.tsx b/src/components/measurements/measurement-list.tsx index 912e9c5d7..55fff40b8 100644 --- a/src/components/measurements/measurement-list.tsx +++ b/src/components/measurements/measurement-list.tsx @@ -625,7 +625,9 @@ export function MeasurementList({ await refetchInactiveDailyReads(queryClient); clearSelection(); toast.success( - t("measurements.bulkDeleteSuccess", { count: String(deleted) }), + deleted === 1 + ? t("measurements.bulkDeleteSuccessOne") + : t("measurements.bulkDeleteSuccess", { count: String(deleted) }), { action: { label: t("common.undo"), @@ -1462,12 +1464,20 @@ export function MeasurementList({ onClear={clearSelection} onConfirmDelete={onConfirmBulkDelete} isDeleting={bulkDeleteMutation.isPending} - confirmTitle={t("measurements.bulkDeleteConfirmTitle", { - count: String(selectedOnPage), - })} - confirmBody={t("measurements.bulkDeleteConfirmBody", { - count: String(selectedOnPage), - })} + confirmTitle={ + selectedOnPage === 1 + ? t("measurements.bulkDeleteConfirmTitleOne") + : t("measurements.bulkDeleteConfirmTitle", { + count: String(selectedOnPage), + }) + } + confirmBody={ + selectedOnPage === 1 + ? t("measurements.bulkDeleteConfirmBodyOne") + : t("measurements.bulkDeleteConfirmBody", { + count: String(selectedOnPage), + }) + } /> {/* Pagination */} diff --git a/src/components/medications/sections/notifications-section.tsx b/src/components/medications/sections/notifications-section.tsx index f5d2e2480..fa78453b3 100644 --- a/src/components/medications/sections/notifications-section.tsx +++ b/src/components/medications/sections/notifications-section.tsx @@ -150,14 +150,20 @@ export function NotificationsBody({ {clientManaged ? ( // v1.5.5 §9.6 — iPhone-managed path. The switch is hidden; // the read-only chip tells the user where the toggle lives. -

{t("medications.detail.notifications.clientManagedChip")} -

+

+ {t("medications.detail.notifications.clientManagedHint")} +

+ ) : (