From 2960f7352c1874a433eef7119c0c1b775bcd016b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 15 May 2026 17:11:26 +0200 Subject: [PATCH] chore(i18n): retire 414 dead translation keys across six locale bundles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sweeps 154 dead keys per locale bundle (~924 strings across six locales) flagged by the v1.4.27 dead-key audit. Drops the insights.*Status* trio (loading / noKey / unavailable) across six metrics, the legacy `insights.aiInsights` / `dashboard.insightsPreview` roots that B1 replaced with the gated tab strip, the `insights.healthScore.askCoach` / `coachPrompt` pair retired with the inline button, the orphan onboarding.v2.* stub set, plus the ad-hoc `medications.glp1.drug.*.class` and `notifications.eventPersonalRecord*` strings that lost their callers in v1.4.25/W17. Also drops the stale prefill-format test under `health-score-card.test.tsx` that asserted the now-removed coachPrompt key shape — the negative-assertion test for the retired inline button stays in place. The locale-integrity test already validates the new shape: no re-baselining needed because the test asserts parity + no-empties rather than a key-count threshold. --- messages/de.json | 180 +----------------- messages/en.json | 180 +----------------- messages/es.json | 180 +----------------- messages/fr.json | 180 +----------------- messages/it.json | 180 +----------------- messages/pl.json | 180 +----------------- .../__tests__/health-score-card.test.tsx | 37 +--- 7 files changed, 54 insertions(+), 1063 deletions(-) diff --git a/messages/de.json b/messages/de.json index f6818c157..48edcbc33 100644 --- a/messages/de.json +++ b/messages/de.json @@ -218,8 +218,6 @@ "streakLabel": "Tage in Folge", "weight": "Gewicht", "bloodPressure": "Blutdruck", - "bloodPressureSys": "Blutdruck (Sys)", - "bloodPressureDia": "Blutdruck (Dia)", "pulse": "Puls", "bodyFat": "Körperfett", "sleep": "Schlaf", @@ -238,7 +236,6 @@ "vo2MaxShort": "VO₂ max", "bpInTargetShort": "BD-Ziel", "medications": "Medikamente", - "insightsPreview": "KI-Insights-Vorschau", "quickAddMeasurement": "Messung erfassen", "quickAddMood": "Stimmung erfassen", "compliance7d": "Einnahmetreue (7 Tage)", @@ -629,8 +626,7 @@ "missedLast30": "Verpasst (30 T.)", "unit": { "days": "T.", - "doses": "Dosen", - "percent": "%" + "doses": "Dosen" }, "chips": { "adherenceTooltip": "Anteil genommener Dosen im 30-Tage-Fenster (ausgelassene Dosen werden ausgenommen).", @@ -651,7 +647,6 @@ "ceilingMessage": "Du bist auf der höchsten Standardstufe.", "escalationDueHint": "Du bist seit {weeks} Wochen auf dieser Stufe; das Schema sieht eine Steigerung typischerweise nach ~{typical} Wochen vor.", "currentStepDwell": "Seit {weeks} Wochen auf dieser Stufe", - "weeksUnit": "Wo.", "doseUnitMg": "mg", "emptyState": "Noch keine Dosis-Historie. Erfasse eine Dosis, um deine Position im Schema zu sehen.", "nonStandardDose": "Aktuelle Dosis liegt außerhalb des Standard-Schemas.", @@ -704,7 +699,6 @@ "purgeError": "Fehler beim Löschen der Aufzeichnungen", "invalidTimestamp": "Bitte einen gültigen Zeitpunkt wählen.", "noIntakesYet": "Noch keine Einnahmen vorhanden", - "deleteIntakeAriaLabel": "Einnahme löschen", "actions": "Aktionen", "pageInfo": "Seite {page} von {total}", "loginRequiredIntakes": "Bitte anmelden, um Einnahmen zu sehen.", @@ -738,29 +732,20 @@ "glp1": { "drug": { "tirzepatide": { - "name": "Tirzepatid", - "class": "GIP-GLP-1-Doppel-Agonist" + "name": "Tirzepatid" }, "semaglutide": { - "name": "Semaglutid", - "class": "GLP-1-Rezeptoragonist" + "name": "Semaglutid" }, "liraglutide": { - "name": "Liraglutid", - "class": "GLP-1-Rezeptoragonist" + "name": "Liraglutid" }, "dulaglutide": { - "name": "Dulaglutid", - "class": "GLP-1-Rezeptoragonist" + "name": "Dulaglutid" }, "exenatide": { - "name": "Exenatid", - "class": "GLP-1-Rezeptoragonist" + "name": "Exenatid" } - }, - "source": { - "ema": "EMA-Quelle", - "psp4": "Peer-Reviewed Pharmakometrik" } }, "researchMode": { @@ -830,10 +815,6 @@ "trend": "Trend", "perWeek": "/Woche", "totalDelta": "Gesamt", - "selectMedication": "Medikament wählen", - "noComplianceData": "Keine Compliance-Daten verfügbar", - "history": "Verlauf", - "complianceDays90": "Einnahmetreue (90 Tage)", "colorGreen": "Grün:", "colorOrange": "Orange:", "colorRed": "Rot:", @@ -968,10 +949,6 @@ "confidenceMittel": "Mittel", "confidenceGering": "Gering", "loadError": "Auswertungen konnten nicht geladen werden", - "generationFailed": "Die Analyse konnte nicht erstellt werden. Bitte versuche es erneut.", - "title": "Insights", - "subtitle": "KI-basierte Analyse deiner Gesundheitsdaten", - "overviewSubtitle": "Trends, Risiken, Fortschritt auf einen Blick", "heroGenerated": "Erstellt {time}", "heroPersonalBaseline": "Basierend auf deinen letzten 90 Tagen", "heroRegenerate": "Neu generieren", @@ -985,7 +962,6 @@ "heroComingSoonTooltip": "Kommt bald", "heroActionWeeklyReport": "Wochenbericht erstellen", "heroActionAskCoach": "Coach fragen", - "heroActionRerun": "Analyse neu starten", "heroBanner": { "ready": "Dein {week}-Bericht ist bereit", "read": "Lesen", @@ -1005,8 +981,6 @@ "componentMood": "Stimmung", "componentCompliance": "Einnahmetreue", "disclaimer": "Orientierungshilfe — keine ärztliche Bewertung.", - "askCoach": "Coach fragen", - "coachPrompt": "Warum ist mein Gesundheitsscore {score} von 100?", "provenance": { "toggle": "Zusammensetzung", "weightLabel": "Anteil", @@ -1179,13 +1153,10 @@ "providerRateLimitTitle": "Provider rate-limited", "providerRateLimitBody": "Provider ist temporär überlastet; Reset in ~5 min." }, - "viewAll": "Alle ansehen", - "previewEmpty": "Noch keine Empfehlungen.", "relativeJustNow": "gerade eben", "relativeMinutesAgo": "vor {count} Minuten", "relativeHoursAgo": "vor {count} Stunden", "relativeDaysAgo": "vor {count} Tagen", - "navGeneral": "Allgemein", "navOverview": "Übersicht", "navBloodPressure": "Blutdruck", "navWeight": "Gewicht", @@ -1234,38 +1205,7 @@ "action": "Geräte verwalten" } }, - "measurementsOverDays": "{count} Messungen über {days} Tage", - "healthStatus": "Gesundheitsstatus", - "noWeightData": "Keine Gewichtsdaten oder Größe nicht hinterlegt.", - "notEnoughBpData": "Nicht genügend Blutdruckdaten.", - "bpTargetRange": "Zielbereich Blutdruck", - "inTargetRange": "im Zielbereich", - "bpTarget": "Ziel: {range}", - "noDobSet": "Geburtsdatum nicht hinterlegt.", - "avg30dEsc": "30T-Durchschnitt · ESH 2023", - "whoClassification": "WHO-Klassifikation", "correlations": "Korrelationen", - "weightVsBp": "Gewicht vs. Blutdruck (Systolisch)", - "strengthStrong": "Starke Korrelation", - "strengthModerate": "Moderate Korrelation", - "strengthWeak": "Schwache Korrelation", - "strengthNone": "Keine Korrelation", - "weightBpStrong": "Es besteht ein starker Zusammenhang zwischen Gewicht und Blutdruck.", - "weightBpModerate": "Es besteht ein moderater Zusammenhang zwischen Gewicht und Blutdruck.", - "weightBpWeak": "Es besteht ein schwacher Zusammenhang zwischen Gewicht und Blutdruck.", - "weightBpNone": "Kein erkennbarer Zusammenhang zwischen Gewicht und Blutdruck.", - "notEnoughCorrelationData": "Zu wenig Daten für Korrelationsanalyse.", - "minCorrelationData": "Mindestens 5 zeitlich übereinstimmende Gewichts- und Blutdruckmessungen nötig.", - "bpMedContinuity": "Blutdrucksenker-Kontinuität vs. Blutdruck (Systolisch)", - "continuityLabel": "Kontinuität", - "continuityBpLabel": "Kontinuität Blutdrucksenker (%)", - "weightKgLabel": "Gewicht (kg)", - "bpMedNegative": "Negativer Zusammenhang: höhere Kontinuität geht eher mit niedrigerem systolischen Blutdruck einher.", - "bpMedPositive": "Positiver Zusammenhang: höhere Kontinuität geht in deinen Daten eher mit höherem systolischen Blutdruck einher.", - "bpMedNone": "Kein erkennbarer Zusammenhang in deinen Daten.", - "bpMedCount": "{count} Blutdrucksenker", - "notEnoughMedData": "Zu wenig Daten für diese Analyse.", - "notEnoughMedDataHint": "Markiere Medikamente als Blutdrucksenker und erfasse ausreichend Einnahmen + Blutdruckmessungen.", "medicationCompliance": "Medikamenten-Compliance", "dayStreak": "{count} Tage Serie", "compliance7d": "7-Tage-Compliance", @@ -1273,11 +1213,6 @@ "taken": "genommen", "skipped": "übersprungen", "missed": "verpasst", - "complianceTrend": "Compliance-Verlauf", - "generalStatusTitle": "Allgemeiner Gesundheitszustand", - "generalStatusLoading": "Allgemeiner Zustand wird erstellt...", - "generalStatusNoKey": "Der allgemeine Zustand kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "generalStatusUnavailable": "Der allgemeine Zustand konnte aktuell nicht geladen werden.", "generalStatusBadge": { "good": "Gut", "watch": "Beobachten", @@ -1285,70 +1220,14 @@ }, "assessmentTitle": "Einschätzung", "bloodPressureSectionTitle": "Blutdruck", - "bloodPressureMedicationListTitle": "Blutdrucksenker & Compliance", - "bloodPressureMedicationListEmpty": "Keine aktiven Blutdrucksenker hinterlegt.", - "bloodPressureStatusLoading": "Blutdruck-Zusammenfassung wird erstellt...", - "bloodPressureStatusNoKey": "Die Blutdruck-Zusammenfassung kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "bloodPressureStatusUnavailable": "Die Blutdruck-Zusammenfassung konnte aktuell nicht geladen werden.", "weightSectionTitle": "Gewicht", - "weightStatusLoading": "Gewichts-Zusammenfassung wird erstellt...", - "weightStatusNoKey": "Die Gewichts-Zusammenfassung kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "weightStatusUnavailable": "Die Gewichts-Zusammenfassung konnte aktuell nicht geladen werden.", "pulseSectionTitle": "Puls", - "pulseStatusLoading": "Puls-Zusammenfassung wird erstellt...", - "pulseStatusNoKey": "Die Puls-Zusammenfassung kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "pulseStatusUnavailable": "Die Puls-Zusammenfassung konnte aktuell nicht geladen werden.", "bmiSectionTitle": "BMI", - "bmiStatusLoading": "BMI-Zusammenfassung wird erstellt...", - "bmiStatusNoKey": "Die BMI-Zusammenfassung kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "bmiStatusUnavailable": "Die BMI-Zusammenfassung konnte aktuell nicht geladen werden.", - "medicationComplianceStatusLoading": "Text zur Medikamentencompliance wird erstellt...", - "medicationComplianceStatusNoKey": "Der Text zur Medikamentencompliance kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "medicationComplianceStatusUnavailable": "Der Text zur Medikamentencompliance konnte aktuell nicht geladen werden.", "complianceNoData": "Keine Compliance-Daten verfügbar", - "aiInsights": "KI-Insights", - "configureApiKey": "Konfiguriere einen OpenAI API-Key in den Einstellungen, um KI-basierte Insights zu erhalten.", - "alertsTitle": "Hinweise & Empfehlungen", - "showLess": "Weniger anzeigen", - "showMore": "+{count} weitere", "generate": "Neue Analyse erstellen", - "generating": "Analyse wird erstellt...", - "lastGenerated": "Letzte Analyse", - "noInsights": "Noch keine Analyse vorhanden.", - "rateLimit": "Bitte warte, bevor du eine neue Analyse erstellst.", - "noApiKey": "Bitte hinterlege zuerst einen OpenAI API-Key in den Einstellungen.", - "sendRawData": "Rohdaten mitsenden", - "minMoodCorrelationData": "Mindestens 5 zeitlich übereinstimmende Stimmungs- und Messdaten nötig.", - "moodBpModerate": "Es besteht ein moderater Zusammenhang zwischen Stimmung und Blutdruck.", - "moodBpNone": "Kein erkennbarer Zusammenhang zwischen Stimmung und Blutdruck.", - "moodBpStrong": "Es besteht ein starker Zusammenhang zwischen Stimmung und Blutdruck.", - "moodBpWeak": "Es besteht ein schwacher Zusammenhang zwischen Stimmung und Blutdruck.", - "moodScoreLabel": "Stimmung (Ø)", "moodSectionTitle": "Stimmung", - "moodStatusLoading": "Stimmungsanalyse wird erstellt...", - "moodStatusNoKey": "Die Stimmungs-Zusammenfassung kann nicht erstellt werden, da kein OpenAI-KI-Schlüssel hinterlegt ist.", - "moodStatusUnavailable": "Stimmungsanalyse nicht verfügbar", - "moodVsBp": "Stimmung vs. Blutdruck (Systolisch)", - "moodVsPulse": "Stimmung vs. Puls", - "moodVsWeight": "Stimmung vs. Gewicht", - "moodWeightModerate": "Es besteht ein moderater Zusammenhang zwischen Stimmung und Gewicht.", - "moodWeightNone": "Kein erkennbarer Zusammenhang zwischen Stimmung und Gewicht.", - "moodWeightStrong": "Es besteht ein starker Zusammenhang zwischen Stimmung und Gewicht.", - "moodWeightWeak": "Es besteht ein schwacher Zusammenhang zwischen Stimmung und Gewicht.", - "notEnoughMoodCorrelationData": "Zu wenig Stimmungsdaten für Korrelationsanalyse.", - "refreshButton": "Aktualisieren", - "generateButton": "Generieren", - "analyzing": "Analysiere Gesundheitsdaten...", "confidence": "Konfidenz", - "confidence_niedrig": "niedrig", - "confidence_mittel": "mittel", - "confidence_hoch": "hoch", - "cached": "Gecacht", - "sectionChanged": "Was hat sich verändert", - "sectionStable": "Was ist stabil", - "sectionDrivers": "Mögliche Zusammenhänge", - "sectionNextSteps": "Nächste Schritte", - "generatePrompt": "Klicke auf \"Generieren\" für KI-basierte Insights deiner Gesundheitsdaten." + "cached": "Gecacht" }, "thresholds": { "defaultLabel": "Default", @@ -1382,45 +1261,7 @@ "unsetExplanation": "Kein eigener Wert — berechneter Default aktiv." }, "onboarding": { - "errorProfile": "Dein Profil konnte nicht gespeichert werden. Bitte versuche es erneut.", "errorGeneric": "Beim Abschluss des Setups ist etwas schiefgelaufen. Bitte versuche es erneut.", - "v2": { - "title": "Willkommen bei HealthLog", - "subtitle": "Drei schnelle Schritte. Alles weitere kannst du später in den Einstellungen erledigen.", - "stepOf": "Schritt {current} von {total}", - "back": "Zurück", - "continue": "Weiter", - "finish": "Setup abschließen", - "skipStep": "Schritt überspringen — du kannst das Setup später in den Einstellungen abschließen.", - "step1": { - "title": "Über dich", - "description": "Wird für Blutdruck-Zielwerte, BMI und passende Erinnerungen genutzt.", - "displayNameLabel": "Anzeigename", - "displayNameHint": "Erscheint in der Dashboard-Begrüßung und in Berichten.", - "languageLabel": "Sprache", - "languageHint": "Wird für App, PDFs und Benachrichtigungen verwendet." - }, - "step2": { - "title": "Lege deine erste Messung an", - "description": "Gewicht, Blutdruck oder Puls — was du gerade zur Hand hast. Schon eine Messung lässt das Dashboard lebendig wirken.", - "added": "Top — weitere Messungen kannst du jederzeit über das Dashboard hinzufügen.", - "skipHint": "Keine Messung zur Hand? Überspringe und logge eine, wenn du soweit bist." - }, - "step3": { - "title": "Wähle einen Benachrichtigungs-Kanal", - "description": "Wir senden nur, was du auch willst. Du kannst weitere Kanäle und Events später feinjustieren.", - "channelTelegramTitle": "Telegram-Bot", - "channelTelegramHint": "Erinnerungen mit Snooze-Buttons direkt in Telegram.", - "channelWebPushTitle": "Web Push", - "channelWebPushHint": "Native Browser-Benachrichtigungen auf diesem Gerät.", - "channelNtfyTitle": "ntfy.sh", - "channelNtfyHint": "Open-Source-Push an Handy oder Desktop, ohne Account.", - "channelNoneTitle": "Vorerst überspringen", - "channelNoneHint": "Ich richte Benachrichtigungen später in den Einstellungen ein.", - "openSettings": "In den Einstellungen fortsetzen" - }, - "doneToast": "Alles eingerichtet — willkommen an Bord." - }, "tour": { "stepOf": "Schritt {current} von {total}", "next": "Weiter", @@ -1466,7 +1307,6 @@ "title": "Was möchtest du erfassen?", "body": "Wähle die Bereiche, die dir wichtig sind. Dashboard und Erinnerungen richten sich danach.", "helpHint": "Ein bis drei Schwerpunkte funktionieren erfahrungsgemäß am besten – mehr geht aber jederzeit.", - "placeholder": "Auswahl der Ziele folgt.", "options": { "weightManagement": "Gewicht im Griff", "bpTracking": "Blutdruck", @@ -1479,7 +1319,6 @@ "source": { "title": "Quelle verbinden", "body": "Werte automatisch übernehmen oder weiter manuell eintragen – deine Entscheidung.", - "placeholder": "Quellenauswahl folgt.", "recommended": "Empfohlen", "manual": { "title": "Manuelle Eingabe", @@ -1500,7 +1339,6 @@ "baseline": { "title": "Kurz zu dir", "body": "Vier optionale Angaben verbessern Zielwerte, BMI und Erinnerungen. Du kannst alles später in den Einstellungen anpassen.", - "placeholder": "Eingabe der Erstmessung folgt.", "displayNameLabel": "Anzeigename", "displayNamePlaceholder": "Wie soll dich HealthLog ansprechen?", "displayNameHint": "Erscheint im Dashboard-Gruß und in Berichten.", @@ -2753,9 +2591,7 @@ "loadError": "Benachrichtigungseinstellungen konnten nicht geladen werden.", "noChannels": "Konfiguriere zuerst einen Benachrichtigungskanal in den Einstellungen.", "goToSettings": "Zu den Einstellungen", - "channelDisabled": "Deaktiviert", - "eventPersonalRecord": "Persönlicher Rekord", - "eventPersonalRecordDesc": "Push bei einem neuen Bestwert für eine erfasste Kennzahl oder ein Training. Standardmäßig aus." + "channelDisabled": "Deaktiviert" }, "i18n": { "maintainershipBanner": { diff --git a/messages/en.json b/messages/en.json index 8a9c62bfc..b2025cd78 100644 --- a/messages/en.json +++ b/messages/en.json @@ -218,8 +218,6 @@ "streakLabel": "days in a row", "weight": "Weight", "bloodPressure": "Blood Pressure", - "bloodPressureSys": "Blood Pressure (Sys)", - "bloodPressureDia": "Blood Pressure (Dia)", "pulse": "Pulse", "bodyFat": "Body Fat", "sleep": "Sleep", @@ -238,7 +236,6 @@ "vo2MaxShort": "VO₂ max", "bpInTargetShort": "BP in Target", "medications": "Medications", - "insightsPreview": "AI Insights preview", "quickAddMeasurement": "Log measurement", "quickAddMood": "Log mood", "compliance7d": "Compliance (7 days)", @@ -629,8 +626,7 @@ "missedLast30": "Missed (30 d.)", "unit": { "days": "d.", - "doses": "doses", - "percent": "%" + "doses": "doses" }, "chips": { "adherenceTooltip": "Share of doses taken across the last 30 days (skipped doses are excluded from the denominator).", @@ -651,7 +647,6 @@ "ceilingMessage": "You are at the top of the standard ladder.", "escalationDueHint": "You've been on this step for {weeks} weeks; the ladder typically steps up around {typical} weeks.", "currentStepDwell": "On this step for {weeks} weeks", - "weeksUnit": "wks", "doseUnitMg": "mg", "emptyState": "No dose history yet. Log a dose to see where you are on the ladder.", "nonStandardDose": "Current dose is outside the standard ladder buckets.", @@ -704,7 +699,6 @@ "purgeError": "Error deleting records", "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", - "deleteIntakeAriaLabel": "Delete intake", "actions": "Actions", "pageInfo": "Page {page} of {total}", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -738,29 +732,20 @@ "glp1": { "drug": { "tirzepatide": { - "name": "Tirzepatide", - "class": "GIP-GLP-1 dual agonist" + "name": "Tirzepatide" }, "semaglutide": { - "name": "Semaglutide", - "class": "GLP-1 receptor agonist" + "name": "Semaglutide" }, "liraglutide": { - "name": "Liraglutide", - "class": "GLP-1 receptor agonist" + "name": "Liraglutide" }, "dulaglutide": { - "name": "Dulaglutide", - "class": "GLP-1 receptor agonist" + "name": "Dulaglutide" }, "exenatide": { - "name": "Exenatide", - "class": "GLP-1 receptor agonist" + "name": "Exenatide" } - }, - "source": { - "ema": "EMA source", - "psp4": "Peer-reviewed pharmacometrics" } }, "researchMode": { @@ -830,10 +815,6 @@ "trend": "Trend", "perWeek": "/week", "totalDelta": "Total", - "selectMedication": "Select medication", - "noComplianceData": "No compliance data available", - "history": "History", - "complianceDays90": "Compliance (90 days)", "colorGreen": "Green:", "colorOrange": "Orange:", "colorRed": "Red:", @@ -968,10 +949,6 @@ "confidenceMittel": "Medium", "confidenceGering": "Low", "loadError": "Failed to load insights", - "generationFailed": "The analysis couldn't be generated. Please try again.", - "title": "Insights", - "subtitle": "AI-powered analysis of your health data", - "overviewSubtitle": "Trends, risks, progress at a glance", "heroGenerated": "Generated {time}", "heroPersonalBaseline": "Based on your last 90 days", "heroRegenerate": "Regenerate", @@ -985,7 +962,6 @@ "heroComingSoonTooltip": "Coming soon", "heroActionWeeklyReport": "Generate weekly report", "heroActionAskCoach": "Ask the coach", - "heroActionRerun": "Re-run analysis", "heroBanner": { "ready": "Your {week} report is ready", "read": "Read", @@ -1005,8 +981,6 @@ "componentMood": "Mood", "componentCompliance": "Meds", "disclaimer": "Indicative — not a clinical assessment.", - "askCoach": "Ask the Coach", - "coachPrompt": "Why is my health score {score} out of 100?", "provenance": { "toggle": "Driven by", "weightLabel": "share", @@ -1179,13 +1153,10 @@ "providerRateLimitTitle": "Provider rate-limited", "providerRateLimitBody": "Provider temporarily rate-limited; retry in ~5 min." }, - "viewAll": "View all", - "previewEmpty": "No recommendations yet.", "relativeJustNow": "just now", "relativeMinutesAgo": "{count} minutes ago", "relativeHoursAgo": "{count} hours ago", "relativeDaysAgo": "{count} days ago", - "navGeneral": "General", "navOverview": "Overview", "navBloodPressure": "Blood Pressure", "navWeight": "Weight", @@ -1234,38 +1205,7 @@ "action": "Manage devices" } }, - "measurementsOverDays": "{count} measurements over {days} days", - "healthStatus": "Health Status", - "noWeightData": "No weight data or height not set.", - "notEnoughBpData": "Not enough blood pressure data.", - "bpTargetRange": "BP Target Range", - "inTargetRange": "in target range", - "bpTarget": "Target: {range}", - "noDobSet": "Date of birth not set.", - "avg30dEsc": "30d average · ESH 2023", - "whoClassification": "WHO Classification", "correlations": "Correlations", - "weightVsBp": "Weight vs. Blood Pressure (Systolic)", - "strengthStrong": "Strong correlation", - "strengthModerate": "Moderate correlation", - "strengthWeak": "Weak correlation", - "strengthNone": "No correlation", - "weightBpStrong": "There is a strong correlation between weight and blood pressure.", - "weightBpModerate": "There is a moderate correlation between weight and blood pressure.", - "weightBpWeak": "There is a weak correlation between weight and blood pressure.", - "weightBpNone": "No discernible correlation between weight and blood pressure.", - "notEnoughCorrelationData": "Not enough data for correlation analysis.", - "minCorrelationData": "At least 5 time-matched weight and blood pressure measurements needed.", - "bpMedContinuity": "BP Medication Continuity vs. Blood Pressure (Systolic)", - "continuityLabel": "Continuity", - "continuityBpLabel": "BP Medication Continuity (%)", - "weightKgLabel": "Weight (kg)", - "bpMedNegative": "Negative correlation: higher continuity tends to be associated with lower systolic blood pressure.", - "bpMedPositive": "Positive correlation: higher continuity tends to be associated with higher systolic blood pressure in your data.", - "bpMedNone": "No discernible correlation in your data.", - "bpMedCount": "{count} BP medications", - "notEnoughMedData": "Not enough data for this analysis.", - "notEnoughMedDataHint": "Tag medications as blood pressure medications and record sufficient intakes + blood pressure measurements.", "medicationCompliance": "Medication Compliance", "dayStreak": "{count} day streak", "compliance7d": "7-day compliance", @@ -1273,11 +1213,6 @@ "taken": "taken", "skipped": "skipped", "missed": "missed", - "complianceTrend": "Compliance Trend", - "generalStatusTitle": "General Health Status", - "generalStatusLoading": "Generating general status...", - "generalStatusNoKey": "The general status cannot be generated because no OpenAI key is configured.", - "generalStatusUnavailable": "The general status is currently unavailable.", "generalStatusBadge": { "good": "Good", "watch": "Watch", @@ -1285,70 +1220,14 @@ }, "assessmentTitle": "Assessment", "bloodPressureSectionTitle": "Blood Pressure", - "bloodPressureMedicationListTitle": "Blood Pressure Medication & Compliance", - "bloodPressureMedicationListEmpty": "No active blood pressure medication configured.", - "bloodPressureStatusLoading": "Generating blood pressure summary...", - "bloodPressureStatusNoKey": "The blood pressure summary cannot be generated because no OpenAI key is configured.", - "bloodPressureStatusUnavailable": "The blood pressure summary is currently unavailable.", "weightSectionTitle": "Weight", - "weightStatusLoading": "Generating weight summary...", - "weightStatusNoKey": "The weight summary cannot be generated because no OpenAI key is configured.", - "weightStatusUnavailable": "The weight summary is currently unavailable.", "pulseSectionTitle": "Pulse", - "pulseStatusLoading": "Generating pulse summary...", - "pulseStatusNoKey": "The pulse summary cannot be generated because no OpenAI key is configured.", - "pulseStatusUnavailable": "The pulse summary is currently unavailable.", "bmiSectionTitle": "BMI", - "bmiStatusLoading": "Generating BMI summary...", - "bmiStatusNoKey": "The BMI summary cannot be generated because no OpenAI key is configured.", - "bmiStatusUnavailable": "The BMI summary is currently unavailable.", - "medicationComplianceStatusLoading": "Generating medication compliance text...", - "medicationComplianceStatusNoKey": "The medication compliance text cannot be generated because no OpenAI key is configured.", - "medicationComplianceStatusUnavailable": "The medication compliance text is currently unavailable.", "complianceNoData": "No compliance data available.", - "aiInsights": "AI Insights", - "configureApiKey": "Configure an OpenAI API key in Settings to get AI-powered insights.", - "alertsTitle": "Notes & Recommendations", - "showLess": "Show less", - "showMore": "+{count} more", "generate": "Generate new analysis", - "generating": "Generating analysis...", - "lastGenerated": "Last analysis", - "noInsights": "No analysis available yet.", - "rateLimit": "Please wait before generating a new analysis.", - "noApiKey": "Please add an OpenAI API key in Settings first.", - "sendRawData": "Send raw data", - "minMoodCorrelationData": "At least 5 temporally matched mood and measurement data points required.", - "moodBpModerate": "There is a moderate correlation between mood and blood pressure.", - "moodBpNone": "No detectable correlation between mood and blood pressure.", - "moodBpStrong": "There is a strong correlation between mood and blood pressure.", - "moodBpWeak": "There is a weak correlation between mood and blood pressure.", - "moodScoreLabel": "Mood (avg)", "moodSectionTitle": "Mood", - "moodStatusLoading": "Generating mood analysis...", - "moodStatusNoKey": "Mood summary cannot be generated because no OpenAI API key is configured.", - "moodStatusUnavailable": "Mood analysis unavailable", - "moodVsBp": "Mood vs. Blood Pressure (Systolic)", - "moodVsPulse": "Mood vs. Pulse", - "moodVsWeight": "Mood vs. Weight", - "moodWeightModerate": "There is a moderate correlation between mood and weight.", - "moodWeightNone": "No detectable correlation between mood and weight.", - "moodWeightStrong": "There is a strong correlation between mood and weight.", - "moodWeightWeak": "There is a weak correlation between mood and weight.", - "notEnoughMoodCorrelationData": "Not enough mood data for correlation analysis.", - "refreshButton": "Refresh", - "generateButton": "Generate", - "analyzing": "Analyzing health data...", "confidence": "Confidence", - "confidence_niedrig": "low", - "confidence_mittel": "medium", - "confidence_hoch": "high", - "cached": "Cached", - "sectionChanged": "What has changed", - "sectionStable": "What is stable", - "sectionDrivers": "Possible correlations", - "sectionNextSteps": "Next steps", - "generatePrompt": "Click \"Generate\" for AI-powered insights about your health data." + "cached": "Cached" }, "thresholds": { "defaultLabel": "Default", @@ -1382,45 +1261,7 @@ "unsetExplanation": "No override — using computed default." }, "onboarding": { - "errorProfile": "Could not save your profile. Please try again.", "errorGeneric": "Something went wrong while finishing setup. Please try again.", - "v2": { - "title": "Welcome to HealthLog", - "subtitle": "Three quick steps. You can finish anything later from Settings.", - "stepOf": "Step {current} of {total}", - "back": "Back", - "continue": "Continue", - "finish": "Finish setup", - "skipStep": "Skip this step — you can finish setup later from Settings.", - "step1": { - "title": "About you", - "description": "Used for blood-pressure targets, BMI, and the right reminders.", - "displayNameLabel": "Display name", - "displayNameHint": "Shown on the dashboard greeting and in reports.", - "languageLabel": "Language", - "languageHint": "We'll use this for the app, PDFs, and notifications." - }, - "step2": { - "title": "Log your first measurement", - "description": "Weight, blood pressure, or pulse — whatever you have right now. The dashboard comes alive with one entry.", - "added": "Got it — you can add more anytime from the dashboard.", - "skipHint": "No measurement at hand? Skip and log one when you're ready." - }, - "step3": { - "title": "Pick one notification channel", - "description": "We'll only send what you ask for. You can add more channels or fine-tune events later.", - "channelTelegramTitle": "Telegram bot", - "channelTelegramHint": "Reminders with snooze buttons inside Telegram.", - "channelWebPushTitle": "Web Push", - "channelWebPushHint": "Native browser notifications on this device.", - "channelNtfyTitle": "ntfy.sh", - "channelNtfyHint": "Open-source push to phone or desktop, no account.", - "channelNoneTitle": "Skip for now", - "channelNoneHint": "I'll set up notifications later from Settings.", - "openSettings": "Continue in Settings" - }, - "doneToast": "You're all set — welcome aboard." - }, "tour": { "stepOf": "Step {current} of {total}", "next": "Next", @@ -1466,7 +1307,6 @@ "title": "What would you like to track?", "body": "Pick the areas you care about. Your dashboard and the default reminders follow your choice.", "helpHint": "One to three priorities tend to work best — you can always add more later.", - "placeholder": "Goal selection coming soon.", "options": { "weightManagement": "Weight management", "bpTracking": "Blood pressure", @@ -1479,7 +1319,6 @@ "source": { "title": "Connect a source", "body": "Bring in measurements automatically, or stay on manual entry — your call.", - "placeholder": "Source picker coming soon.", "recommended": "Recommended", "manual": { "title": "Manual entry", @@ -1500,7 +1339,6 @@ "baseline": { "title": "A bit about you", "body": "Four optional fields sharpen target ranges, BMI and reminders. You can adjust any of them later in Settings.", - "placeholder": "Baseline entry coming soon.", "displayNameLabel": "Display name", "displayNamePlaceholder": "How should HealthLog address you?", "displayNameHint": "Shown on the dashboard greeting and in reports.", @@ -2753,9 +2591,7 @@ "loadError": "Notification preferences could not be loaded.", "noChannels": "Configure a notification channel in Settings first.", "goToSettings": "Go to Settings", - "channelDisabled": "Disabled", - "eventPersonalRecord": "Personal Record", - "eventPersonalRecordDesc": "Push when an all-time best is reached for a tracked metric or workout. Off by default." + "channelDisabled": "Disabled" }, "i18n": { "maintainershipBanner": { diff --git a/messages/es.json b/messages/es.json index 93bd7912c..e63275486 100644 --- a/messages/es.json +++ b/messages/es.json @@ -218,8 +218,6 @@ "streakLabel": "days in a row", "weight": "Peso", "bloodPressure": "Presión arterial", - "bloodPressureSys": "Blood Pressure (Sys)", - "bloodPressureDia": "Blood Pressure (Dia)", "pulse": "Pulso", "bodyFat": "Grasa corporal", "sleep": "Sueño", @@ -238,7 +236,6 @@ "vo2MaxShort": "VO₂ max", "bpInTargetShort": "PA-objetivo", "medications": "Medicamentos", - "insightsPreview": "AI Insights preview", "quickAddMeasurement": "Log measurement", "quickAddMood": "Log mood", "compliance7d": "Compliance (7 days)", @@ -629,8 +626,7 @@ "missedLast30": "Olvidadas (30 d.)", "unit": { "days": "d.", - "doses": "dosis", - "percent": "%" + "doses": "dosis" }, "chips": { "adherenceTooltip": "Proporción de dosis tomadas en los últimos 30 días (las dosis omitidas se excluyen del denominador).", @@ -651,7 +647,6 @@ "ceilingMessage": "Estás en el último escalón estándar.", "escalationDueHint": "Llevas {weeks} semanas en este escalón; el esquema suele avanzar tras ~{typical} semanas.", "currentStepDwell": "En este escalón desde hace {weeks} semanas", - "weeksUnit": "sem.", "doseUnitMg": "mg", "emptyState": "Aún no hay historial de dosis. Registra una dosis para ver tu posición en el escalado.", "nonStandardDose": "La dosis actual está fuera de los escalones estándar.", @@ -704,7 +699,6 @@ "purgeError": "Error deleting records", "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", - "deleteIntakeAriaLabel": "Delete intake", "actions": "Acciones", "pageInfo": "Page {page} de{total}", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -738,29 +732,20 @@ "glp1": { "drug": { "tirzepatide": { - "name": "Tirzepatida", - "class": "Agonista dual GIP-GLP-1" + "name": "Tirzepatida" }, "semaglutide": { - "name": "Semaglutida", - "class": "Agonista del receptor GLP-1" + "name": "Semaglutida" }, "liraglutide": { - "name": "Liraglutida", - "class": "Agonista del receptor GLP-1" + "name": "Liraglutida" }, "dulaglutide": { - "name": "Dulaglutida", - "class": "Agonista del receptor GLP-1" + "name": "Dulaglutida" }, "exenatide": { - "name": "Exenatida", - "class": "Agonista del receptor GLP-1" + "name": "Exenatida" } - }, - "source": { - "ema": "Fuente EMA", - "psp4": "Farmacometría revisada por pares" } }, "researchMode": { @@ -830,10 +815,6 @@ "trend": "Tendencia", "perWeek": "/week", "totalDelta": "Total", - "selectMedication": "Select medication", - "noComplianceData": "No compliance data available", - "history": "Historial", - "complianceDays90": "Compliance (90 days)", "colorGreen": "Green:", "colorOrange": "Orange:", "colorRed": "Red:", @@ -968,10 +949,6 @@ "confidenceMittel": "Medium", "confidenceGering": "Low", "loadError": "Failed to load insights", - "generationFailed": "The analysis couldn't be generated. Please try again.", - "title": "Análisis", - "subtitle": "AI-powered analysis of your health data", - "overviewSubtitle": "Trends, risks, progress at a glance", "heroGenerated": "Generated {time}", "heroPersonalBaseline": "Based on your last 90 days", "heroRegenerate": "Regenerate", @@ -985,7 +962,6 @@ "heroComingSoonTooltip": "Coming soon", "heroActionWeeklyReport": "Generate weekly report", "heroActionAskCoach": "Ask the coach", - "heroActionRerun": "Re-run analysis", "heroBanner": { "ready": "Your {week} report is ready", "read": "Read", @@ -1005,8 +981,6 @@ "componentMood": "Estado de ánimo", "componentCompliance": "Meds", "disclaimer": "Indicative — not a clinical assessment.", - "askCoach": "Ask the Coach", - "coachPrompt": "Why is my health score {score} out of 100?", "provenance": { "toggle": "Compuesto por", "weightLabel": "peso", @@ -1179,13 +1153,10 @@ "providerRateLimitTitle": "Provider rate-limited", "providerRateLimitBody": "Provider temporarily rate-limited; retry in ~5 min." }, - "viewAll": "View all", - "previewEmpty": "No recommendations yet.", "relativeJustNow": "just now", "relativeMinutesAgo": "{count} minutes ago", "relativeHoursAgo": "{count} hours ago", "relativeDaysAgo": "{count} days ago", - "navGeneral": "General", "navOverview": "Resumen", "navBloodPressure": "Presión arterial", "navWeight": "Peso", @@ -1234,38 +1205,7 @@ "action": "Manage devices" } }, - "measurementsOverDays": "{count} measurements over {days} days", - "healthStatus": "Health Status", - "noWeightData": "No weight data or height not set.", - "notEnoughBpData": "Not enough blood pressure data.", - "bpTargetRange": "BP Target Range", - "inTargetRange": "in target range", - "bpTarget": "Target: {range}", - "noDobSet": "Date of birth not set.", - "avg30dEsc": "30d average · ESH 2023", - "whoClassification": "WHO Classification", "correlations": "Correlations", - "weightVsBp": "Weight vs. Blood Pressure (Systolic)", - "strengthStrong": "Strong correlation", - "strengthModerate": "Moderate correlation", - "strengthWeak": "Weak correlation", - "strengthNone": "No correlation", - "weightBpStrong": "There is a strong correlation between weight and blood pressure.", - "weightBpModerate": "There is a moderate correlation between weight and blood pressure.", - "weightBpWeak": "There is a weak correlation between weight and blood pressure.", - "weightBpNone": "No discernible correlation between weight and blood pressure.", - "notEnoughCorrelationData": "Not enough data for correlation analysis.", - "minCorrelationData": "At least 5 time-matched weight and blood pressure measurements needed.", - "bpMedContinuity": "BP Medication Continuity vs. Blood Pressure (Systolic)", - "continuityLabel": "Continuity", - "continuityBpLabel": "BP Medication Continuity (%)", - "weightKgLabel": "Weight (kg)", - "bpMedNegative": "Negative correlation: higher continuity tends to be associated with lower systolic blood pressure.", - "bpMedPositive": "Positive correlation: higher continuity tends to be associated with higher systolic blood pressure in your data.", - "bpMedNone": "No discernible correlation in your data.", - "bpMedCount": "{count} BP medications", - "notEnoughMedData": "Not enough data for this analysis.", - "notEnoughMedDataHint": "Tag medications as blood pressure medications and record sufficient intakes + blood pressure measurements.", "medicationCompliance": "Medication Compliance", "dayStreak": "{count} day streak", "compliance7d": "7-day compliance", @@ -1273,11 +1213,6 @@ "taken": "Tomada", "skipped": "Omitida", "missed": "Perdida", - "complianceTrend": "Compliance Trend", - "generalStatusTitle": "General Health Status", - "generalStatusLoading": "Generating general status...", - "generalStatusNoKey": "The general status cannot be generated because no OpenAI key is configured.", - "generalStatusUnavailable": "The general status is currently unavailable.", "generalStatusBadge": { "good": "Bien", "watch": "Watch", @@ -1285,70 +1220,14 @@ }, "assessmentTitle": "Assessment", "bloodPressureSectionTitle": "Presión arterial", - "bloodPressureMedicationListTitle": "Blood Pressure Medication & Compliance", - "bloodPressureMedicationListEmpty": "No active blood pressure medication configured.", - "bloodPressureStatusLoading": "Generating blood pressure summary...", - "bloodPressureStatusNoKey": "The blood pressure summary cannot be generated because no OpenAI key is configured.", - "bloodPressureStatusUnavailable": "The blood pressure summary is currently unavailable.", "weightSectionTitle": "Peso", - "weightStatusLoading": "Generating weight summary...", - "weightStatusNoKey": "The weight summary cannot be generated because no OpenAI key is configured.", - "weightStatusUnavailable": "The weight summary is currently unavailable.", "pulseSectionTitle": "Pulso", - "pulseStatusLoading": "Generating pulse summary...", - "pulseStatusNoKey": "The pulse summary cannot be generated because no OpenAI key is configured.", - "pulseStatusUnavailable": "The pulse summary is currently unavailable.", "bmiSectionTitle": "IMC", - "bmiStatusLoading": "Generating BMI summary...", - "bmiStatusNoKey": "The BMI summary cannot be generated because no OpenAI key is configured.", - "bmiStatusUnavailable": "The BMI summary is currently unavailable.", - "medicationComplianceStatusLoading": "Generating medication compliance text...", - "medicationComplianceStatusNoKey": "The medication compliance text cannot be generated because no OpenAI key is configured.", - "medicationComplianceStatusUnavailable": "The medication compliance text is currently unavailable.", "complianceNoData": "No compliance data available.", - "aiInsights": "AI Insights", - "configureApiKey": "Configure an OpenAI API key in Settings to get AI-powered insights.", - "alertsTitle": "Notes & Recommendations", - "showLess": "Show less", - "showMore": "+{count} more", "generate": "Generate new analysis", - "generating": "Generating analysis...", - "lastGenerated": "Last analysis", - "noInsights": "No analysis available yet.", - "rateLimit": "Please wait before generating a new analysis.", - "noApiKey": "Please add an OpenAI API key in Settings first.", - "sendRawData": "Send raw data", - "minMoodCorrelationData": "At least 5 temporally matched mood and measurement data points required.", - "moodBpModerate": "There is a moderate correlation between mood and blood pressure.", - "moodBpNone": "No detectable correlation between mood and blood pressure.", - "moodBpStrong": "There is a strong correlation between mood and blood pressure.", - "moodBpWeak": "There is a weak correlation between mood and blood pressure.", - "moodScoreLabel": "Mood (avg)", "moodSectionTitle": "Estado de ánimo", - "moodStatusLoading": "Generating mood analysis...", - "moodStatusNoKey": "Mood summary cannot be generated because no OpenAI API key is configured.", - "moodStatusUnavailable": "Mood analysis unavailable", - "moodVsBp": "Mood vs. Blood Pressure (Systolic)", - "moodVsPulse": "Mood vs. Pulse", - "moodVsWeight": "Mood vs. Weight", - "moodWeightModerate": "There is a moderate correlation between mood and weight.", - "moodWeightNone": "No detectable correlation between mood and weight.", - "moodWeightStrong": "There is a strong correlation between mood and weight.", - "moodWeightWeak": "There is a weak correlation between mood and weight.", - "notEnoughMoodCorrelationData": "Not enough mood data for correlation analysis.", - "refreshButton": "Refresh", - "generateButton": "Generate", - "analyzing": "Analyzing health data...", "confidence": "Confidence", - "confidence_niedrig": "low", - "confidence_mittel": "medium", - "confidence_hoch": "high", - "cached": "Cached", - "sectionChanged": "What has changed", - "sectionStable": "What is stable", - "sectionDrivers": "Possible correlations", - "sectionNextSteps": "Next steps", - "generatePrompt": "Click \"Generate\" for AI-powered insights about your health data." + "cached": "Cached" }, "thresholds": { "defaultLabel": "Default", @@ -1382,45 +1261,7 @@ "unsetExplanation": "No override — using computed default." }, "onboarding": { - "errorProfile": "Could not save your profile. Please try again.", "errorGeneric": "Something went wrong while finishing setup. Please try again.", - "v2": { - "title": "Welcome to HealthLog", - "subtitle": "Three quick steps. You can finish anything later from Settings.", - "stepOf": "Step {current} de{total}", - "back": "Atrás", - "continue": "Continuar", - "finish": "Finish setup", - "skipStep": "Skip this step — you can finish setup later from Settings.", - "step1": { - "title": "About you", - "description": "Used for blood-pressure targets, BMI, and the right reminders.", - "displayNameLabel": "Display name", - "displayNameHint": "Shown on the dashboard greeting and in reports.", - "languageLabel": "Idioma", - "languageHint": "We'll use this for the app, PDFs, and notifications." - }, - "step2": { - "title": "Log your first measurement", - "description": "Weight, blood pressure, or pulse — whatever you have right now. The dashboard comes alive with one entry.", - "added": "Got it — you can add more anytime from the dashboard.", - "skipHint": "No measurement at hand? Skip and log one when you're ready." - }, - "step3": { - "title": "Pick one notification channel", - "description": "We'll only send what you ask for. You can add more channels or fine-tune events later.", - "channelTelegramTitle": "Telegram bot", - "channelTelegramHint": "Reminders with snooze buttons inside Telegram.", - "channelWebPushTitle": "Web Push", - "channelWebPushHint": "Native browser notifications on this device.", - "channelNtfyTitle": "ntfy.sh", - "channelNtfyHint": "Open-source push to phone or desktop, no account.", - "channelNoneTitle": "Skip for now", - "channelNoneHint": "I'll set up notifications later from Settings.", - "openSettings": "Continue in Settings" - }, - "doneToast": "You're all set — welcome aboard." - }, "tour": { "stepOf": "Step {current} de{total}", "next": "Siguiente", @@ -1466,7 +1307,6 @@ "title": "¿Qué te gustaría registrar?", "body": "Elige las áreas que te interesan. El panel y los recordatorios se ajustarán a tu elección.", "helpHint": "Una a tres prioridades suelen funcionar mejor — siempre podrás añadir más más adelante.", - "placeholder": "Selección de objetivos próximamente.", "options": { "weightManagement": "Control del peso", "bpTracking": "Presión arterial", @@ -1479,7 +1319,6 @@ "source": { "title": "Conectar una fuente", "body": "Importa las mediciones automáticamente o sigue con la entrada manual, tú decides.", - "placeholder": "Selector de fuente próximamente.", "recommended": "Recomendado", "manual": { "title": "Entrada manual", @@ -1500,7 +1339,6 @@ "baseline": { "title": "Cuéntanos sobre ti", "body": "Cuatro campos opcionales afinan los valores objetivo, el IMC y los recordatorios. Podrás ajustarlo todo más tarde desde Ajustes.", - "placeholder": "Entrada inicial próximamente.", "displayNameLabel": "Nombre para mostrar", "displayNamePlaceholder": "¿Cómo debería llamarte HealthLog?", "displayNameHint": "Aparece en el saludo del panel y en los informes.", @@ -2753,9 +2591,7 @@ "loadError": "Notification preferences could not be loaded.", "noChannels": "Configure a notification channel in Settings first.", "goToSettings": "Go to Settings", - "channelDisabled": "Desactivado", - "eventPersonalRecord": "Récord personal", - "eventPersonalRecordDesc": "Notificación cuando se alcanza un nuevo récord en una métrica o entrenamiento. Desactivado por defecto." + "channelDisabled": "Desactivado" }, "i18n": { "maintainershipBanner": { diff --git a/messages/fr.json b/messages/fr.json index c94acbd3a..2a1fbb713 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -218,8 +218,6 @@ "streakLabel": "days in a row", "weight": "Poids", "bloodPressure": "Tension artérielle", - "bloodPressureSys": "Blood Pressure (Sys)", - "bloodPressureDia": "Blood Pressure (Dia)", "pulse": "Pouls", "bodyFat": "Masse grasse", "sleep": "Sommeil", @@ -238,7 +236,6 @@ "vo2MaxShort": "VO₂ max", "bpInTargetShort": "TA-cible", "medications": "Médicaments", - "insightsPreview": "AI Insights preview", "quickAddMeasurement": "Log measurement", "quickAddMood": "Log mood", "compliance7d": "Compliance (7 days)", @@ -629,8 +626,7 @@ "missedLast30": "Manquées (30 j.)", "unit": { "days": "j.", - "doses": "doses", - "percent": "%" + "doses": "doses" }, "chips": { "adherenceTooltip": "Part des doses prises sur les 30 derniers jours (les doses sautées sont exclues du dénominateur).", @@ -651,7 +647,6 @@ "ceilingMessage": "Vous êtes au sommet du palier standard.", "escalationDueHint": "Vous êtes à ce palier depuis {weeks} semaines ; le schéma prévoit une progression typique après ~{typical} semaines.", "currentStepDwell": "À ce palier depuis {weeks} semaines", - "weeksUnit": "sem.", "doseUnitMg": "mg", "emptyState": "Aucun historique de dose. Enregistrez une dose pour voir votre position dans le schéma.", "nonStandardDose": "La dose actuelle est en dehors des paliers standard.", @@ -704,7 +699,6 @@ "purgeError": "Error deleting records", "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", - "deleteIntakeAriaLabel": "Delete intake", "actions": "Actions", "pageInfo": "Page {page} de{total}", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -738,29 +732,20 @@ "glp1": { "drug": { "tirzepatide": { - "name": "Tirzépatide", - "class": "Agoniste double GIP-GLP-1" + "name": "Tirzépatide" }, "semaglutide": { - "name": "Sémaglutide", - "class": "Agoniste du récepteur GLP-1" + "name": "Sémaglutide" }, "liraglutide": { - "name": "Liraglutide", - "class": "Agoniste du récepteur GLP-1" + "name": "Liraglutide" }, "dulaglutide": { - "name": "Dulaglutide", - "class": "Agoniste du récepteur GLP-1" + "name": "Dulaglutide" }, "exenatide": { - "name": "Exénatide", - "class": "Agoniste du récepteur GLP-1" + "name": "Exénatide" } - }, - "source": { - "ema": "Source EMA", - "psp4": "Pharmacométrie évaluée par les pairs" } }, "researchMode": { @@ -830,10 +815,6 @@ "trend": "Tendance", "perWeek": "/week", "totalDelta": "Total", - "selectMedication": "Select medication", - "noComplianceData": "No compliance data available", - "history": "Historique", - "complianceDays90": "Compliance (90 days)", "colorGreen": "Green:", "colorOrange": "Orange:", "colorRed": "Red:", @@ -968,10 +949,6 @@ "confidenceMittel": "Medium", "confidenceGering": "Low", "loadError": "Failed to load insights", - "generationFailed": "The analysis couldn't be generated. Please try again.", - "title": "Analyses", - "subtitle": "AI-powered analysis of your health data", - "overviewSubtitle": "Trends, risks, progress at a glance", "heroGenerated": "Generated {time}", "heroPersonalBaseline": "Based on your last 90 days", "heroRegenerate": "Regenerate", @@ -985,7 +962,6 @@ "heroComingSoonTooltip": "Coming soon", "heroActionWeeklyReport": "Generate weekly report", "heroActionAskCoach": "Ask the coach", - "heroActionRerun": "Re-run analysis", "heroBanner": { "ready": "Your {week} report is ready", "read": "Read", @@ -1005,8 +981,6 @@ "componentMood": "Humeur", "componentCompliance": "Meds", "disclaimer": "Indicative — not a clinical assessment.", - "askCoach": "Ask the Coach", - "coachPrompt": "Why is my health score {score} out of 100?", "provenance": { "toggle": "Composé de", "weightLabel": "part", @@ -1179,13 +1153,10 @@ "providerRateLimitTitle": "Provider rate-limited", "providerRateLimitBody": "Provider temporarily rate-limited; retry in ~5 min." }, - "viewAll": "View all", - "previewEmpty": "No recommendations yet.", "relativeJustNow": "just now", "relativeMinutesAgo": "{count} minutes ago", "relativeHoursAgo": "{count} hours ago", "relativeDaysAgo": "{count} days ago", - "navGeneral": "General", "navOverview": "Vue d'ensemble", "navBloodPressure": "Tension artérielle", "navWeight": "Poids", @@ -1234,38 +1205,7 @@ "action": "Manage devices" } }, - "measurementsOverDays": "{count} measurements over {days} days", - "healthStatus": "Health Status", - "noWeightData": "No weight data or height not set.", - "notEnoughBpData": "Not enough blood pressure data.", - "bpTargetRange": "BP Target Range", - "inTargetRange": "in target range", - "bpTarget": "Target: {range}", - "noDobSet": "Date of birth not set.", - "avg30dEsc": "30d average · ESH 2023", - "whoClassification": "WHO Classification", "correlations": "Correlations", - "weightVsBp": "Weight vs. Blood Pressure (Systolic)", - "strengthStrong": "Strong correlation", - "strengthModerate": "Moderate correlation", - "strengthWeak": "Weak correlation", - "strengthNone": "No correlation", - "weightBpStrong": "There is a strong correlation between weight and blood pressure.", - "weightBpModerate": "There is a moderate correlation between weight and blood pressure.", - "weightBpWeak": "There is a weak correlation between weight and blood pressure.", - "weightBpNone": "No discernible correlation between weight and blood pressure.", - "notEnoughCorrelationData": "Not enough data for correlation analysis.", - "minCorrelationData": "At least 5 time-matched weight and blood pressure measurements needed.", - "bpMedContinuity": "BP Medication Continuity vs. Blood Pressure (Systolic)", - "continuityLabel": "Continuity", - "continuityBpLabel": "BP Medication Continuity (%)", - "weightKgLabel": "Weight (kg)", - "bpMedNegative": "Negative correlation: higher continuity tends to be associated with lower systolic blood pressure.", - "bpMedPositive": "Positive correlation: higher continuity tends to be associated with higher systolic blood pressure in your data.", - "bpMedNone": "No discernible correlation in your data.", - "bpMedCount": "{count} BP medications", - "notEnoughMedData": "Not enough data for this analysis.", - "notEnoughMedDataHint": "Tag medications as blood pressure medications and record sufficient intakes + blood pressure measurements.", "medicationCompliance": "Medication Compliance", "dayStreak": "{count} day streak", "compliance7d": "7-day compliance", @@ -1273,11 +1213,6 @@ "taken": "Pris", "skipped": "Sauté", "missed": "Manqué", - "complianceTrend": "Compliance Trend", - "generalStatusTitle": "General Health Status", - "generalStatusLoading": "Generating general status...", - "generalStatusNoKey": "The general status cannot be generated because no OpenAI key is configured.", - "generalStatusUnavailable": "The general status is currently unavailable.", "generalStatusBadge": { "good": "Bien", "watch": "Watch", @@ -1285,70 +1220,14 @@ }, "assessmentTitle": "Assessment", "bloodPressureSectionTitle": "Tension artérielle", - "bloodPressureMedicationListTitle": "Blood Pressure Medication & Compliance", - "bloodPressureMedicationListEmpty": "No active blood pressure medication configured.", - "bloodPressureStatusLoading": "Generating blood pressure summary...", - "bloodPressureStatusNoKey": "The blood pressure summary cannot be generated because no OpenAI key is configured.", - "bloodPressureStatusUnavailable": "The blood pressure summary is currently unavailable.", "weightSectionTitle": "Poids", - "weightStatusLoading": "Generating weight summary...", - "weightStatusNoKey": "The weight summary cannot be generated because no OpenAI key is configured.", - "weightStatusUnavailable": "The weight summary is currently unavailable.", "pulseSectionTitle": "Pouls", - "pulseStatusLoading": "Generating pulse summary...", - "pulseStatusNoKey": "The pulse summary cannot be generated because no OpenAI key is configured.", - "pulseStatusUnavailable": "The pulse summary is currently unavailable.", "bmiSectionTitle": "IMC", - "bmiStatusLoading": "Generating BMI summary...", - "bmiStatusNoKey": "The BMI summary cannot be generated because no OpenAI key is configured.", - "bmiStatusUnavailable": "The BMI summary is currently unavailable.", - "medicationComplianceStatusLoading": "Generating medication compliance text...", - "medicationComplianceStatusNoKey": "The medication compliance text cannot be generated because no OpenAI key is configured.", - "medicationComplianceStatusUnavailable": "The medication compliance text is currently unavailable.", "complianceNoData": "No compliance data available.", - "aiInsights": "AI Insights", - "configureApiKey": "Configure an OpenAI API key in Settings to get AI-powered insights.", - "alertsTitle": "Notes & Recommendations", - "showLess": "Show less", - "showMore": "+{count} more", "generate": "Generate new analysis", - "generating": "Generating analysis...", - "lastGenerated": "Last analysis", - "noInsights": "No analysis available yet.", - "rateLimit": "Please wait before generating a new analysis.", - "noApiKey": "Please add an OpenAI API key in Settings first.", - "sendRawData": "Send raw data", - "minMoodCorrelationData": "At least 5 temporally matched mood and measurement data points required.", - "moodBpModerate": "There is a moderate correlation between mood and blood pressure.", - "moodBpNone": "No detectable correlation between mood and blood pressure.", - "moodBpStrong": "There is a strong correlation between mood and blood pressure.", - "moodBpWeak": "There is a weak correlation between mood and blood pressure.", - "moodScoreLabel": "Mood (avg)", "moodSectionTitle": "Humeur", - "moodStatusLoading": "Generating mood analysis...", - "moodStatusNoKey": "Mood summary cannot be generated because no OpenAI API key is configured.", - "moodStatusUnavailable": "Mood analysis unavailable", - "moodVsBp": "Mood vs. Blood Pressure (Systolic)", - "moodVsPulse": "Mood vs. Pulse", - "moodVsWeight": "Mood vs. Weight", - "moodWeightModerate": "There is a moderate correlation between mood and weight.", - "moodWeightNone": "No detectable correlation between mood and weight.", - "moodWeightStrong": "There is a strong correlation between mood and weight.", - "moodWeightWeak": "There is a weak correlation between mood and weight.", - "notEnoughMoodCorrelationData": "Not enough mood data for correlation analysis.", - "refreshButton": "Refresh", - "generateButton": "Generate", - "analyzing": "Analyzing health data...", "confidence": "Confidence", - "confidence_niedrig": "low", - "confidence_mittel": "medium", - "confidence_hoch": "high", - "cached": "Cached", - "sectionChanged": "What has changed", - "sectionStable": "What is stable", - "sectionDrivers": "Possible correlations", - "sectionNextSteps": "Next steps", - "generatePrompt": "Click \"Generate\" for AI-powered insights about your health data." + "cached": "Cached" }, "thresholds": { "defaultLabel": "Default", @@ -1382,45 +1261,7 @@ "unsetExplanation": "No override — using computed default." }, "onboarding": { - "errorProfile": "Could not save your profile. Please try again.", "errorGeneric": "Something went wrong while finishing setup. Please try again.", - "v2": { - "title": "Welcome to HealthLog", - "subtitle": "Three quick steps. You can finish anything later from Settings.", - "stepOf": "Step {current} de{total}", - "back": "Retour", - "continue": "Continuer", - "finish": "Finish setup", - "skipStep": "Skip this step — you can finish setup later from Settings.", - "step1": { - "title": "About you", - "description": "Used for blood-pressure targets, BMI, and the right reminders.", - "displayNameLabel": "Display name", - "displayNameHint": "Shown on the dashboard greeting and in reports.", - "languageLabel": "Langue", - "languageHint": "We'll use this for the app, PDFs, and notifications." - }, - "step2": { - "title": "Log your first measurement", - "description": "Weight, blood pressure, or pulse — whatever you have right now. The dashboard comes alive with one entry.", - "added": "Got it — you can add more anytime from the dashboard.", - "skipHint": "No measurement at hand? Skip and log one when you're ready." - }, - "step3": { - "title": "Pick one notification channel", - "description": "We'll only send what you ask for. You can add more channels or fine-tune events later.", - "channelTelegramTitle": "Telegram bot", - "channelTelegramHint": "Reminders with snooze buttons inside Telegram.", - "channelWebPushTitle": "Web Push", - "channelWebPushHint": "Native browser notifications on this device.", - "channelNtfyTitle": "ntfy.sh", - "channelNtfyHint": "Open-source push to phone or desktop, no account.", - "channelNoneTitle": "Skip for now", - "channelNoneHint": "I'll set up notifications later from Settings.", - "openSettings": "Continue in Settings" - }, - "doneToast": "You're all set — welcome aboard." - }, "tour": { "stepOf": "Step {current} de{total}", "next": "Suivant", @@ -1466,7 +1307,6 @@ "title": "Que souhaitez-vous suivre ?", "body": "Sélectionnez les domaines qui comptent pour vous. Le tableau de bord et les rappels s'y adapteront.", "helpHint": "Un à trois axes prioritaires fonctionnent généralement le mieux, mais vous pourrez en ajouter plus tard.", - "placeholder": "Sélection des objectifs à venir.", "options": { "weightManagement": "Gestion du poids", "bpTracking": "Tension artérielle", @@ -1479,7 +1319,6 @@ "source": { "title": "Connecter une source", "body": "Importez les mesures automatiquement ou conservez la saisie manuelle, c'est vous qui décidez.", - "placeholder": "Sélection de la source à venir.", "recommended": "Recommandé", "manual": { "title": "Saisie manuelle", @@ -1500,7 +1339,6 @@ "baseline": { "title": "Quelques informations", "body": "Quatre champs facultatifs affinent vos seuils cibles, l'IMC et les rappels. Tout reste modifiable plus tard dans les paramètres.", - "placeholder": "Saisie initiale à venir.", "displayNameLabel": "Nom d'affichage", "displayNamePlaceholder": "Comment HealthLog doit-il vous appeler ?", "displayNameHint": "Apparaît dans le message d'accueil du tableau de bord et dans les rapports.", @@ -2753,9 +2591,7 @@ "loadError": "Notification preferences could not be loaded.", "noChannels": "Configure a notification channel in Settings first.", "goToSettings": "Go to Settings", - "channelDisabled": "Désactivé", - "eventPersonalRecord": "Record personnel", - "eventPersonalRecordDesc": "Notification lorsqu'un nouveau record est atteint pour une mesure ou un entraînement. Désactivé par défaut." + "channelDisabled": "Désactivé" }, "i18n": { "maintainershipBanner": { diff --git a/messages/it.json b/messages/it.json index b1cff68c3..dce3009df 100644 --- a/messages/it.json +++ b/messages/it.json @@ -218,8 +218,6 @@ "streakLabel": "days in a row", "weight": "Peso", "bloodPressure": "Pressione arteriosa", - "bloodPressureSys": "Blood Pressure (Sys)", - "bloodPressureDia": "Blood Pressure (Dia)", "pulse": "Polso", "bodyFat": "Massa grassa", "sleep": "Sonno", @@ -238,7 +236,6 @@ "vo2MaxShort": "VO₂ max", "bpInTargetShort": "PA-target", "medications": "Farmaci", - "insightsPreview": "AI Insights preview", "quickAddMeasurement": "Log measurement", "quickAddMood": "Log mood", "compliance7d": "Compliance (7 days)", @@ -629,8 +626,7 @@ "missedLast30": "Mancate (30 g.)", "unit": { "days": "g.", - "doses": "dosi", - "percent": "%" + "doses": "dosi" }, "chips": { "adherenceTooltip": "Quota di dosi assunte negli ultimi 30 giorni (le dosi saltate sono escluse dal denominatore).", @@ -651,7 +647,6 @@ "ceilingMessage": "Sei al gradino più alto della scala standard.", "escalationDueHint": "Sei su questo gradino da {weeks} settimane; lo schema prevede un avanzamento tipico dopo ~{typical} settimane.", "currentStepDwell": "Su questo gradino da {weeks} settimane", - "weeksUnit": "sett.", "doseUnitMg": "mg", "emptyState": "Nessuna cronologia delle dosi. Registra una dose per vedere la tua posizione sulla scala.", "nonStandardDose": "La dose attuale è fuori dai gradini standard.", @@ -704,7 +699,6 @@ "purgeError": "Error deleting records", "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", - "deleteIntakeAriaLabel": "Delete intake", "actions": "Azioni", "pageInfo": "Page {page} di{total}", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -738,29 +732,20 @@ "glp1": { "drug": { "tirzepatide": { - "name": "Tirzepatide", - "class": "Agonista duale GIP-GLP-1" + "name": "Tirzepatide" }, "semaglutide": { - "name": "Semaglutide", - "class": "Agonista del recettore GLP-1" + "name": "Semaglutide" }, "liraglutide": { - "name": "Liraglutide", - "class": "Agonista del recettore GLP-1" + "name": "Liraglutide" }, "dulaglutide": { - "name": "Dulaglutide", - "class": "Agonista del recettore GLP-1" + "name": "Dulaglutide" }, "exenatide": { - "name": "Exenatide", - "class": "Agonista del recettore GLP-1" + "name": "Exenatide" } - }, - "source": { - "ema": "Fonte EMA", - "psp4": "Farmacometria peer-reviewed" } }, "researchMode": { @@ -830,10 +815,6 @@ "trend": "Tendenza", "perWeek": "/week", "totalDelta": "Totale", - "selectMedication": "Select medication", - "noComplianceData": "No compliance data available", - "history": "Cronologia", - "complianceDays90": "Compliance (90 days)", "colorGreen": "Green:", "colorOrange": "Orange:", "colorRed": "Red:", @@ -968,10 +949,6 @@ "confidenceMittel": "Medium", "confidenceGering": "Low", "loadError": "Failed to load insights", - "generationFailed": "The analysis couldn't be generated. Please try again.", - "title": "Analisi", - "subtitle": "AI-powered analysis of your health data", - "overviewSubtitle": "Trends, risks, progress at a glance", "heroGenerated": "Generated {time}", "heroPersonalBaseline": "Based on your last 90 days", "heroRegenerate": "Regenerate", @@ -985,7 +962,6 @@ "heroComingSoonTooltip": "Coming soon", "heroActionWeeklyReport": "Generate weekly report", "heroActionAskCoach": "Ask the coach", - "heroActionRerun": "Re-run analysis", "heroBanner": { "ready": "Your {week} report is ready", "read": "Read", @@ -1005,8 +981,6 @@ "componentMood": "Umore", "componentCompliance": "Meds", "disclaimer": "Indicative — not a clinical assessment.", - "askCoach": "Ask the Coach", - "coachPrompt": "Why is my health score {score} out of 100?", "provenance": { "toggle": "Composto da", "weightLabel": "peso", @@ -1179,13 +1153,10 @@ "providerRateLimitTitle": "Provider rate-limited", "providerRateLimitBody": "Provider temporarily rate-limited; retry in ~5 min." }, - "viewAll": "View all", - "previewEmpty": "No recommendations yet.", "relativeJustNow": "just now", "relativeMinutesAgo": "{count} minutes ago", "relativeHoursAgo": "{count} hours ago", "relativeDaysAgo": "{count} days ago", - "navGeneral": "General", "navOverview": "Panoramica", "navBloodPressure": "Pressione arteriosa", "navWeight": "Peso", @@ -1234,38 +1205,7 @@ "action": "Manage devices" } }, - "measurementsOverDays": "{count} measurements over {days} days", - "healthStatus": "Health Status", - "noWeightData": "No weight data or height not set.", - "notEnoughBpData": "Not enough blood pressure data.", - "bpTargetRange": "BP Target Range", - "inTargetRange": "in target range", - "bpTarget": "Target: {range}", - "noDobSet": "Date of birth not set.", - "avg30dEsc": "30d average · ESH 2023", - "whoClassification": "WHO Classification", "correlations": "Correlations", - "weightVsBp": "Weight vs. Blood Pressure (Systolic)", - "strengthStrong": "Strong correlation", - "strengthModerate": "Moderate correlation", - "strengthWeak": "Weak correlation", - "strengthNone": "No correlation", - "weightBpStrong": "There is a strong correlation between weight and blood pressure.", - "weightBpModerate": "There is a moderate correlation between weight and blood pressure.", - "weightBpWeak": "There is a weak correlation between weight and blood pressure.", - "weightBpNone": "No discernible correlation between weight and blood pressure.", - "notEnoughCorrelationData": "Not enough data for correlation analysis.", - "minCorrelationData": "At least 5 time-matched weight and blood pressure measurements needed.", - "bpMedContinuity": "BP Medication Continuity vs. Blood Pressure (Systolic)", - "continuityLabel": "Continuity", - "continuityBpLabel": "BP Medication Continuity (%)", - "weightKgLabel": "Weight (kg)", - "bpMedNegative": "Negative correlation: higher continuity tends to be associated with lower systolic blood pressure.", - "bpMedPositive": "Positive correlation: higher continuity tends to be associated with higher systolic blood pressure in your data.", - "bpMedNone": "No discernible correlation in your data.", - "bpMedCount": "{count} BP medications", - "notEnoughMedData": "Not enough data for this analysis.", - "notEnoughMedDataHint": "Tag medications as blood pressure medications and record sufficient intakes + blood pressure measurements.", "medicationCompliance": "Medication Compliance", "dayStreak": "{count} day streak", "compliance7d": "7-day compliance", @@ -1273,11 +1213,6 @@ "taken": "Assunta", "skipped": "Saltata", "missed": "Persa", - "complianceTrend": "Compliance Trend", - "generalStatusTitle": "General Health Status", - "generalStatusLoading": "Generating general status...", - "generalStatusNoKey": "The general status cannot be generated because no OpenAI key is configured.", - "generalStatusUnavailable": "The general status is currently unavailable.", "generalStatusBadge": { "good": "Bene", "watch": "Watch", @@ -1285,70 +1220,14 @@ }, "assessmentTitle": "Assessment", "bloodPressureSectionTitle": "Pressione arteriosa", - "bloodPressureMedicationListTitle": "Blood Pressure Medication & Compliance", - "bloodPressureMedicationListEmpty": "No active blood pressure medication configured.", - "bloodPressureStatusLoading": "Generating blood pressure summary...", - "bloodPressureStatusNoKey": "The blood pressure summary cannot be generated because no OpenAI key is configured.", - "bloodPressureStatusUnavailable": "The blood pressure summary is currently unavailable.", "weightSectionTitle": "Peso", - "weightStatusLoading": "Generating weight summary...", - "weightStatusNoKey": "The weight summary cannot be generated because no OpenAI key is configured.", - "weightStatusUnavailable": "The weight summary is currently unavailable.", "pulseSectionTitle": "Polso", - "pulseStatusLoading": "Generating pulse summary...", - "pulseStatusNoKey": "The pulse summary cannot be generated because no OpenAI key is configured.", - "pulseStatusUnavailable": "The pulse summary is currently unavailable.", "bmiSectionTitle": "IMC", - "bmiStatusLoading": "Generating BMI summary...", - "bmiStatusNoKey": "The BMI summary cannot be generated because no OpenAI key is configured.", - "bmiStatusUnavailable": "The BMI summary is currently unavailable.", - "medicationComplianceStatusLoading": "Generating medication compliance text...", - "medicationComplianceStatusNoKey": "The medication compliance text cannot be generated because no OpenAI key is configured.", - "medicationComplianceStatusUnavailable": "The medication compliance text is currently unavailable.", "complianceNoData": "No compliance data available.", - "aiInsights": "AI Insights", - "configureApiKey": "Configure an OpenAI API key in Settings to get AI-powered insights.", - "alertsTitle": "Notes & Recommendations", - "showLess": "Show less", - "showMore": "+{count} more", "generate": "Generate new analysis", - "generating": "Generating analysis...", - "lastGenerated": "Last analysis", - "noInsights": "No analysis available yet.", - "rateLimit": "Please wait before generating a new analysis.", - "noApiKey": "Please add an OpenAI API key in Settings first.", - "sendRawData": "Send raw data", - "minMoodCorrelationData": "At least 5 temporally matched mood and measurement data points required.", - "moodBpModerate": "There is a moderate correlation between mood and blood pressure.", - "moodBpNone": "No detectable correlation between mood and blood pressure.", - "moodBpStrong": "There is a strong correlation between mood and blood pressure.", - "moodBpWeak": "There is a weak correlation between mood and blood pressure.", - "moodScoreLabel": "Mood (avg)", "moodSectionTitle": "Umore", - "moodStatusLoading": "Generating mood analysis...", - "moodStatusNoKey": "Mood summary cannot be generated because no OpenAI API key is configured.", - "moodStatusUnavailable": "Mood analysis unavailable", - "moodVsBp": "Mood vs. Blood Pressure (Systolic)", - "moodVsPulse": "Mood vs. Pulse", - "moodVsWeight": "Mood vs. Weight", - "moodWeightModerate": "There is a moderate correlation between mood and weight.", - "moodWeightNone": "No detectable correlation between mood and weight.", - "moodWeightStrong": "There is a strong correlation between mood and weight.", - "moodWeightWeak": "There is a weak correlation between mood and weight.", - "notEnoughMoodCorrelationData": "Not enough mood data for correlation analysis.", - "refreshButton": "Refresh", - "generateButton": "Generate", - "analyzing": "Analyzing health data...", "confidence": "Confidence", - "confidence_niedrig": "low", - "confidence_mittel": "medium", - "confidence_hoch": "high", - "cached": "Cached", - "sectionChanged": "What has changed", - "sectionStable": "What is stable", - "sectionDrivers": "Possible correlations", - "sectionNextSteps": "Next steps", - "generatePrompt": "Click \"Generate\" for AI-powered insights about your health data." + "cached": "Cached" }, "thresholds": { "defaultLabel": "Default", @@ -1382,45 +1261,7 @@ "unsetExplanation": "No override — using computed default." }, "onboarding": { - "errorProfile": "Could not save your profile. Please try again.", "errorGeneric": "Something went wrong while finishing setup. Please try again.", - "v2": { - "title": "Welcome to HealthLog", - "subtitle": "Three quick steps. You can finish anything later from Settings.", - "stepOf": "Step {current} di{total}", - "back": "Indietro", - "continue": "Continua", - "finish": "Finish setup", - "skipStep": "Skip this step — you can finish setup later from Settings.", - "step1": { - "title": "About you", - "description": "Used for blood-pressure targets, BMI, and the right reminders.", - "displayNameLabel": "Display name", - "displayNameHint": "Shown on the dashboard greeting and in reports.", - "languageLabel": "Lingua", - "languageHint": "We'll use this for the app, PDFs, and notifications." - }, - "step2": { - "title": "Log your first measurement", - "description": "Weight, blood pressure, or pulse — whatever you have right now. The dashboard comes alive with one entry.", - "added": "Got it — you can add more anytime from the dashboard.", - "skipHint": "No measurement at hand? Skip and log one when you're ready." - }, - "step3": { - "title": "Pick one notification channel", - "description": "We'll only send what you ask for. You can add more channels or fine-tune events later.", - "channelTelegramTitle": "Telegram bot", - "channelTelegramHint": "Reminders with snooze buttons inside Telegram.", - "channelWebPushTitle": "Web Push", - "channelWebPushHint": "Native browser notifications on this device.", - "channelNtfyTitle": "ntfy.sh", - "channelNtfyHint": "Open-source push to phone or desktop, no account.", - "channelNoneTitle": "Skip for now", - "channelNoneHint": "I'll set up notifications later from Settings.", - "openSettings": "Continue in Settings" - }, - "doneToast": "You're all set — welcome aboard." - }, "tour": { "stepOf": "Step {current} di{total}", "next": "Avanti", @@ -1466,7 +1307,6 @@ "title": "Cosa vuoi monitorare?", "body": "Scegli gli ambiti che ti interessano. Dashboard e promemoria si adatteranno alle tue scelte.", "helpHint": "Da una a tre priorità funzionano di solito meglio — potrai aggiungerne altre in qualsiasi momento.", - "placeholder": "Selezione degli obiettivi in arrivo.", "options": { "weightManagement": "Gestione del peso", "bpTracking": "Pressione arteriosa", @@ -1479,7 +1319,6 @@ "source": { "title": "Connetti una sorgente", "body": "Importa le misurazioni in automatico oppure resta sull'inserimento manuale, decidi tu.", - "placeholder": "Selettore di sorgente in arrivo.", "recommended": "Consigliato", "manual": { "title": "Inserimento manuale", @@ -1500,7 +1339,6 @@ "baseline": { "title": "Qualcosa su di te", "body": "Quattro campi facoltativi affinano gli intervalli, l'IMC e i promemoria. Puoi modificarli tutti in qualsiasi momento dalle impostazioni.", - "placeholder": "Inserimento iniziale in arrivo.", "displayNameLabel": "Nome visualizzato", "displayNamePlaceholder": "Come deve chiamarti HealthLog?", "displayNameHint": "Compare nel saluto della dashboard e nei report.", @@ -2753,9 +2591,7 @@ "loadError": "Notification preferences could not be loaded.", "noChannels": "Configure a notification channel in Settings first.", "goToSettings": "Go to Settings", - "channelDisabled": "Disabilitato", - "eventPersonalRecord": "Record personale", - "eventPersonalRecordDesc": "Notifica quando viene raggiunto un nuovo record per una metrica o un allenamento. Disattivato per impostazione predefinita." + "channelDisabled": "Disabilitato" }, "i18n": { "maintainershipBanner": { diff --git a/messages/pl.json b/messages/pl.json index 23f5aa1a1..552484481 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -218,8 +218,6 @@ "streakLabel": "days in a row", "weight": "Waga", "bloodPressure": "Ciśnienie krwi", - "bloodPressureSys": "Blood Pressure (Sys)", - "bloodPressureDia": "Blood Pressure (Dia)", "pulse": "Tętno", "bodyFat": "Tkanka tłuszczowa", "sleep": "Sen", @@ -238,7 +236,6 @@ "vo2MaxShort": "VO₂ max", "bpInTargetShort": "RR-cel", "medications": "Leki", - "insightsPreview": "AI Insights preview", "quickAddMeasurement": "Log measurement", "quickAddMood": "Log mood", "compliance7d": "Compliance (7 days)", @@ -629,8 +626,7 @@ "missedLast30": "Pominięte (30 d.)", "unit": { "days": "d.", - "doses": "dawek", - "percent": "%" + "doses": "dawek" }, "chips": { "adherenceTooltip": "Udział dawek przyjętych w ostatnich 30 dniach (pominięte dawki są wyłączone z mianownika).", @@ -651,7 +647,6 @@ "ceilingMessage": "Jesteś na najwyższym stopniu schematu standardowego.", "escalationDueHint": "Jesteś na tym stopniu od {weeks} tygodni; schemat zwykle przewiduje przejście wyżej po ~{typical} tygodniach.", "currentStepDwell": "Na tym stopniu od {weeks} tygodni", - "weeksUnit": "tyg.", "doseUnitMg": "mg", "emptyState": "Brak historii dawek. Zarejestruj dawkę, aby zobaczyć swoją pozycję w schemacie.", "nonStandardDose": "Aktualna dawka jest poza standardowymi stopniami schematu.", @@ -704,7 +699,6 @@ "purgeError": "Error deleting records", "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", - "deleteIntakeAriaLabel": "Delete intake", "actions": "Akcje", "pageInfo": "Page {page} z{total}", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -738,29 +732,20 @@ "glp1": { "drug": { "tirzepatide": { - "name": "Tyrzepatyd", - "class": "Podwójny agonista GIP-GLP-1" + "name": "Tyrzepatyd" }, "semaglutide": { - "name": "Semaglutyd", - "class": "Agonista receptora GLP-1" + "name": "Semaglutyd" }, "liraglutide": { - "name": "Liraglutyd", - "class": "Agonista receptora GLP-1" + "name": "Liraglutyd" }, "dulaglutide": { - "name": "Dulaglutyd", - "class": "Agonista receptora GLP-1" + "name": "Dulaglutyd" }, "exenatide": { - "name": "Eksenatyd", - "class": "Agonista receptora GLP-1" + "name": "Eksenatyd" } - }, - "source": { - "ema": "Źródło EMA", - "psp4": "Farmakometria recenzowana" } }, "researchMode": { @@ -830,10 +815,6 @@ "trend": "Trend", "perWeek": "/week", "totalDelta": "Łącznie", - "selectMedication": "Select medication", - "noComplianceData": "No compliance data available", - "history": "Historia", - "complianceDays90": "Compliance (90 days)", "colorGreen": "Green:", "colorOrange": "Orange:", "colorRed": "Red:", @@ -968,10 +949,6 @@ "confidenceMittel": "Medium", "confidenceGering": "Low", "loadError": "Failed to load insights", - "generationFailed": "The analysis couldn't be generated. Please try again.", - "title": "Statystyki", - "subtitle": "AI-powered analysis of your health data", - "overviewSubtitle": "Trends, risks, progress at a glance", "heroGenerated": "Generated {time}", "heroPersonalBaseline": "Based on your last 90 days", "heroRegenerate": "Regenerate", @@ -985,7 +962,6 @@ "heroComingSoonTooltip": "Coming soon", "heroActionWeeklyReport": "Generate weekly report", "heroActionAskCoach": "Ask the coach", - "heroActionRerun": "Re-run analysis", "heroBanner": { "ready": "Your {week} report is ready", "read": "Read", @@ -1005,8 +981,6 @@ "componentMood": "Nastrój", "componentCompliance": "Meds", "disclaimer": "Indicative — not a clinical assessment.", - "askCoach": "Ask the Coach", - "coachPrompt": "Why is my health score {score} out of 100?", "provenance": { "toggle": "Składa się z", "weightLabel": "udział", @@ -1179,13 +1153,10 @@ "providerRateLimitTitle": "Provider rate-limited", "providerRateLimitBody": "Provider temporarily rate-limited; retry in ~5 min." }, - "viewAll": "View all", - "previewEmpty": "No recommendations yet.", "relativeJustNow": "just now", "relativeMinutesAgo": "{count} minutes ago", "relativeHoursAgo": "{count} hours ago", "relativeDaysAgo": "{count} days ago", - "navGeneral": "General", "navOverview": "Przegląd", "navBloodPressure": "Ciśnienie krwi", "navWeight": "Waga", @@ -1234,38 +1205,7 @@ "action": "Manage devices" } }, - "measurementsOverDays": "{count} measurements over {days} days", - "healthStatus": "Health Status", - "noWeightData": "No weight data or height not set.", - "notEnoughBpData": "Not enough blood pressure data.", - "bpTargetRange": "BP Target Range", - "inTargetRange": "in target range", - "bpTarget": "Target: {range}", - "noDobSet": "Date of birth not set.", - "avg30dEsc": "30d average · ESH 2023", - "whoClassification": "WHO Classification", "correlations": "Correlations", - "weightVsBp": "Weight vs. Blood Pressure (Systolic)", - "strengthStrong": "Strong correlation", - "strengthModerate": "Moderate correlation", - "strengthWeak": "Weak correlation", - "strengthNone": "No correlation", - "weightBpStrong": "There is a strong correlation between weight and blood pressure.", - "weightBpModerate": "There is a moderate correlation between weight and blood pressure.", - "weightBpWeak": "There is a weak correlation between weight and blood pressure.", - "weightBpNone": "No discernible correlation between weight and blood pressure.", - "notEnoughCorrelationData": "Not enough data for correlation analysis.", - "minCorrelationData": "At least 5 time-matched weight and blood pressure measurements needed.", - "bpMedContinuity": "BP Medication Continuity vs. Blood Pressure (Systolic)", - "continuityLabel": "Continuity", - "continuityBpLabel": "BP Medication Continuity (%)", - "weightKgLabel": "Weight (kg)", - "bpMedNegative": "Negative correlation: higher continuity tends to be associated with lower systolic blood pressure.", - "bpMedPositive": "Positive correlation: higher continuity tends to be associated with higher systolic blood pressure in your data.", - "bpMedNone": "No discernible correlation in your data.", - "bpMedCount": "{count} BP medications", - "notEnoughMedData": "Not enough data for this analysis.", - "notEnoughMedDataHint": "Tag medications as blood pressure medications and record sufficient intakes + blood pressure measurements.", "medicationCompliance": "Medication Compliance", "dayStreak": "{count} day streak", "compliance7d": "7-day compliance", @@ -1273,11 +1213,6 @@ "taken": "Przyjęte", "skipped": "Pominięte", "missed": "Pominięte", - "complianceTrend": "Compliance Trend", - "generalStatusTitle": "General Health Status", - "generalStatusLoading": "Generating general status...", - "generalStatusNoKey": "The general status cannot be generated because no OpenAI key is configured.", - "generalStatusUnavailable": "The general status is currently unavailable.", "generalStatusBadge": { "good": "Dobrze", "watch": "Watch", @@ -1285,70 +1220,14 @@ }, "assessmentTitle": "Assessment", "bloodPressureSectionTitle": "Ciśnienie krwi", - "bloodPressureMedicationListTitle": "Blood Pressure Medication & Compliance", - "bloodPressureMedicationListEmpty": "No active blood pressure medication configured.", - "bloodPressureStatusLoading": "Generating blood pressure summary...", - "bloodPressureStatusNoKey": "The blood pressure summary cannot be generated because no OpenAI key is configured.", - "bloodPressureStatusUnavailable": "The blood pressure summary is currently unavailable.", "weightSectionTitle": "Waga", - "weightStatusLoading": "Generating weight summary...", - "weightStatusNoKey": "The weight summary cannot be generated because no OpenAI key is configured.", - "weightStatusUnavailable": "The weight summary is currently unavailable.", "pulseSectionTitle": "Tętno", - "pulseStatusLoading": "Generating pulse summary...", - "pulseStatusNoKey": "The pulse summary cannot be generated because no OpenAI key is configured.", - "pulseStatusUnavailable": "The pulse summary is currently unavailable.", "bmiSectionTitle": "BMI", - "bmiStatusLoading": "Generating BMI summary...", - "bmiStatusNoKey": "The BMI summary cannot be generated because no OpenAI key is configured.", - "bmiStatusUnavailable": "The BMI summary is currently unavailable.", - "medicationComplianceStatusLoading": "Generating medication compliance text...", - "medicationComplianceStatusNoKey": "The medication compliance text cannot be generated because no OpenAI key is configured.", - "medicationComplianceStatusUnavailable": "The medication compliance text is currently unavailable.", "complianceNoData": "No compliance data available.", - "aiInsights": "AI Insights", - "configureApiKey": "Configure an OpenAI API key in Settings to get AI-powered insights.", - "alertsTitle": "Notes & Recommendations", - "showLess": "Show less", - "showMore": "+{count} more", "generate": "Generate new analysis", - "generating": "Generating analysis...", - "lastGenerated": "Last analysis", - "noInsights": "No analysis available yet.", - "rateLimit": "Please wait before generating a new analysis.", - "noApiKey": "Please add an OpenAI API key in Settings first.", - "sendRawData": "Send raw data", - "minMoodCorrelationData": "At least 5 temporally matched mood and measurement data points required.", - "moodBpModerate": "There is a moderate correlation between mood and blood pressure.", - "moodBpNone": "No detectable correlation between mood and blood pressure.", - "moodBpStrong": "There is a strong correlation between mood and blood pressure.", - "moodBpWeak": "There is a weak correlation between mood and blood pressure.", - "moodScoreLabel": "Mood (avg)", "moodSectionTitle": "Nastrój", - "moodStatusLoading": "Generating mood analysis...", - "moodStatusNoKey": "Mood summary cannot be generated because no OpenAI API key is configured.", - "moodStatusUnavailable": "Mood analysis unavailable", - "moodVsBp": "Mood vs. Blood Pressure (Systolic)", - "moodVsPulse": "Mood vs. Pulse", - "moodVsWeight": "Mood vs. Weight", - "moodWeightModerate": "There is a moderate correlation between mood and weight.", - "moodWeightNone": "No detectable correlation between mood and weight.", - "moodWeightStrong": "There is a strong correlation between mood and weight.", - "moodWeightWeak": "There is a weak correlation between mood and weight.", - "notEnoughMoodCorrelationData": "Not enough mood data for correlation analysis.", - "refreshButton": "Refresh", - "generateButton": "Generate", - "analyzing": "Analyzing health data...", "confidence": "Confidence", - "confidence_niedrig": "low", - "confidence_mittel": "medium", - "confidence_hoch": "high", - "cached": "Cached", - "sectionChanged": "What has changed", - "sectionStable": "What is stable", - "sectionDrivers": "Possible correlations", - "sectionNextSteps": "Next steps", - "generatePrompt": "Click \"Generate\" for AI-powered insights about your health data." + "cached": "Cached" }, "thresholds": { "defaultLabel": "Default", @@ -1382,45 +1261,7 @@ "unsetExplanation": "No override — using computed default." }, "onboarding": { - "errorProfile": "Could not save your profile. Please try again.", "errorGeneric": "Something went wrong while finishing setup. Please try again.", - "v2": { - "title": "Welcome to HealthLog", - "subtitle": "Three quick steps. You can finish anything later from Settings.", - "stepOf": "Step {current} z{total}", - "back": "Wstecz", - "continue": "Kontynuuj", - "finish": "Finish setup", - "skipStep": "Skip this step — you can finish setup later from Settings.", - "step1": { - "title": "About you", - "description": "Used for blood-pressure targets, BMI, and the right reminders.", - "displayNameLabel": "Display name", - "displayNameHint": "Shown on the dashboard greeting and in reports.", - "languageLabel": "Język", - "languageHint": "We'll use this for the app, PDFs, and notifications." - }, - "step2": { - "title": "Log your first measurement", - "description": "Weight, blood pressure, or pulse — whatever you have right now. The dashboard comes alive with one entry.", - "added": "Got it — you can add more anytime from the dashboard.", - "skipHint": "No measurement at hand? Skip and log one when you're ready." - }, - "step3": { - "title": "Pick one notification channel", - "description": "We'll only send what you ask for. You can add more channels or fine-tune events later.", - "channelTelegramTitle": "Telegram bot", - "channelTelegramHint": "Reminders with snooze buttons inside Telegram.", - "channelWebPushTitle": "Web Push", - "channelWebPushHint": "Native browser notifications on this device.", - "channelNtfyTitle": "ntfy.sh", - "channelNtfyHint": "Open-source push to phone or desktop, no account.", - "channelNoneTitle": "Skip for now", - "channelNoneHint": "I'll set up notifications later from Settings.", - "openSettings": "Continue in Settings" - }, - "doneToast": "You're all set — welcome aboard." - }, "tour": { "stepOf": "Step {current} z{total}", "next": "Dalej", @@ -1466,7 +1307,6 @@ "title": "Co chcesz śledzić?", "body": "Wybierz obszary, które są dla Ciebie ważne. Pulpit i przypomnienia dostosują się do Twojego wyboru.", "helpHint": "Od jednego do trzech priorytetów zwykle sprawdza się najlepiej — możesz dodać kolejne w dowolnej chwili.", - "placeholder": "Wybór celów wkrótce.", "options": { "weightManagement": "Kontrola wagi", "bpTracking": "Ciśnienie", @@ -1479,7 +1319,6 @@ "source": { "title": "Połącz źródło", "body": "Pobieraj pomiary automatycznie lub zostań przy wpisywaniu ręcznym — Twój wybór.", - "placeholder": "Wybór źródła wkrótce.", "recommended": "Polecane", "manual": { "title": "Wpis ręczny", @@ -1500,7 +1339,6 @@ "baseline": { "title": "Kilka słów o Tobie", "body": "Cztery opcjonalne pola doprecyzują wartości docelowe, BMI i przypomnienia. Wszystko możesz później zmienić w ustawieniach.", - "placeholder": "Wprowadzenie pierwszego wpisu wkrótce.", "displayNameLabel": "Nazwa wyświetlana", "displayNamePlaceholder": "Jak HealthLog ma się do Ciebie zwracać?", "displayNameHint": "Pojawia się w powitaniu na pulpicie i w raportach.", @@ -2753,9 +2591,7 @@ "loadError": "Notification preferences could not be loaded.", "noChannels": "Configure a notification channel in Settings first.", "goToSettings": "Go to Settings", - "channelDisabled": "Wyłączone", - "eventPersonalRecord": "Rekord osobisty", - "eventPersonalRecordDesc": "Powiadomienie po osiągnięciu nowego rekordu w metryce lub treningu. Domyślnie wyłączone." + "channelDisabled": "Wyłączone" }, "i18n": { "maintainershipBanner": { diff --git a/src/components/insights/__tests__/health-score-card.test.tsx b/src/components/insights/__tests__/health-score-card.test.tsx index 6b7e2f12f..723b438dd 100644 --- a/src/components/insights/__tests__/health-score-card.test.tsx +++ b/src/components/insights/__tests__/health-score-card.test.tsx @@ -1,6 +1,6 @@ -import { describe, it, expect, vi } from "vitest"; +import { describe, it, expect } from "vitest"; import { renderToStaticMarkup } from "react-dom/server"; -import { I18nProvider, useTranslations } from "@/lib/i18n/context"; +import { I18nProvider } from "@/lib/i18n/context"; import { HealthScoreCard, type HealthScoreCardProps, @@ -10,9 +10,10 @@ import { * v1.4.20 phase B5 — Personal Health Score card. * * SSR markup pins the slot wrappers so future polish can't silently - * drop the score number, sub-bars or disclaimer. The interactive - * "Ask the Coach" button is exercised through Testing Library so the - * prefill argument forwarded to the parent handler stays stable. + * drop the score number, sub-bars or disclaimer. The inline + * Ask-the-Coach button retired in v1.4.27 B1 — the hero strip + * carries the CTA. The negative-assertion test below pins that + * decision so a future revival has to update the test in lock-step. */ const baseComponents: HealthScoreCardProps["components"] = { @@ -205,32 +206,6 @@ describe("", () => { expect(supplied).not.toContain('data-slot="health-score-card-ask-coach"'); }); - it("captures the score-aware prefill argument when the button is invoked", () => { - // The handler closure receives `t("insights.healthScore.coachPrompt", { score })` - // which interpolates the current score. We assert the closure shape by - // probing the i18n provider directly rather than wiring a DOM testing - // library — the component's onClick lambda is one line and its - // contract is the prefill string format, not the click plumbing. - let captured: string | null = null; - const onAskCoach = vi.fn((prefill: string) => { - captured = prefill; - }); - - function Probe() { - const { t } = useTranslations(); - // Reproduce the same call the button's onClick performs. - onAskCoach(t("insights.healthScore.coachPrompt", { score: 86 })); - return null; - } - - renderToStaticMarkup( - - - , - ); - expect(onAskCoach).toHaveBeenCalledTimes(1); - expect(captured).toBe("Why is my health score 86 out of 100?"); - }); it("renders German strings", () => { const html = ssr(