mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
chore(i18n): retire 414 dead translation keys across six locale bundles
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.
This commit is contained in:
1 parent
39fef7d316
commit
2960f7352c
7 files changed
+54
-1063
No files matched your search
+8
-172
@@ -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": {
|
||||
|
||||
+8
-172
@@ -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": {
|
||||
|
||||
+8
-172
@@ -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": {
|
||||
|
||||
+8
-172
@@ -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": {
|
||||
|
||||
+8
-172
@@ -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": {
|
||||
|
||||
+8
-172
@@ -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": {
|
||||
|
||||
@@ -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("<HealthScoreCard>", () => {
|
||||
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(
|
||||
<I18nProvider initialLocale="en">
|
||||
<Probe />
|
||||
</I18nProvider>,
|
||||
);
|
||||
expect(onAskCoach).toHaveBeenCalledTimes(1);
|
||||
expect(captured).toBe("Why is my health score 86 out of 100?");
|
||||
});
|
||||
|
||||
it("renders German strings", () => {
|
||||
const html = ssr(
|
||||
|
||||
Reference in new issue
Block a user