mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-07 04:12:04 +00:00
chore(i18n): drop 380 dead translation keys flagged in W10 runtime probe
W10's i18n-runtime-gaps probe inventoried 405 unreferenced catalog keys
across both locale files. A second-pass verification against the source
tree (literal `"key"` / `'key'` / backtick exact-match) confirmed 380 of
them as truly orphan and 25 as live references the static analyser had
missed — typically built through template literals or wrapped in
non-string contexts.
This commit removes the 380 verified-dead keys from all six locale
files (en/de/fr/es/it/pl) and prunes the now-empty
`classifications.{bp,pulse,bodyFat}.*` placeholder allow-list entries
in `i18n-locale-integrity.test.ts` so the parity test passes against
the smaller surface.
Top namespaces retired:
settings.* (114 keys) — old setup screens, audit-log
leaf labels, ai providerChain
scaffolding
classifications.* (69 keys) — alerts.* group + legacy per-metric
leaf labels; live classification
surfaces use targets.* now
admin.* (38 keys) — superseded by admin/[section] shell
onboarding.* (21 keys) — v1.4.22 onboarding rewrite leftovers
medications.* (18 keys) — v1.4.18 redesign orphans
dashboard.* (15 keys) — v1.4.20 insights redesign leftovers
bugreport.* (12 keys) — simplified bug-report screen
common.* (12 keys) — generic strings no longer referenced
charts.* (15 keys) — v1.4.20 chart-label slugs
auth.* (10 keys) — auth UI now uses inline copy
notifications.* (10 keys) — toast variants no longer fired
targets.* (9 keys) — replaced by targets.{label,status}.*
measurements.* (7 keys)
comparison.* (6 keys)
mood.* (5 keys)
thresholds.* (4 keys)
achievements.* (4 keys)
format.* (3 keys)
gettingStarted.* (2 keys)
nav.* (1 key)
Verification:
pnpm typecheck → clean
pnpm lint → clean
pnpm vitest run → 3731 passed, 1 skipped
i18n-locale-integrity → 26 / 26 (locales still parity-clean)
This commit is contained in:
1 parent
f16d4b3f0e
commit
fddb975432
7 files changed
+42
-2626
No files matched your search
+7
-437
@@ -9,31 +9,19 @@
|
||||
"close": "Schließen",
|
||||
"loading": "Laden...",
|
||||
"error": "Fehler",
|
||||
"success": "Erfolgreich",
|
||||
"saved": "Gespeichert",
|
||||
"confirm": "Bestätigen",
|
||||
"back": "Zurück",
|
||||
"next": "Weiter",
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"search": "Suchen",
|
||||
"filter": "Filtern",
|
||||
"noData": "Keine Daten vorhanden",
|
||||
"optional": "Optional",
|
||||
"required": "Erforderlich",
|
||||
"all": "Alle",
|
||||
"active": "Aktiv",
|
||||
"inactive": "Inaktiv",
|
||||
"enabled": "Aktiviert",
|
||||
"disabled": "Deaktiviert",
|
||||
"networkError": "Netzwerkfehler",
|
||||
"unknownError": "Unbekannter Fehler",
|
||||
"notLoggedIn": "Nicht angemeldet",
|
||||
"noAccess": "Kein Zugriff",
|
||||
"copied": "Kopiert!",
|
||||
"or": "oder",
|
||||
"unknown": "Unbekannt",
|
||||
"replace": "Ersetzen",
|
||||
"add": "Hinzufügen",
|
||||
"import": "Importieren",
|
||||
"test": "Test",
|
||||
@@ -169,7 +157,6 @@
|
||||
"dashboard": "Dashboard",
|
||||
"measurements": "Messungen",
|
||||
"medications": "Medikamente",
|
||||
"charts": "Verlauf",
|
||||
"insights": "Insights",
|
||||
"targets": "Zielwerte",
|
||||
"achievements": "Erfolge",
|
||||
@@ -198,8 +185,6 @@
|
||||
"auth": {
|
||||
"login": "Anmelden",
|
||||
"register": "Registrieren",
|
||||
"loginTitle": "Anmeldung",
|
||||
"registerTitle": "Registrierung",
|
||||
"username": "Benutzername",
|
||||
"password": "Passwort",
|
||||
"email": "E-Mail-Adresse",
|
||||
@@ -210,26 +195,17 @@
|
||||
"loginWithPassword": "Mit Passwort anmelden",
|
||||
"noAccount": "Noch kein Konto?",
|
||||
"hasAccount": "Bereits ein Konto?",
|
||||
"registerDisabled": "Registrierung ist deaktiviert.",
|
||||
"loginFailed": "Anmeldung fehlgeschlagen",
|
||||
"passkeyFailed": "Passkey-Anmeldung abgebrochen oder fehlgeschlagen",
|
||||
"registerFailed": "Registrierung fehlgeschlagen",
|
||||
"createAccount": "Konto erstellen",
|
||||
"newAccount": "Neues Konto erstellen",
|
||||
"backToPasskey": "Zurück zu Passkey",
|
||||
"passkeySetupLater": "Passkeys kannst du jederzeit in den Einstellungen einrichten.",
|
||||
"passwordMinLength": "Min. 12 Zeichen",
|
||||
"passwordTooShort": "Passwort muss mindestens {minLength} Zeichen lang sein.",
|
||||
"passwordStrength": "Passwortstärke",
|
||||
"strengthWeak": "Sehr schwach",
|
||||
"strengthFair": "Schwach",
|
||||
"strengthGood": "Mittel",
|
||||
"strengthStrong": "Stark",
|
||||
"strengthVeryStrong": "Sehr stark"
|
||||
"passwordTooShort": "Passwort muss mindestens {minLength} Zeichen lang sein."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"subtitle": "Dein Gesundheitsüberblick",
|
||||
"greeting": {
|
||||
"morning": "Guten Morgen",
|
||||
"day": "Hallo",
|
||||
@@ -260,25 +236,13 @@
|
||||
"stepsShort": "Schritte",
|
||||
"vo2MaxShort": "VO₂ max",
|
||||
"bpInTargetShort": "BD-Ziel",
|
||||
"days30Short": "30T",
|
||||
"medications": "Medikamente",
|
||||
"insightsPreview": "KI-Insights-Vorschau",
|
||||
"lastMeasurement": "Letzter Messwert",
|
||||
"noMeasurements": "Noch keine Messwerte",
|
||||
"trend": "Trend",
|
||||
"trendUp": "steigend",
|
||||
"trendDown": "fallend",
|
||||
"trendStable": "stabil",
|
||||
"quickEntry": "Schnelleingabe",
|
||||
"quickAddMeasurement": "Messung erfassen",
|
||||
"quickAddMood": "Stimmung erfassen",
|
||||
"addMeasurement": "Messwert hinzufügen",
|
||||
"compliance7d": "Einnahmetreue (7 Tage)",
|
||||
"complianceGood": "Gut",
|
||||
"complianceLow": "Niedrig",
|
||||
"mood": "Stimmung",
|
||||
"customizeTitle": "Dashboard-Layout",
|
||||
"customizeSubtitle": "Wähle, welche Karten auf dem Dashboard angezeigt werden und in welcher Reihenfolge. Defaults funktionieren sofort.",
|
||||
"layoutReset": "Auf Defaults zurücksetzen",
|
||||
"layoutSaveSuccess": "Dashboard-Layout gespeichert",
|
||||
"layoutSaveError": "Layout konnte nicht gespeichert werden",
|
||||
@@ -297,11 +261,7 @@
|
||||
"lastInjection": "Letzte Injektion",
|
||||
"nextInjection": "Nächste Injektion",
|
||||
"weightDelta": "seit Beginn",
|
||||
"inDays": "in {count} Tagen",
|
||||
"empty": {
|
||||
"title": "Kein aktives GLP-1-Medikament",
|
||||
"description": "Lege einen GLP-1-Rezeptoragonisten an (Mounjaro, Ozempic, Wegovy, …), um Dosis, Zeitplan und Gewichtsverlauf hier zu sehen."
|
||||
}
|
||||
"inDays": "in {count} Tagen"
|
||||
}
|
||||
},
|
||||
"measurements": {
|
||||
@@ -311,7 +271,6 @@
|
||||
"editMeasurement": "Messwert bearbeiten",
|
||||
"type": "Typ",
|
||||
"value": "Wert",
|
||||
"unit": "Einheit",
|
||||
"date": "Datum",
|
||||
"source": "Quelle",
|
||||
"notes": "Notizen",
|
||||
@@ -349,8 +308,6 @@
|
||||
"glucoseContextPostprandial": "Postprandial (2 h nach dem Essen)",
|
||||
"glucoseContextRandom": "Beliebig / ohne Kontext",
|
||||
"glucoseContextBedtime": "Vor dem Schlafen",
|
||||
"glucoseUnit": "Blutzucker-Einheit",
|
||||
"glucoseUnitHint": "Gespeichert in mg/dL; Anzeige-Einheit ist deine Präferenz.",
|
||||
"unitHours": "Stunden",
|
||||
"unitSteps": "Schritte",
|
||||
"sourceManual": "Manuell",
|
||||
@@ -371,7 +328,6 @@
|
||||
"loginRequired": "Bitte anmelden, um Messwerte zu sehen.",
|
||||
"allTypes": "Alle Typen",
|
||||
"measurementCount": "{count} Messwerte",
|
||||
"noMeasurements": "Keine Messwerte vorhanden",
|
||||
"emptyTitle": "Noch keine Messwerte",
|
||||
"emptyDescription": "Erfasse Gewicht, Blutdruck, Puls oder andere Werte, um Trends zu erkennen.",
|
||||
"emptyFilteredTitle": "Kein Messwert passt zum Filter",
|
||||
@@ -382,10 +338,7 @@
|
||||
"actions": "Aktionen",
|
||||
"deleteConfirmTitle": "Messwert löschen?",
|
||||
"deleteConfirmDescription": "Dieser Messwert wird unwiderruflich gelöscht.",
|
||||
"pageInfo": "Seite {page} von {total}",
|
||||
"showing": "Zeigt",
|
||||
"of": "von",
|
||||
"entries": "Einträgen"
|
||||
"pageInfo": "Seite {page} von {total}"
|
||||
},
|
||||
"mood": {
|
||||
"title": "Stimmung",
|
||||
@@ -404,14 +357,9 @@
|
||||
"levelOkay": "Okay",
|
||||
"levelSchlecht": "Schlecht",
|
||||
"levelLausig": "Lausig",
|
||||
"sourceManual": "Manuell",
|
||||
"sourceMoodlog": "moodLog",
|
||||
"sourceWeb": "Web",
|
||||
"sourceTelegram": "Telegram",
|
||||
"sourceDaylio": "Daylio",
|
||||
"allMoods": "Alle Stimmungen",
|
||||
"entryCount": "{count} Einträge",
|
||||
"noEntries": "Keine Stimmungseinträge vorhanden",
|
||||
"emptyTitle": "Noch keine Stimmungseinträge",
|
||||
"emptyDescription": "Erfasse, wie du dich heute fühlst, um Muster über die Zeit zu erkennen.",
|
||||
"emptyFilteredTitle": "Kein Eintrag passt zum Filter",
|
||||
@@ -436,34 +384,21 @@
|
||||
"editMedication": "Medikament bearbeiten",
|
||||
"newMedication": "Neues Medikament",
|
||||
"firstMedication": "Erstes Medikament anlegen",
|
||||
"noMedicationsYet": "Noch keine Medikamente angelegt",
|
||||
"emptyTitle": "Noch keine Medikamente",
|
||||
"emptyDescription": "Lege Medikamente, Dosierungen und Einnahmefenster an, um Compliance zu erfassen.",
|
||||
"loadFailed": "Medikamente konnten nicht geladen werden",
|
||||
"retryLoad": "Erneut laden",
|
||||
"name": "Name",
|
||||
"dose": "Dosis",
|
||||
"doseAmount": "Menge",
|
||||
"doseUnit": "Einheit",
|
||||
"category": "Kategorie",
|
||||
"schedule": "Zeitfenster",
|
||||
"scheduleFrom": "Von",
|
||||
"scheduleTo": "Bis",
|
||||
"scheduleLabel": "Bezeichnung",
|
||||
"scheduleDays": "Tage",
|
||||
"scheduleDaily": "Täglich",
|
||||
"active": "Aktiv",
|
||||
"inactive": "Pausiert",
|
||||
"intakeHistory": "Einnahme-Verlauf",
|
||||
"showIntakeHistory": "Einnahme-Verlauf anzeigen",
|
||||
"hideIntakeHistory": "Einnahme-Verlauf ausblenden",
|
||||
"markTaken": "Eingenommen",
|
||||
"markSkipped": "Übersprungen",
|
||||
"deleteConfirm": "Medikament löschen?",
|
||||
"deleteDescription": "Das Medikament und alle Einnahmen werden unwiderruflich gelöscht.",
|
||||
"noMedications": "Keine Medikamente vorhanden.",
|
||||
"compliance": "Einnahmetreue",
|
||||
"import": "Import",
|
||||
"importIntakes": "Einnahmen importieren",
|
||||
"importDescription": "JSON-Array mit Einnahme-Daten einfügen. Erwartetes Format:",
|
||||
"importUploadFile": "JSON-Datei hochladen",
|
||||
@@ -477,7 +412,6 @@
|
||||
"importInvalidSkipped": "{count} ungültige Einträge übersprungen",
|
||||
"importFailed": "Import fehlgeschlagen",
|
||||
"importInvalidFormat": "Ungültiges JSON-Format",
|
||||
"apiAccess": "API-Zugang",
|
||||
"apiEndpointTitle": "API-Endpoint: {name}",
|
||||
"apiEndpointDescription": "Nutze diesen Endpoint, um Einnahmen per API zu erfassen (z.B. via iPhone-Kurzbefehl oder cron-Job).",
|
||||
"apiEndpointActive": "API-Endpoint aktiv",
|
||||
@@ -492,8 +426,6 @@
|
||||
"statusLoadFailed": "Status konnte nicht geladen werden",
|
||||
"changeFailed": "Ändern fehlgeschlagen",
|
||||
"categoryBloodPressure": "Blutdrucksenker",
|
||||
"categoryCholesterol": "Cholesterin",
|
||||
"categoryDiabetes": "Diabetes",
|
||||
"categoryVitamin": "Vitamine",
|
||||
"categoryThyroid": "Schilddrüse",
|
||||
"categoryHormone": "Hormone",
|
||||
@@ -524,7 +456,6 @@
|
||||
"intakeDeleteConfirm": "Einnahme-Eintrag löschen?",
|
||||
"intakeDeleteDescription": "Dieser Einnahme-Eintrag wird unwiderruflich gelöscht.",
|
||||
"intakeCount": "{count} Einnahmen",
|
||||
"viewHistory": "Verlauf",
|
||||
"today": "Heute",
|
||||
"yesterday": "Gestern",
|
||||
"tomorrow": "Morgen",
|
||||
@@ -568,10 +499,8 @@
|
||||
"glp1DosesPerUnit": "Dosen pro Pen / Ampulle",
|
||||
"glp1DosesPerUnitPlaceholder": "z. B. 4 für einen Mounjaro KwikPen",
|
||||
"glp1DosesPerUnitHelp": "Optional — setzt die Reichweite-Anzeige im Dashboard frei. Mounjaro KwikPen = 4, Ozempic 0,25/0,5 mg = 4, Wegovy Einmal-Pen = 1. Leer lassen, um die Bestandsverfolgung auszuschalten.",
|
||||
"glp1Headline": "{name} · {dose}",
|
||||
"glp1LastInjection": "Letzter Termin: {label}",
|
||||
"glp1LastInjectionWithSite": "Letzter Termin: {label} · {site}",
|
||||
"glp1NextInjection": "Nächster Termin: {label}",
|
||||
"glp1NextInjectionDays": "Nächster Termin: {label} (in {days} Tagen)",
|
||||
"glp1NextInjectionToday": "Nächster Termin: heute",
|
||||
"glp1NextInjectionTomorrow": "Nächster Termin: morgen",
|
||||
@@ -738,7 +667,6 @@
|
||||
"siteThighRight": "Rechter Oberschenkel",
|
||||
"siteUpperArmLeft": "Linker Oberarm",
|
||||
"siteUpperArmRight": "Rechter Oberarm",
|
||||
"sideEffectTagsLabel": "Häufige GLP-1-Nebenwirkungen",
|
||||
"sideEffectTagsHelp": "Tippe einen Chip, um ihn zu den Mood-Tags hinzuzufügen.",
|
||||
"sideEffectTagNausea": "Übelkeit",
|
||||
"sideEffectTagConstipation": "Verstopfung",
|
||||
@@ -774,12 +702,10 @@
|
||||
"purgeError": "Fehler beim Löschen der Aufzeichnungen",
|
||||
"invalidTimestamp": "Bitte einen gültigen Zeitpunkt wählen.",
|
||||
"noIntakesYet": "Noch keine Einnahmen vorhanden",
|
||||
"noIntakesForMedication": "Noch keine Einnahmen für",
|
||||
"deleteIntakeAriaLabel": "Einnahme löschen",
|
||||
"actions": "Aktionen",
|
||||
"pageInfo": "Seite {page} von {total}",
|
||||
"loginRequiredIntakes": "Bitte anmelden, um Einnahmen zu sehen.",
|
||||
"clear": "Löschen",
|
||||
"phaseConfig": "Erinnerungsphasen",
|
||||
"phaseConfigDescription": "Konfiguriere die Zeitpunkte für Erinnerungen.",
|
||||
"phaseGreen": "Grün",
|
||||
@@ -872,24 +798,13 @@
|
||||
}
|
||||
},
|
||||
"charts": {
|
||||
"title": "Verlauf",
|
||||
"subtitle": "Visualisierung deiner Gesundheitsdaten",
|
||||
"timeRange": "Zeitraum",
|
||||
"days7": "7 Tage",
|
||||
"days30": "30 Tage",
|
||||
"days90": "90 Tage",
|
||||
"days365": "1 Jahr",
|
||||
"daysAll": "Alle",
|
||||
"weight": "Gewicht",
|
||||
"bloodPressure": "Blutdruck",
|
||||
"pulse": "Puls",
|
||||
"bodyFat": "Körperfett",
|
||||
"sleep": "Schlaf",
|
||||
"steps": "Schritte",
|
||||
"compliance": "Einnahmetreue",
|
||||
"noData": "Keine Daten im gewählten Zeitraum",
|
||||
"movingAverage": "Gleitender Durchschnitt",
|
||||
"target": "Zielbereich",
|
||||
"bucketWeekly": "Wochendurchschnitt",
|
||||
"bucketMonthly": "Monatsdurchschnitt",
|
||||
"points7Label": "7 Pkt",
|
||||
@@ -911,7 +826,6 @@
|
||||
"avgAllTimeShort": "Allzeit",
|
||||
"trend7dShort": "7-Tage-Trend",
|
||||
"trend": "Trend",
|
||||
"targetRanges": "Zielbereiche",
|
||||
"perWeek": "/Woche",
|
||||
"totalDelta": "Gesamt",
|
||||
"selectMedication": "Medikament wählen",
|
||||
@@ -923,7 +837,6 @@
|
||||
"colorRed": "Rot:",
|
||||
"mood": "Stimmung",
|
||||
"moodScore": "Stimmungswert",
|
||||
"moodMA": "7-Tage-Trend",
|
||||
"moodLabel1": "Lausig",
|
||||
"moodLabel2": "Schlecht",
|
||||
"moodLabel3": "Okay",
|
||||
@@ -961,7 +874,6 @@
|
||||
"personalBaseline": "Dein Mittel",
|
||||
"deltaVsBaseline": "{delta} vs. dein Mittel",
|
||||
"deltaUnchanged": "entspricht deinem Mittel",
|
||||
"targetWeight": "Ziel",
|
||||
"deltaVsTarget": "{delta} vs. Ziel"
|
||||
},
|
||||
"chart": {
|
||||
@@ -989,25 +901,15 @@
|
||||
},
|
||||
"captionLastMonth": "vs. Vormonat",
|
||||
"captionLastYear": "vs. Vorjahr",
|
||||
"delta": {
|
||||
"improved": "{delta} besser",
|
||||
"worsened": "{delta} schlechter",
|
||||
"stable": "unverändert"
|
||||
},
|
||||
"deltaVs": {
|
||||
"lastMonth": "{delta} vs. Vormonat",
|
||||
"lastYear": "{delta} vs. Vorjahr"
|
||||
},
|
||||
"tooltipPrior": "Vorperiode",
|
||||
"tooltipDelta": "Δ {delta}",
|
||||
"unavailable": {
|
||||
"lastMonth": "Vergleich nicht verfügbar — noch keine Daten aus dem Vormonat",
|
||||
"lastYear": "Vergleich nicht verfügbar — noch keine Daten aus dem Vorjahr"
|
||||
},
|
||||
"insightsCallout": {
|
||||
"lastMonth": "Vergleich zum Vormonat aktiv",
|
||||
"lastYear": "Vergleich zum Vorjahr aktiv"
|
||||
},
|
||||
"notAvailableForCompliance": "Vergleich für Compliance nicht verfügbar"
|
||||
},
|
||||
"insights": {
|
||||
@@ -1447,10 +1349,7 @@
|
||||
"generatePrompt": "Klicke auf \"Generieren\" für KI-basierte Insights deiner Gesundheitsdaten."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Persönliche Zielwerte",
|
||||
"subtitle": "Überschreibe den berechneten Zielbereich für jede Metrik. Ohne Eintrag gilt der Default.",
|
||||
"defaultLabel": "Default",
|
||||
"overrideLabel": "Dein Wert",
|
||||
"autoModeLabel": "Auto",
|
||||
"overrideModeLabel": "Überschrieben",
|
||||
"resetAction": "Auf Default zurücksetzen",
|
||||
@@ -1478,32 +1377,11 @@
|
||||
"metricBodyWater": "Körperwasser",
|
||||
"metricBoneMass": "Knochenmasse",
|
||||
"metricOxygenSaturation": "Sauerstoffsättigung (SpO₂)",
|
||||
"unsetExplanation": "Kein eigener Wert — berechneter Default aktiv.",
|
||||
"loadError": "Zielwerte konnten nicht geladen werden"
|
||||
"unsetExplanation": "Kein eigener Wert — berechneter Default aktiv."
|
||||
},
|
||||
"onboarding": {
|
||||
"setupDescription": "Richte dein Profil ein, um loszulegen. Du kannst das auch später in den Einstellungen ändern.",
|
||||
"completeSetup": "Einrichtung abschließen",
|
||||
"skip": "Überspringen",
|
||||
"medicationsTitle": "Nimmst du Medikamente?",
|
||||
"medicationsDescription": "Füge deine Medikamente hinzu, um Erinnerungen und Compliance-Tracking zu nutzen.",
|
||||
"medNamePlaceholder": "Name",
|
||||
"medDosePlaceholder": "Dosis",
|
||||
"notificationsTitle": "Erinnerungen",
|
||||
"notificationsDescription": "HealthLog kann dich an deine Medikamente erinnern. Konfiguriere dies später in den Einstellungen.",
|
||||
"telegramHint": "Erinnerungen per Telegram-Bot mit Snooze-Buttons",
|
||||
"webPushHint": "Browser-Benachrichtigungen direkt auf dein Gerät",
|
||||
"notificationsLater": "Du kannst dies jederzeit in den Einstellungen einrichten.",
|
||||
"targetsTitle": "Zielwerte",
|
||||
"targetsDescription": "Setze optionale Zielwerte für Blutdruck und Gewicht.",
|
||||
"targetSys": "Systolisch (mmHg)",
|
||||
"targetDia": "Diastolisch (mmHg)",
|
||||
"targetWeight": "Zielgewicht (kg)",
|
||||
"errorProfile": "Dein Profil konnte nicht gespeichert werden. Bitte versuche es erneut.",
|
||||
"errorMedication": "Das Medikament „{name}\" konnte nicht angelegt werden. Bitte versuche es erneut oder lege es später unter „Medikamente\" an.",
|
||||
"errorTargets": "Deine Zielwerte konnten nicht gespeichert werden. Bitte versuche es erneut.",
|
||||
"errorGeneric": "Beim Abschluss des Setups ist etwas schiefgelaufen. Bitte versuche es erneut.",
|
||||
"medScheduleHint": "Wir legen ein Standard-Erinnerungsfenster an (08:00–09:00 täglich). Du kannst es jederzeit unter „Medikamente\" anpassen.",
|
||||
"v2": {
|
||||
"title": "Willkommen bei HealthLog",
|
||||
"subtitle": "Drei schnelle Schritte. Alles weitere kannst du später in den Einstellungen erledigen.",
|
||||
@@ -1582,27 +1460,6 @@
|
||||
"step3of4": "Schritt 3 von 4",
|
||||
"step4of4": "Schritt 4 von 4"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Willkommen bei HealthLog",
|
||||
"carouselLabel": "Willkommen – drei Folien",
|
||||
"slideOf": "Folie {current} von {total}",
|
||||
"gotoSlide": "Zu Folie {index} wechseln",
|
||||
"prevSlide": "Vorherige Folie",
|
||||
"nextSlide": "Nächste Folie",
|
||||
"slide1": {
|
||||
"title": "Deine Gesundheitsdaten gehören dir",
|
||||
"body": "HealthLog speichert deine Messwerte auf deiner Infrastruktur. Keine Werbung, keine Drittnutzung, kein Account-Zwang."
|
||||
},
|
||||
"slide2": {
|
||||
"title": "Eine Ansicht für jede Quelle",
|
||||
"body": "Apple Health, Withings und manuelle Einträge laufen in einem konsistenten Verlauf zusammen – inklusive Quellenpriorität pro Metrik."
|
||||
},
|
||||
"slide3": {
|
||||
"title": "Coach und Insights mit Substanz",
|
||||
"body": "Die KI-Auswertung stützt sich ausschließlich auf deine Werte und nennt jede Aussage mit Beleg. Bring-your-own-Key, keine Trainingsdaten."
|
||||
},
|
||||
"cta": "Loslegen"
|
||||
},
|
||||
"goals": {
|
||||
"title": "Was möchtest du erfassen?",
|
||||
"body": "Wähle die Bereiche, die dir wichtig sind. Dashboard und Erinnerungen richten sich danach.",
|
||||
@@ -1669,10 +1526,8 @@
|
||||
"title": "Erste Schritte",
|
||||
"subtitle": "Quick Wins, damit du das Beste aus HealthLog herausholst.",
|
||||
"progress": "{done} von {total} erledigt",
|
||||
"dismiss": "Ausblenden",
|
||||
"dismissAll": "Checkliste ausblenden",
|
||||
"dismissTooltip": "Diesen Punkt ausblenden",
|
||||
"restoreHint": "Du kannst die Checkliste in den Einstellungen wiederherstellen.",
|
||||
"items": {
|
||||
"profileTitle": "Profil einrichten",
|
||||
"profileDescription": "Größe, Geburtsdatum und Geschlecht schalten personalisierte Zielwerte frei.",
|
||||
@@ -1697,8 +1552,6 @@
|
||||
"remainingMany": "Noch {count} Messungen bis zum Trend."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Einstellungen",
|
||||
"subtitle": "Profil, Sicherheit & Verbindungen",
|
||||
"researchMode": {
|
||||
"sectionTitle": "Forschungsmodus",
|
||||
"subtitle": "Optionale Anzeige einer geschätzten GLP-1-Wirkstoffkurve auf Basis der von der EMA veröffentlichten Populations-Pharmakokinetik. Nur zur Anschauung — niemals eine Messung oder ein medizinischer Rat.",
|
||||
@@ -1841,18 +1694,9 @@
|
||||
"coming_soon": "Wird mit dem nächsten Release-Update hierher umziehen."
|
||||
}
|
||||
},
|
||||
"sectionsTitle": "Settings",
|
||||
"categoryGeneral": "Allgemein",
|
||||
"categoryNotifications": "Benachrichtigungen",
|
||||
"categoryAi": "KI",
|
||||
"categoryPersonalization": "Personalisierung",
|
||||
"categoryIntegration": "Integration",
|
||||
"categoryApi": "API",
|
||||
"profile": "Profil",
|
||||
"security": "Sicherheit",
|
||||
"language": "Sprache",
|
||||
"languageDescription": "Wähle die Anzeigesprache der Anwendung.",
|
||||
"languageSystem": "System (automatisch)",
|
||||
"username": "Benutzername",
|
||||
"height": "Körpergröße (cm)",
|
||||
"dateOfBirth": "Geburtsdatum",
|
||||
@@ -1930,16 +1774,6 @@
|
||||
"webPushActive": "Aktiv",
|
||||
"kiInsights": "KI-Insights (OpenAI)",
|
||||
"kiInsightsDescription": "Optional: Hinterlege deinen OpenAI-Key für tägliche, automatische KI-Auswertungen in den Insights.",
|
||||
"kiInsightsBenefitsTitle": "Vorteile mit OpenAI-Key",
|
||||
"kiInsightsBenefit1": "Tägliche Zusammenfassungen für allgemeinen Zustand, Blutdruck, Gewicht, Puls, BMI und Medikamenten-Compliance.",
|
||||
"kiInsightsBenefit2": "Bessere Einordnung von Trends und Korrelationen auf Basis deiner letzten 30 Tagesmesspunkte pro Bereich.",
|
||||
"kiInsightsBenefit3": "Automatische Aktualisierung im Hintergrund, damit die Insights-Seite immer aktuelle Bewertungen zeigt.",
|
||||
"createApiKeyHint": "API-Key erstellen unter:",
|
||||
"createApiKeyLinkLabel": "platform.openai.com/api-keys",
|
||||
"apiKey": "API-Key",
|
||||
"apiKeyStored": "Key hinterlegt — neuen eingeben zum Ersetzen",
|
||||
"apiKeySaved": "API-Key gespeichert",
|
||||
"apiKeyRemoved": "API-Key entfernt",
|
||||
"codexConnected": "ChatGPT erfolgreich verbunden! KI-Insights sind jetzt aktiv.",
|
||||
"codexDisconnected": "ChatGPT-Verbindung getrennt.",
|
||||
"codexConnectionFailed": "ChatGPT-Verbindung fehlgeschlagen. Bitte versuche es erneut.",
|
||||
@@ -1952,18 +1786,10 @@
|
||||
"regenerateRateLimit": "Bitte warte — du hast das stündliche Limit für Analysen erreicht.",
|
||||
"lastGeneratedAt": "Zuletzt generiert",
|
||||
"ai": {
|
||||
"title": "KI-Insights",
|
||||
"description": "Anbieter, Modell, Key.",
|
||||
"chatgptConnectedBadge": "ChatGPT verbunden",
|
||||
"adminAiActiveBadge": "Admin-KI aktiv",
|
||||
"connectionExpiredBadge": "Verbindung abgelaufen",
|
||||
"chatgptConnectedHeading": "ChatGPT verbunden",
|
||||
"chatgptConnectedBody": "Insights werden über dein ChatGPT-Abo generiert — keine zusätzlichen Kosten.",
|
||||
"connectedSince": "Verbunden seit {when}.",
|
||||
"disconnect": "Trennen",
|
||||
"connectChatgptHeading": "Mit ChatGPT verbinden",
|
||||
"connectChatgptBody": "Verbinde dein ChatGPT Pro/Max-Konto um KI-gestützte Gesundheitsanalysen basierend auf aktuellen medizinischen Leitlinien zu erhalten. Keine zusätzlichen API-Kosten.",
|
||||
"connectChatgptCta": "Mit ChatGPT verbinden",
|
||||
"deviceCodeHeading": "Verbindung auf chatgpt.com abschließen",
|
||||
"deviceCodeStep1": "Öffne diesen Link auf einem beliebigen Gerät:",
|
||||
"deviceCodeStep2": "Gib diesen Einmalcode ein:",
|
||||
@@ -1972,42 +1798,20 @@
|
||||
"deviceCodeWaiting": "Warte auf Bestätigung…",
|
||||
"deviceCodeCancel": "Abbrechen",
|
||||
"oauthNotConfigured": "ChatGPT-OAuth ist auf dieser Instanz nicht konfiguriert — nutze stattdessen einen eigenen API-Key unten.",
|
||||
"adminFallback": "Alternativ nutzt HealthLog den vom Administrator konfigurierten KI-Anbieter.",
|
||||
"personalProviderHeading": "KI-Provider (persönlich)",
|
||||
"personalProviderBody": "Eigener KI-Anbieter überschreibt die Admin-Einstellung. Leer lassen für Standard. Für ChatGPT-Pro/Max-OAuth nutze den Verbinden-Button oben.",
|
||||
"providerLabel": "Provider",
|
||||
"providerOptionDefault": "— Standard (Admin/Codex) —",
|
||||
"providerOptionOpenai": "OpenAI (API-Key)",
|
||||
"providerOptionAnthropic": "Anthropic (Claude)",
|
||||
"providerOptionLocal": "Lokal (OpenAI-kompatibel)",
|
||||
"modelLabel": "Modell",
|
||||
"modelOptionDefault": "— Standard —",
|
||||
"modelOptionCustom": "Eigenes…",
|
||||
"customModelLabel": "Eigener Modellname",
|
||||
"openaiKeyLabel": "OpenAI API-Key",
|
||||
"openaiKeyHelp": "Eigener Key — keine Verbindung zu deinem ChatGPT-Abo. Für das Abo nutze den Verbinden-Button oben.",
|
||||
"anthropicKeyLabel": "Anthropic API-Key",
|
||||
"baseUrlLabel": "Base URL",
|
||||
"localKeyLabel": "API-Key (optional)",
|
||||
"savedPreview": "(gespeichert {preview})",
|
||||
"savedShort": "(gespeichert)",
|
||||
"saveCta": "Speichern",
|
||||
"testCta": "Verbindung testen",
|
||||
"removeKeyCta": "Gespeicherten Key entfernen",
|
||||
"keyRemoved": "Gespeicherter Key entfernt",
|
||||
"removeKeyConfirmTitle": "Gespeicherten API-Key entfernen?",
|
||||
"removeKeyConfirmBody": "Insights für diesen Provider fallen auf den Admin-/Codex-Provider zurück, bis du einen neuen Key speicherst.",
|
||||
"saved": "Gespeichert",
|
||||
"saveFailed": "Speichern fehlgeschlagen",
|
||||
"testFailed": "Test fehlgeschlagen",
|
||||
"errorGeneric": "Fehler",
|
||||
"providerChain": {
|
||||
"heading": "KI-Provider-Fallback-Kette",
|
||||
"activeLine": "Aktiver Provider: {provider}",
|
||||
"cachedSuffix": "(zwischengespeichert: {provider})",
|
||||
"chainLine": "Konfigurierte Kette: {chain}",
|
||||
"managementHint": "Reihenfolge und Ein/Aus-Schalter kommen mit dem nächsten Release.",
|
||||
"none": "keiner konfiguriert",
|
||||
"types": {
|
||||
"codex": "ChatGPT (Codex)",
|
||||
"openai": "OpenAI (eigener Key)",
|
||||
@@ -2081,10 +1885,7 @@
|
||||
"withingsCredentialsSavedPlaceholder": "Gespeichert — neue eingeben zum Ersetzen",
|
||||
"withingsCredentialsSavedPlaceholderSecret": "Gespeichert — neues eingeben zum Ersetzen",
|
||||
"withingsSaveCredentials": "Zugangsdaten speichern",
|
||||
"withingsConnected": "Verbunden",
|
||||
"configured": "Konfiguriert",
|
||||
"withingsTokenExpired": "Token abgelaufen",
|
||||
"withingsLastSync": "Letzte Sync",
|
||||
"withingsSync": "Jetzt synchronisieren",
|
||||
"withingsFullSync": "Alle Daten synchronisieren",
|
||||
"withingsFullSyncTitle": "Vollsynchronisierung?",
|
||||
@@ -2109,15 +1910,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"integrationStatus": {
|
||||
"stateConnected": "Verbunden",
|
||||
"stateError": "Fehler",
|
||||
"stateReauthRequired": "Neu verbinden erforderlich",
|
||||
"stateDisconnected": "Getrennt",
|
||||
"consecutiveFailures": "{count}/{threshold} aufeinanderfolgende Fehler",
|
||||
"lastSuccess": "Letzte erfolgreiche Synchronisierung",
|
||||
"lastAttempt": "Letzter Versuch"
|
||||
},
|
||||
"integrationPill": {
|
||||
"connected": "Verbunden",
|
||||
"errorReconnect": "Fehler — neu verbinden",
|
||||
@@ -2130,7 +1922,6 @@
|
||||
},
|
||||
"apiTokens": "API-Tokens",
|
||||
"apiTokensDescription": "Erstelle API-Tokens für die externe Medikamenten-Einnahme (z.B. Shortcuts, Automationen).",
|
||||
"tokenName": "Token-Name",
|
||||
"tokenNamePlaceholder": "Token-Name (z.B. iPhone Shortcut)",
|
||||
"tokenCreated": "Token erstellt — kopiere ihn jetzt! Er wird nicht erneut angezeigt.",
|
||||
"tokenRevoke": "Token widerrufen?",
|
||||
@@ -2148,62 +1939,14 @@
|
||||
"tokenTableActions": "Aktionen",
|
||||
"noActiveTokens": "Keine aktiven Tokens vorhanden.",
|
||||
"tokenNeverUsed": "Nie",
|
||||
"tokenLastUsed": "Zuletzt:",
|
||||
"tokenCreatedAt": "Erstellt:",
|
||||
"apiEndpoint": "API-Endpoint für Medikamenten-Einnahme:",
|
||||
"apiEndpointsTitle": "API-Endpoints",
|
||||
"apiEndpointsDescription": "Übersicht der derzeit verfügbaren externen Endpoint(s) für Token-basierte Eingaben.",
|
||||
"apiEndpointMethod": "Methode",
|
||||
"apiEndpointPath": "Pfad",
|
||||
"apiEndpointAuth": "Authentifizierung",
|
||||
"apiEndpointExample": "Body-Beispiel",
|
||||
"export": "Daten-Export",
|
||||
"exportDescription": "Exportiere alle deine Gesundheitsdaten.",
|
||||
"exportJson": "JSON-Export",
|
||||
"exportCsv": "CSV-Export",
|
||||
"doctorReport": "Arztreport (PDF)",
|
||||
"auditLog": "Aktivitätsprotokoll",
|
||||
"auditLogHidden": "Protokoll ausgeblendet.",
|
||||
"auditLogShowing": "Zeigt die letzten {count} von {total} Einträgen",
|
||||
"auditNoActivities": "Keine Aktivitäten vorhanden.",
|
||||
"auditAction": "Aktion",
|
||||
"auditCategory": "Kategorie",
|
||||
"auditIp": "IP",
|
||||
"auditLocation": "Standort",
|
||||
"auditTimestamp": "Zeitpunkt",
|
||||
"auditOther": "Sonstig",
|
||||
"auditCategoryAuth": "Auth",
|
||||
"auditCategoryData": "Daten",
|
||||
"auditCategoryIntegration": "Integration",
|
||||
"auditCategoryAI": "KI",
|
||||
"auditCategoryAdmin": "Admin",
|
||||
"auditActionAuthRegister": "Registrierung",
|
||||
"auditActionAuthLogin": "Anmeldung",
|
||||
"auditActionAuthLoginPasskey": "Passkey-Anmeldung",
|
||||
"auditActionAuthLoginPassword": "Passwort-Anmeldung",
|
||||
"auditActionAuthLoginFailed": "Fehlgeschlagene Anmeldung",
|
||||
"auditActionAuthLogout": "Abmeldung",
|
||||
"auditActionAuthPasskeyRegister": "Passkey hinzugefügt",
|
||||
"auditActionAuthPasskeyDelete": "Passkey gelöscht",
|
||||
"auditActionAuthPasswordChange": "Passwort geändert",
|
||||
"auditActionMeasurementCreate": "Messwert erstellt",
|
||||
"auditActionMeasurementUpdate": "Messwert aktualisiert",
|
||||
"auditActionMeasurementDelete": "Messwert gelöscht",
|
||||
"auditActionMedicationCreate": "Medikament erstellt",
|
||||
"auditActionMedicationUpdate": "Medikament aktualisiert",
|
||||
"auditActionMedicationDelete": "Medikament gelöscht",
|
||||
"auditActionMedicationIntake": "Einnahme erfasst",
|
||||
"auditActionMedicationIngestExternal": "Externe Einnahme",
|
||||
"auditActionWithingsConnect": "Withings verbunden",
|
||||
"auditActionWithingsDisconnect": "Withings getrennt",
|
||||
"auditActionExportDownload": "Export heruntergeladen",
|
||||
"auditActionInsightsGenerate": "KI-Insight generiert",
|
||||
"auditActionAdminUserUpdate": "Admin: Benutzer aktualisiert",
|
||||
"auditActionAdminUserResetPassword": "Admin: Passwort zurückgesetzt",
|
||||
"auditActionAdminSettingsUpdate": "Admin: Einstellungen geändert",
|
||||
"collapse": "Einklappen",
|
||||
"expand": "Ausklappen",
|
||||
"dangerZoneTitle": "Danger Zone",
|
||||
"dangerZone": "Alle Daten löschen",
|
||||
"dangerZoneDescription": "Löscht alle deine Gesundheitsdaten und Integrationen. Dein Benutzerkonto bleibt erhalten.",
|
||||
"dangerZoneConfirm": "Alle Daten löschen?",
|
||||
@@ -2213,9 +1956,6 @@
|
||||
"finalDelete": "Endgültig löschen",
|
||||
"saved": "Gespeichert",
|
||||
"savingError": "Fehler beim Speichern",
|
||||
"adminAreaTitle": "Admin-Bereich",
|
||||
"adminAreaDescription": "Systemweite Einstellungen und Benutzerverwaltung findest du in der Admin-Konsole.",
|
||||
"openAdminConsole": "Admin-Konsole öffnen",
|
||||
"moodLogTitle": "moodLog",
|
||||
"moodLogDescription": "Stimmungsdaten aus moodLog importieren",
|
||||
"moodLogUrl": "moodLog URL",
|
||||
@@ -2231,7 +1971,6 @@
|
||||
"moodLogDisconnect": "Trennen",
|
||||
"moodLogDisconnectTitle": "moodLog trennen?",
|
||||
"moodLogDisconnectDescription": "Die Verbindung wird getrennt und alle importierten Stimmungsdaten werden gelöscht.",
|
||||
"moodLogLastSync": "Letzter Sync",
|
||||
"moodLogEntries": "Einträge",
|
||||
"moodLogSyncResult": "{count} Einträge synchronisiert",
|
||||
"moodLogSyncFailed": "Sync fehlgeschlagen",
|
||||
@@ -2298,14 +2037,10 @@
|
||||
"title": "Administration",
|
||||
"subtitle": "Systemstatus, Benutzer und Einstellungen",
|
||||
"settingsSaveError": "Einstellungen konnten nicht gespeichert werden",
|
||||
"settingsSaveValidationError": "Bitte markierte Felder prüfen",
|
||||
"sectionsTitle": "Admin",
|
||||
"systemStatus": "Systemstatus",
|
||||
"version": "Version",
|
||||
"database": "Datenbank",
|
||||
"databaseConnected": "Verbunden",
|
||||
"databaseError": "Fehler",
|
||||
"gitCommit": "Git Commit",
|
||||
"startedAt": "Gestartet",
|
||||
"users": "Benutzer",
|
||||
"measurementsCount": "Messwerte",
|
||||
@@ -2320,8 +2055,6 @@
|
||||
"load1": "Last (1m)",
|
||||
"memUsedPercent": "Speicher",
|
||||
"diskBusyPercent": "Disk-I/O",
|
||||
"diskReadBps": "Disk lesen",
|
||||
"diskWriteBps": "Disk schreiben",
|
||||
"last2hours": "Letzte 2 Stunden",
|
||||
"empty": "Erfassung läuft — Daten erscheinen in 1–2 Minuten.",
|
||||
"loadError": "Host-Metriken konnten nicht geladen werden. Bitte die Seite neu laden."
|
||||
@@ -2376,18 +2109,11 @@
|
||||
"integrationWebPush": "Web Push",
|
||||
"integrationBugReport": "Bug-Reports",
|
||||
"apiGlobal": "API-Endpunkte und API-Tokens erlauben.",
|
||||
"moodLogGlobal": "moodLog-Integration erlauben.",
|
||||
"sectionGeneral": "Allgemein",
|
||||
"sectionIntegrations": "Integrationen",
|
||||
"sectionMedication": "Medikamente",
|
||||
"sectionManagement": "Verwaltung",
|
||||
"umamiTitle": "Umami",
|
||||
"umamiDescription": "Web-Analyse mit Umami",
|
||||
"glitchtipTitle": "GlitchTip",
|
||||
"glitchtipDescription": "Fehler-Tracking mit GlitchTip",
|
||||
"webPushVapidTitle": "Web Push VAPID",
|
||||
"monitoring": "Monitoring (Umami/GlitchTip)",
|
||||
"monitoringDescription": "Konfiguration für Website-Analytics und Fehler-Tracking.",
|
||||
"umamiEnabled": "Umami-Tracking aktivieren.",
|
||||
"umamiScriptUrl": "Umami Script-URL",
|
||||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||||
@@ -2398,7 +2124,6 @@
|
||||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||||
"glitchtipEnvironment": "GlitchTip Environment",
|
||||
"glitchtipEnvironmentPlaceholder": "production",
|
||||
"webPushVapid": "Web Push (VAPID)",
|
||||
"webPushVapidDescription": "Konfiguriere VAPID-Schlüssel und Subject direkt hier, damit Browser-Push ohne ENV-Variablen funktioniert.",
|
||||
"webPushVapidPublicKey": "VAPID Public Key",
|
||||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||||
@@ -2407,12 +2132,8 @@
|
||||
"webPushVapidSubject": "VAPID Subject",
|
||||
"webPushVapidSubjectPlaceholder": "mailto:deine-adresse@example.com",
|
||||
"configured": "Konfiguriert",
|
||||
"notConfigured": "Nicht konfiguriert",
|
||||
"monitoringTestUmami": "Umami-Test senden",
|
||||
"monitoringTestGlitchTip": "GlitchTip-Test senden",
|
||||
"monitoringTestSuccess": "Testevent wurde gesendet",
|
||||
"monitoringTestFailed": "Monitoring-Test fehlgeschlagen",
|
||||
"monitoringSave": "Monitoring speichern",
|
||||
"bugReportGithub": "Bugreport (GitHub Issues)",
|
||||
"bugReportGithubDescription": "Hinterlege GitHub-Issue-Token und Repository für eingehende Bugreports.",
|
||||
"bugReportEnabledLabel": "Bug-Reports aktiviert",
|
||||
@@ -2421,9 +2142,6 @@
|
||||
"bugReportRepoPlaceholder": "owner/repo",
|
||||
"bugReportToken": "Issue-Token",
|
||||
"bugReportTokenPlaceholder": "ghp_...",
|
||||
"bugReportConfigured": "Bugreport ist konfiguriert.",
|
||||
"bugReportNotConfigured": "Bugreport ist noch nicht vollständig konfiguriert.",
|
||||
"bugReportSave": "Bugreport speichern",
|
||||
"userManagement": "Benutzerverwaltung",
|
||||
"userName": "Name",
|
||||
"userEmail": "E-Mail",
|
||||
@@ -2438,7 +2156,6 @@
|
||||
"toUser": "Zum Benutzer",
|
||||
"toAdmin": "Zum Admin",
|
||||
"ownRoleUnchangeable": "Eigene Rolle nicht änderbar",
|
||||
"lastAdminError": "Der letzte Admin kann nicht degradiert werden",
|
||||
"resetPassword": "Passwort zurücksetzen",
|
||||
"resetPasswordTitle": "Passwort zurücksetzen: {name}",
|
||||
"newPassword": "Neues Passwort",
|
||||
@@ -2456,14 +2173,11 @@
|
||||
"tokenLastUsed": "Zuletzt benutzt",
|
||||
"tokenCreated": "Erstellt",
|
||||
"tokenNeverUsed": "Nie",
|
||||
"noTokens": "Keine API-Tokens vorhanden.",
|
||||
"tokensEmptyTitle": "Noch keine API-Tokens",
|
||||
"tokensEmptyDescription": "Tokens werden bei der Anmeldung nativer Clients oder über Einstellungen → Account ausgestellt.",
|
||||
"loginOverview": "Anmeldeübersicht",
|
||||
"allAuthEvents": "Alle Auth-Ereignisse",
|
||||
"failedOnly": "Nur fehlgeschlagene",
|
||||
"noEntries": "Keine Einträge vorhanden.",
|
||||
"loginEmptyTitle": "Noch keine Auth-Ereignisse",
|
||||
"loginEmptyDescription": "Anmeldungen, Abmeldungen und Passkey-Änderungen erscheinen hier.",
|
||||
"loginEmptyFailedTitle": "Keine fehlgeschlagenen Anmeldungen",
|
||||
"loginEmptyFailedDescription": "Das ist der sichere Zustand. Wechsle zu „Alle Auth-Ereignisse“, um erfolgreiche Anmeldungen zu sehen.",
|
||||
@@ -2484,7 +2198,6 @@
|
||||
"outcomeSuccess": "Erfolgreich",
|
||||
"outcomeFailed": "Fehlgeschlagen",
|
||||
"auditDetails": "Details",
|
||||
"dangerZone": "Gefahrenzone",
|
||||
"deleteAllData": "Alle Daten global löschen",
|
||||
"deleteAllDescription": "Löscht alle Mess-, Medikamenten-, Integrations- und Protokoll-Daten aller Benutzer. Benutzerkonten bleiben bestehen.",
|
||||
"deleteAllConfirm": "Alle Daten wirklich löschen?",
|
||||
@@ -2509,8 +2222,6 @@
|
||||
"reminderLateMinutesDescription": "Minuten nach Fenster-Ende bis der Badge von Gelb auf Orange wechselt.",
|
||||
"reminderMissedMinutes": "Verpasst-Schwellenwert (Minuten)",
|
||||
"reminderMissedMinutesDescription": "Minuten nach Fenster-Ende bis die Einnahme als verpasst gilt.",
|
||||
"reminderThresholdsSave": "Schwellenwerte speichern",
|
||||
"notificationTest": "Benachrichtigungen testen",
|
||||
"notificationTestSend": "Test senden",
|
||||
"notificationTestSuccess": "Test-Notification wurde gesendet",
|
||||
"notificationTestFailed": "Test-Notification konnte nicht gesendet werden",
|
||||
@@ -2523,8 +2234,6 @@
|
||||
"reminderCheckEventsToday": "Heutige Events",
|
||||
"reminderCheckNotifSent": "Gesendet",
|
||||
"feedback": {
|
||||
"title": "Feedback-Postfach",
|
||||
"description": "Eingegangene Rückmeldungen, Fehlerberichte und Feature-Wünsche.",
|
||||
"tabOpen": "Offen",
|
||||
"tabAcknowledged": "Bestätigt",
|
||||
"tabResolved": "Erledigt",
|
||||
@@ -2535,7 +2244,6 @@
|
||||
"createdAt": "Eingegangen",
|
||||
"actions": "Aktionen",
|
||||
"details": "Details",
|
||||
"noEntries": "Keine Feedback-Einträge in dieser Kategorie.",
|
||||
"emptyTitle": "Alles erledigt",
|
||||
"emptyDescription": "Kein Nutzer-Feedback in diesem Status. Bug-Reports, Fragen und Feature-Wünsche erscheinen hier.",
|
||||
"loading": "Lade Feedback...",
|
||||
@@ -2544,11 +2252,6 @@
|
||||
"categoryFeature": "Feature",
|
||||
"categoryQuestion": "Frage",
|
||||
"categoryOther": "Sonstiges",
|
||||
"statusOpen": "Offen",
|
||||
"statusAcknowledged": "Bestätigt",
|
||||
"statusResolved": "Erledigt",
|
||||
"statusArchived": "Archiviert",
|
||||
"dialogTitle": "Feedback-Details",
|
||||
"metadataHeading": "Metadaten",
|
||||
"metaUrl": "URL",
|
||||
"metaLocale": "Sprache",
|
||||
@@ -2569,8 +2272,7 @@
|
||||
"publishFailed": "GitHub-Veröffentlichung fehlgeschlagen",
|
||||
"updateFailed": "Aktualisierung fehlgeschlagen",
|
||||
"archiveConfirm": "Diesen Feedback-Eintrag archivieren?",
|
||||
"submittedBy": "Eingereicht von",
|
||||
"sectionTitle": "Feedback"
|
||||
"submittedBy": "Eingereicht von"
|
||||
},
|
||||
"shell": {
|
||||
"overview": "Übersicht",
|
||||
@@ -2654,12 +2356,10 @@
|
||||
"subtitle": "Audit-Spur für Authentifizierungs- und Admin-Ereignisse."
|
||||
},
|
||||
"auditLog": {
|
||||
"title": "Audit-Log",
|
||||
"filterActor": "Akteur (Benutzer-ID oder -Name)",
|
||||
"filterAction": "Aktion",
|
||||
"filterActionAll": "Alle Aktionen",
|
||||
"filterTarget": "Ziel (ID oder Pfad)",
|
||||
"filterSeverity": "Schweregrad",
|
||||
"filterDate": "Zeitraum",
|
||||
"range24h": "Letzte 24 Stunden",
|
||||
"range7d": "Letzte 7 Tage",
|
||||
@@ -2706,7 +2406,6 @@
|
||||
"runFailed": "Backup konnte nicht eingeplant werden",
|
||||
"loading": "Backups werden geladen...",
|
||||
"loadError": "Backups konnten nicht geladen werden.",
|
||||
"empty": "Noch keine Backups vorhanden.",
|
||||
"emptyTitle": "Noch keine Backups",
|
||||
"emptyDescription": "Backups laufen automatisch jeden Sonntag um 03:00 Uhr — oder erstelle jetzt einen ersten Snapshot.",
|
||||
"colUser": "Nutzer",
|
||||
@@ -2753,10 +2452,7 @@
|
||||
"nextGoal": "Nächstes Ziel",
|
||||
"allCompleted": "Alle Erfolge freigeschaltet!",
|
||||
"completed": "Abgeschlossen",
|
||||
"inProgress": "In Arbeit",
|
||||
"progress": "Fortschritt",
|
||||
"goalReached": "Ziel erreicht",
|
||||
"remaining": "Noch {count} bis zum Ziel",
|
||||
"remainingUnlocks": "Noch {count} freischaltbar",
|
||||
"noneUnlockedYet": "Noch keine Erfolge freigeschaltet.",
|
||||
"pointsValue": "{points} Punkte",
|
||||
@@ -3020,8 +2716,7 @@
|
||||
"ariaLabel": "Versteckter, gesperrter Erfolg"
|
||||
},
|
||||
"hiddenUnlockToast": {
|
||||
"title": "Du hast einen versteckten Erfolg freigeschaltet!",
|
||||
"description": "Tippe, um die Überraschung zu sehen."
|
||||
"title": "Du hast einen versteckten Erfolg freigeschaltet!"
|
||||
},
|
||||
"dashboardCard": {
|
||||
"title": "Zuletzt freigeschaltet",
|
||||
@@ -3035,20 +2730,9 @@
|
||||
"loginRequired": "Bitte anmelden, um einen Bug zu melden.",
|
||||
"bugTitle": "Titel",
|
||||
"description": "Beschreibung",
|
||||
"descriptionPlaceholder": "Beschreibe den Fehler möglichst genau. Was hast du getan? Was ist passiert? Was hättest du erwartet?",
|
||||
"screenshot": "Screenshot (optional)",
|
||||
"screenshotPreview": "Screenshot-Vorschau",
|
||||
"attachScreenshot": "Screenshot anhängen",
|
||||
"imageOnly": "Nur Bilddateien erlaubt",
|
||||
"tooLarge": "Screenshot ist zu groß (max. 5 MB)",
|
||||
"submit": "Senden",
|
||||
"success": "Vielen Dank! Dein Bug Report wurde erfolgreich übermittelt.",
|
||||
"viewOnGithub": "Auf GitHub ansehen",
|
||||
"errorCreating": "Fehler beim Erstellen",
|
||||
"notConfiguredTitle": "Bug-Reports noch nicht aktiviert",
|
||||
"notConfiguredUser": "Bug-Reports sind auf diesem Server nicht aktiv. Bitte wende dich an den Administrator.",
|
||||
"notConfiguredAdmin": "Für Bug-Reports wird eine GitHub-Integration benötigt (Issue-Token + Repository). Im Admin-Panel unter Einstellungen → Bug-Reports einrichten.",
|
||||
"openAdminSettings": "Admin-Einstellungen öffnen",
|
||||
"category": "Art",
|
||||
"categoryBug": "Fehlermeldung",
|
||||
"categoryFeature": "Feature-Wunsch",
|
||||
@@ -3058,8 +2742,7 @@
|
||||
"githubEscalationNote": "Dein Feedback wird lokal gespeichert. Wenn der Administrator die GitHub-Integration aktiviert, kann es auf Wunsch als öffentliches Issue veröffentlicht werden.",
|
||||
"internalOnlyNote": "Dein Feedback wird lokal gespeichert und ist nur für den Administrator dieses Servers sichtbar.",
|
||||
"disabledTitle": "Bug-Reports sind deaktiviert",
|
||||
"disabledBody": "Der Administrator hat Bug-Reports auf diesem Server deaktiviert.",
|
||||
"disabledError": "Bug-Reports sind vom Administrator deaktiviert."
|
||||
"disabledBody": "Der Administrator hat Bug-Reports auf diesem Server deaktiviert."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Benachrichtigungen",
|
||||
@@ -3069,24 +2752,9 @@
|
||||
"noChannels": "Konfiguriere zuerst einen Benachrichtigungskanal in den Einstellungen.",
|
||||
"goToSettings": "Zu den Einstellungen",
|
||||
"channelDisabled": "Deaktiviert",
|
||||
"eventMedicationReminder": "Medikamenten-Erinnerung",
|
||||
"eventMedicationReminderDesc": "Erinnerung, wenn eine Einnahme aussteht.",
|
||||
"eventMeasurementAnomaly": "Anomale Messwerte",
|
||||
"eventMeasurementAnomalyDesc": "Warnung bei ungewöhnlichen Messungen (z.B. hoher Blutdruck).",
|
||||
"eventComplianceLow": "Niedrige Einnahmetreue",
|
||||
"eventComplianceLowDesc": "Benachrichtigung, wenn die Einnahmetreue unter einen Schwellwert fällt.",
|
||||
"eventWithingsSyncFailed": "Withings-Sync-Fehler",
|
||||
"eventWithingsSyncFailedDesc": "Meldung bei Fehlern beim automatischen Withings-Datenabgleich.",
|
||||
"eventSystemAlert": "System-Hinweise",
|
||||
"eventSystemAlertDesc": "Wichtige Systemnachrichten und administrative Hinweise.",
|
||||
"eventPersonalRecord": "Persönlicher Rekord",
|
||||
"eventPersonalRecordDesc": "Push bei einem neuen Bestwert für eine erfasste Kennzahl oder ein Training. Standardmäßig aus."
|
||||
},
|
||||
"format": {
|
||||
"dateShort": "{day}.{month}.{year}",
|
||||
"timeShort": "{hours}:{minutes}",
|
||||
"dateTime": "{day}.{month}.{year}, {hours}:{minutes}"
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
"notice": "Diese Sprachversion ist KI-entworfen, inklusive der sicherheitskritischen Coach-Anweisungen. Automatisierte Validierung läuft in CI; KI-Coach-Regressionen bitte auf GitHub melden.",
|
||||
@@ -3094,108 +2762,10 @@
|
||||
"dismiss": "Schließen"
|
||||
}
|
||||
},
|
||||
"classifications": {
|
||||
"bmi": {
|
||||
"Underweight": "Untergewicht",
|
||||
"Normal": "Normalgewicht",
|
||||
"Overweight": "Übergewicht",
|
||||
"ObesityGradeI": "Adipositas Grad I",
|
||||
"ObesityGradeII": "Adipositas Grad II",
|
||||
"ObesityGradeIII": "Adipositas Grad III"
|
||||
},
|
||||
"bp": {
|
||||
"Optimal": "Optimal",
|
||||
"Normal": "Normal",
|
||||
"HighNormal": "Hoch-normal",
|
||||
"HypertensionGrade1": "Hypertonie Grad 1",
|
||||
"HypertensionGrade2": "Hypertonie Grad 2",
|
||||
"HypertensionGrade3": "Hypertonie Grad 3"
|
||||
},
|
||||
"pulse": {
|
||||
"Bradycardia": "Bradykardie",
|
||||
"Normal": "Normal",
|
||||
"Elevated": "Erhöht",
|
||||
"Tachycardia": "Tachykardie"
|
||||
},
|
||||
"pulseTarget": {
|
||||
"SignificantlyLow": "Deutlich niedrig",
|
||||
"SlightlyLow": "Leicht niedrig",
|
||||
"OnTarget": "Zielbereich",
|
||||
"SlightlyElevated": "Leicht erhöht",
|
||||
"SignificantlyElevated": "Deutlich erhöht"
|
||||
},
|
||||
"sleep": {
|
||||
"FarTooShort": "Deutlich zu kurz",
|
||||
"TooShort": "Zu kurz",
|
||||
"OnTarget": "Zielbereich",
|
||||
"SlightlyLong": "Etwas lang",
|
||||
"FarTooLong": "Deutlich zu lang"
|
||||
},
|
||||
"bodyFat": {
|
||||
"Essential": "Essenziell",
|
||||
"Athletic": "Athletisch",
|
||||
"Fitness": "Fitness",
|
||||
"Average": "Durchschnitt",
|
||||
"Obese": "Adipös"
|
||||
},
|
||||
"steps": {
|
||||
"VeryLow": "Sehr wenig",
|
||||
"LowActive": "Wenig aktiv",
|
||||
"ModeratelyActive": "Moderat aktiv",
|
||||
"Active": "Aktiv",
|
||||
"VeryActive": "Sehr aktiv"
|
||||
},
|
||||
"general": {
|
||||
"Good": "Gut",
|
||||
"Moderate": "Moderat",
|
||||
"Low": "Niedrig",
|
||||
"VeryGood": "Sehr gut",
|
||||
"VeryStable": "Sehr stabil",
|
||||
"Stable": "Stabil",
|
||||
"Fluctuating": "Schwankend"
|
||||
},
|
||||
"alerts": {
|
||||
"bmiBelowNormalTitle": "BMI unter Normalbereich",
|
||||
"bmiBelowNormalMessage": "Ihr BMI von {bmi} liegt unter dem Normalbereich (18,5–24,9).",
|
||||
"bmiOverweightTitle": "BMI im Bereich Übergewicht",
|
||||
"bmiOverweightMessage": "Ihr BMI von {bmi} liegt im Bereich Übergewicht. Regelmäßige Bewegung und ausgewogene Ernährung können helfen.",
|
||||
"bmiObesityTitle": "BMI im Bereich Adipositas",
|
||||
"bmiObesityMessage": "Ihr BMI von {bmi} liegt im Bereich Adipositas.",
|
||||
"bmiNormalTitle": "BMI im Normalbereich",
|
||||
"bmiNormalMessage": "Ihr BMI von {bmi} liegt im gesunden Bereich.",
|
||||
"bpDangerTitle": "Blutdruck deutlich erhöht",
|
||||
"bpDangerMessage": "Ihr durchschnittlicher Blutdruck ({sys}/{dia}) wird als \"{category}\" eingestuft.",
|
||||
"bpWarningTitle": "Blutdruck leicht erhöht",
|
||||
"bpWarningMessage": "Ihr durchschnittlicher Blutdruck ({sys}/{dia}) liegt im Bereich \"{category}\".",
|
||||
"bpTargetGoodTitle": "Gute Blutdruck-Zielbereichstreue",
|
||||
"bpTargetGoodMessage": "{pct}% Ihrer Messungen liegen im Zielbereich.",
|
||||
"bpTargetBadTitle": "Blutdruck oft außerhalb des Zielbereichs",
|
||||
"bpTargetBadMessage": "Nur {pct}% Ihrer Messungen liegen im Zielbereich.",
|
||||
"weightIncreasingTitle": "Gewicht steigend",
|
||||
"weightIncreasingMessage": "Ihr Gewicht steigt um ca. {change} kg pro Woche in den letzten 30 Tagen.",
|
||||
"weightDecreasingTitle": "Gewicht fallend",
|
||||
"weightDecreasingMessage": "Ihr Gewicht sinkt um ca. {change} kg pro Woche in den letzten 30 Tagen.",
|
||||
"pulseOutliersTitle": "Puls-Ausreißer erkannt",
|
||||
"pulseOutliersMessage": "{count} ungewöhnliche Pulsmessungen in den letzten 30 Tagen.",
|
||||
"complianceLowTitle": "Niedrige Einnahmetreue: {name}",
|
||||
"complianceLowMessage": "Ihre 7-Tage-Compliance für {name} liegt bei nur {pct}%. Regelmäßige Einnahme ist wichtig.",
|
||||
"complianceGoodTitle": "Sehr gute Einnahmetreue: {name}",
|
||||
"complianceGoodMessage": "{pct}% Compliance in den letzten 7 Tagen. Weiter so!"
|
||||
}
|
||||
},
|
||||
"targets": {
|
||||
"title": "Zielwerte",
|
||||
"introText": "Deine aktuellen Werte im Vergleich zu empfohlenen Zielbereichen. Quellen der Leitlinien sind auf jeder Karte verlinkt.",
|
||||
"weight": "Gewicht",
|
||||
"bloodPressure": "Blutdruck",
|
||||
"bloodPressureOnTarget": "Blutdruck im Zielbereich",
|
||||
"restingPulse": "Ruhepuls",
|
||||
"sleepDuration": "Schlafdauer",
|
||||
"bmi": "BMI",
|
||||
"bodyFat": "Körperfett",
|
||||
"stepsPerDay": "Schritte/Tag",
|
||||
"medicationCompliance": "Einnahmetreue",
|
||||
"steps": "Schritte",
|
||||
"average30d": "30-Tage-Schnitt:",
|
||||
"consistency": {
|
||||
"ariaLabel": "Letzte 7 Tage, im-Zielbereich-Status pro Tag",
|
||||
|
||||
+7
-437
@@ -9,31 +9,19 @@
|
||||
"close": "Close",
|
||||
"loading": "Loading...",
|
||||
"error": "Error",
|
||||
"success": "Success",
|
||||
"saved": "Saved",
|
||||
"confirm": "Confirm",
|
||||
"back": "Back",
|
||||
"next": "Next",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"search": "Search",
|
||||
"filter": "Filter",
|
||||
"noData": "No data available",
|
||||
"optional": "Optional",
|
||||
"required": "Required",
|
||||
"all": "All",
|
||||
"active": "Active",
|
||||
"inactive": "Inactive",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"networkError": "Network error",
|
||||
"unknownError": "Unknown error",
|
||||
"notLoggedIn": "Not logged in",
|
||||
"noAccess": "Access denied",
|
||||
"copied": "Copied!",
|
||||
"or": "or",
|
||||
"unknown": "Unknown",
|
||||
"replace": "Replace",
|
||||
"add": "Add",
|
||||
"import": "Import",
|
||||
"test": "Test",
|
||||
@@ -169,7 +157,6 @@
|
||||
"dashboard": "Dashboard",
|
||||
"measurements": "Measurements",
|
||||
"medications": "Medications",
|
||||
"charts": "History",
|
||||
"insights": "Insights",
|
||||
"targets": "Targets",
|
||||
"achievements": "Achievements",
|
||||
@@ -198,8 +185,6 @@
|
||||
"auth": {
|
||||
"login": "Sign in",
|
||||
"register": "Sign up",
|
||||
"loginTitle": "Sign In",
|
||||
"registerTitle": "Sign Up",
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"email": "Email address",
|
||||
@@ -210,26 +195,17 @@
|
||||
"loginWithPassword": "Sign in with password",
|
||||
"noAccount": "Don't have an account?",
|
||||
"hasAccount": "Already have an account?",
|
||||
"registerDisabled": "Registration is disabled.",
|
||||
"loginFailed": "Login failed",
|
||||
"passkeyFailed": "Passkey authentication cancelled or failed",
|
||||
"registerFailed": "Registration failed",
|
||||
"createAccount": "Create account",
|
||||
"newAccount": "Create new account",
|
||||
"backToPasskey": "Back to Passkey",
|
||||
"passkeySetupLater": "You can set up passkeys at any time in Settings.",
|
||||
"passwordMinLength": "Min. 12 characters",
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long.",
|
||||
"passwordStrength": "Password strength",
|
||||
"strengthWeak": "Very weak",
|
||||
"strengthFair": "Weak",
|
||||
"strengthGood": "Fair",
|
||||
"strengthStrong": "Strong",
|
||||
"strengthVeryStrong": "Very strong"
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"subtitle": "Your health overview",
|
||||
"greeting": {
|
||||
"morning": "Good morning",
|
||||
"day": "Hello",
|
||||
@@ -260,25 +236,13 @@
|
||||
"stepsShort": "Steps",
|
||||
"vo2MaxShort": "VO₂ max",
|
||||
"bpInTargetShort": "BP in Target",
|
||||
"days30Short": "30d",
|
||||
"medications": "Medications",
|
||||
"insightsPreview": "AI Insights preview",
|
||||
"lastMeasurement": "Last measurement",
|
||||
"noMeasurements": "No measurements yet",
|
||||
"trend": "Trend",
|
||||
"trendUp": "rising",
|
||||
"trendDown": "falling",
|
||||
"trendStable": "stable",
|
||||
"quickEntry": "Quick entry",
|
||||
"quickAddMeasurement": "Log measurement",
|
||||
"quickAddMood": "Log mood",
|
||||
"addMeasurement": "Add measurement",
|
||||
"compliance7d": "Compliance (7 days)",
|
||||
"complianceGood": "Good",
|
||||
"complianceLow": "Low",
|
||||
"mood": "Mood",
|
||||
"customizeTitle": "Dashboard layout",
|
||||
"customizeSubtitle": "Choose which cards appear on your dashboard and in what order. Defaults work out of the box.",
|
||||
"layoutReset": "Reset to defaults",
|
||||
"layoutSaveSuccess": "Dashboard layout saved",
|
||||
"layoutSaveError": "Could not save dashboard layout",
|
||||
@@ -297,11 +261,7 @@
|
||||
"lastInjection": "Last injection",
|
||||
"nextInjection": "Next injection",
|
||||
"weightDelta": "since start",
|
||||
"inDays": "in {count} days",
|
||||
"empty": {
|
||||
"title": "No active GLP-1 medication",
|
||||
"description": "Add a GLP-1 receptor agonist (Mounjaro, Ozempic, Wegovy, …) to surface dose, schedule, and weight response here."
|
||||
}
|
||||
"inDays": "in {count} days"
|
||||
}
|
||||
},
|
||||
"measurements": {
|
||||
@@ -311,7 +271,6 @@
|
||||
"editMeasurement": "Edit measurement",
|
||||
"type": "Type",
|
||||
"value": "Value",
|
||||
"unit": "Unit",
|
||||
"date": "Date",
|
||||
"source": "Source",
|
||||
"notes": "Notes",
|
||||
@@ -349,8 +308,6 @@
|
||||
"glucoseContextPostprandial": "Post-meal (2h after eating)",
|
||||
"glucoseContextRandom": "Random / casual",
|
||||
"glucoseContextBedtime": "Before bed",
|
||||
"glucoseUnit": "Glucose display unit",
|
||||
"glucoseUnitHint": "Stored canonically in mg/dL; display unit is your preference.",
|
||||
"unitHours": "hours",
|
||||
"unitSteps": "steps",
|
||||
"sourceManual": "Manual",
|
||||
@@ -371,7 +328,6 @@
|
||||
"loginRequired": "Please sign in to view measurements.",
|
||||
"allTypes": "All types",
|
||||
"measurementCount": "{count} measurements",
|
||||
"noMeasurements": "No measurements found",
|
||||
"emptyTitle": "No measurements yet",
|
||||
"emptyDescription": "Log your weight, blood pressure, pulse, or other vitals to start tracking trends.",
|
||||
"emptyFilteredTitle": "No measurements match this filter",
|
||||
@@ -382,10 +338,7 @@
|
||||
"actions": "Actions",
|
||||
"deleteConfirmTitle": "Delete measurement?",
|
||||
"deleteConfirmDescription": "This measurement will be permanently deleted.",
|
||||
"pageInfo": "Page {page} of {total}",
|
||||
"showing": "Showing",
|
||||
"of": "of",
|
||||
"entries": "entries"
|
||||
"pageInfo": "Page {page} of {total}"
|
||||
},
|
||||
"mood": {
|
||||
"title": "Mood",
|
||||
@@ -404,14 +357,9 @@
|
||||
"levelOkay": "Okay",
|
||||
"levelSchlecht": "Bad",
|
||||
"levelLausig": "Terrible",
|
||||
"sourceManual": "Manual",
|
||||
"sourceMoodlog": "moodLog",
|
||||
"sourceWeb": "Web",
|
||||
"sourceTelegram": "Telegram",
|
||||
"sourceDaylio": "Daylio",
|
||||
"allMoods": "All moods",
|
||||
"entryCount": "{count} entries",
|
||||
"noEntries": "No mood entries found",
|
||||
"emptyTitle": "No mood entries yet",
|
||||
"emptyDescription": "Log how you feel today to spot patterns over time.",
|
||||
"emptyFilteredTitle": "No mood entries match this filter",
|
||||
@@ -436,34 +384,21 @@
|
||||
"editMedication": "Edit medication",
|
||||
"newMedication": "New medication",
|
||||
"firstMedication": "Add first medication",
|
||||
"noMedicationsYet": "No medications added yet",
|
||||
"emptyTitle": "No medications yet",
|
||||
"emptyDescription": "Add medications, dosages, and reminder windows to track compliance.",
|
||||
"loadFailed": "Could not load medications",
|
||||
"retryLoad": "Retry",
|
||||
"name": "Name",
|
||||
"dose": "Dose",
|
||||
"doseAmount": "Amount",
|
||||
"doseUnit": "Unit",
|
||||
"category": "Category",
|
||||
"schedule": "Schedule",
|
||||
"scheduleFrom": "From",
|
||||
"scheduleTo": "To",
|
||||
"scheduleLabel": "Label",
|
||||
"scheduleDays": "Days",
|
||||
"scheduleDaily": "Daily",
|
||||
"active": "Active",
|
||||
"inactive": "Paused",
|
||||
"intakeHistory": "Intake history",
|
||||
"showIntakeHistory": "Show intake history",
|
||||
"hideIntakeHistory": "Hide intake history",
|
||||
"markTaken": "Taken",
|
||||
"markSkipped": "Skipped",
|
||||
"deleteConfirm": "Delete medication?",
|
||||
"deleteDescription": "The medication and all intake records will be permanently deleted.",
|
||||
"noMedications": "No medications found.",
|
||||
"compliance": "Compliance",
|
||||
"import": "Import",
|
||||
"importIntakes": "Import intakes",
|
||||
"importDescription": "Paste a JSON array with intake data. Expected format:",
|
||||
"importUploadFile": "Upload JSON file",
|
||||
@@ -477,7 +412,6 @@
|
||||
"importInvalidSkipped": "{count} invalid entries skipped",
|
||||
"importFailed": "Import failed",
|
||||
"importInvalidFormat": "Invalid JSON format",
|
||||
"apiAccess": "API access",
|
||||
"apiEndpointTitle": "API Endpoint: {name}",
|
||||
"apiEndpointDescription": "Use this endpoint to record intakes via API (e.g., iPhone Shortcut or cron job).",
|
||||
"apiEndpointActive": "API endpoint active",
|
||||
@@ -492,8 +426,6 @@
|
||||
"statusLoadFailed": "Could not load status",
|
||||
"changeFailed": "Change failed",
|
||||
"categoryBloodPressure": "Blood Pressure",
|
||||
"categoryCholesterol": "Cholesterol",
|
||||
"categoryDiabetes": "Diabetes",
|
||||
"categoryVitamin": "Vitamins",
|
||||
"categoryThyroid": "Thyroid",
|
||||
"categoryHormone": "Hormones",
|
||||
@@ -524,7 +456,6 @@
|
||||
"intakeDeleteConfirm": "Delete intake record?",
|
||||
"intakeDeleteDescription": "This intake record will be permanently deleted.",
|
||||
"intakeCount": "{count} intakes",
|
||||
"viewHistory": "History",
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday",
|
||||
"tomorrow": "Tomorrow",
|
||||
@@ -568,10 +499,8 @@
|
||||
"glp1DosesPerUnit": "Doses per pen / vial",
|
||||
"glp1DosesPerUnitPlaceholder": "e.g. 4 for a Mounjaro KwikPen",
|
||||
"glp1DosesPerUnitHelp": "Optional — set to enable the low-stock dashboard caption. Mounjaro KwikPen = 4, Ozempic 0.25/0.5 mg = 4, Wegovy single-dose pen = 1. Leave blank to disable inventory tracking.",
|
||||
"glp1Headline": "{name} · {dose}",
|
||||
"glp1LastInjection": "Last: {label}",
|
||||
"glp1LastInjectionWithSite": "Last: {label} · {site}",
|
||||
"glp1NextInjection": "Next: {label}",
|
||||
"glp1NextInjectionDays": "Next: {label} (in {days} days)",
|
||||
"glp1NextInjectionToday": "Next: today",
|
||||
"glp1NextInjectionTomorrow": "Next: tomorrow",
|
||||
@@ -738,7 +667,6 @@
|
||||
"siteThighRight": "Right thigh",
|
||||
"siteUpperArmLeft": "Left upper arm",
|
||||
"siteUpperArmRight": "Right upper arm",
|
||||
"sideEffectTagsLabel": "Common GLP-1 side effects",
|
||||
"sideEffectTagsHelp": "Tap a chip to add it to your mood-entry tags.",
|
||||
"sideEffectTagNausea": "nausea",
|
||||
"sideEffectTagConstipation": "constipation",
|
||||
@@ -774,12 +702,10 @@
|
||||
"purgeError": "Error deleting records",
|
||||
"invalidTimestamp": "Please select a valid time.",
|
||||
"noIntakesYet": "No intakes recorded yet",
|
||||
"noIntakesForMedication": "No intakes yet for",
|
||||
"deleteIntakeAriaLabel": "Delete intake",
|
||||
"actions": "Actions",
|
||||
"pageInfo": "Page {page} of {total}",
|
||||
"loginRequiredIntakes": "Please sign in to view intakes.",
|
||||
"clear": "Clear",
|
||||
"phaseConfig": "Reminder phases",
|
||||
"phaseConfigDescription": "Configure timing for reminders.",
|
||||
"phaseGreen": "Green",
|
||||
@@ -872,24 +798,13 @@
|
||||
}
|
||||
},
|
||||
"charts": {
|
||||
"title": "History",
|
||||
"subtitle": "Visualization of your health data",
|
||||
"timeRange": "Time range",
|
||||
"days7": "7 days",
|
||||
"days30": "30 days",
|
||||
"days90": "90 days",
|
||||
"days365": "1 year",
|
||||
"daysAll": "All",
|
||||
"weight": "Weight",
|
||||
"bloodPressure": "Blood Pressure",
|
||||
"pulse": "Pulse",
|
||||
"bodyFat": "Body Fat",
|
||||
"sleep": "Sleep",
|
||||
"steps": "Steps",
|
||||
"compliance": "Compliance",
|
||||
"noData": "No data in selected time range",
|
||||
"movingAverage": "Moving average",
|
||||
"target": "Target range",
|
||||
"bucketWeekly": "Weekly avg",
|
||||
"bucketMonthly": "Monthly avg",
|
||||
"points7Label": "7 pts",
|
||||
@@ -911,7 +826,6 @@
|
||||
"avgAllTimeShort": "All-time",
|
||||
"trend7dShort": "7-day trend",
|
||||
"trend": "Trend",
|
||||
"targetRanges": "Target ranges",
|
||||
"perWeek": "/week",
|
||||
"totalDelta": "Total",
|
||||
"selectMedication": "Select medication",
|
||||
@@ -923,7 +837,6 @@
|
||||
"colorRed": "Red:",
|
||||
"mood": "Mood",
|
||||
"moodScore": "Mood Score",
|
||||
"moodMA": "7-day trend",
|
||||
"moodLabel1": "Awful",
|
||||
"moodLabel2": "Bad",
|
||||
"moodLabel3": "Okay",
|
||||
@@ -961,7 +874,6 @@
|
||||
"personalBaseline": "Your normal",
|
||||
"deltaVsBaseline": "{delta} vs. your normal",
|
||||
"deltaUnchanged": "matches your normal",
|
||||
"targetWeight": "Target",
|
||||
"deltaVsTarget": "{delta} vs. target"
|
||||
},
|
||||
"chart": {
|
||||
@@ -989,25 +901,15 @@
|
||||
},
|
||||
"captionLastMonth": "vs. last month",
|
||||
"captionLastYear": "vs. last year",
|
||||
"delta": {
|
||||
"improved": "{delta} improved",
|
||||
"worsened": "{delta} worsened",
|
||||
"stable": "unchanged"
|
||||
},
|
||||
"deltaVs": {
|
||||
"lastMonth": "{delta} vs. last month",
|
||||
"lastYear": "{delta} vs. last year"
|
||||
},
|
||||
"tooltipPrior": "Prior period",
|
||||
"tooltipDelta": "Δ {delta}",
|
||||
"unavailable": {
|
||||
"lastMonth": "Comparison unavailable — no data from last month yet",
|
||||
"lastYear": "Comparison unavailable — no data from last year yet"
|
||||
},
|
||||
"insightsCallout": {
|
||||
"lastMonth": "Tracking against last month",
|
||||
"lastYear": "Tracking against last year"
|
||||
},
|
||||
"notAvailableForCompliance": "Comparison N/A for compliance"
|
||||
},
|
||||
"insights": {
|
||||
@@ -1447,10 +1349,7 @@
|
||||
"generatePrompt": "Click \"Generate\" for AI-powered insights about your health data."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Personal thresholds",
|
||||
"subtitle": "Override the computed target range for any metric. Defaults stay in effect until you set a value here.",
|
||||
"defaultLabel": "Default",
|
||||
"overrideLabel": "Your override",
|
||||
"autoModeLabel": "Auto",
|
||||
"overrideModeLabel": "Override",
|
||||
"resetAction": "Reset to default",
|
||||
@@ -1478,32 +1377,11 @@
|
||||
"metricBodyWater": "Body water",
|
||||
"metricBoneMass": "Bone mass",
|
||||
"metricOxygenSaturation": "Oxygen saturation (SpO₂)",
|
||||
"unsetExplanation": "No override — using computed default.",
|
||||
"loadError": "Could not load thresholds"
|
||||
"unsetExplanation": "No override — using computed default."
|
||||
},
|
||||
"onboarding": {
|
||||
"setupDescription": "Set up your profile to get started. You can change this later in Settings.",
|
||||
"completeSetup": "Complete setup",
|
||||
"skip": "Skip",
|
||||
"medicationsTitle": "Do you take medications?",
|
||||
"medicationsDescription": "Add your medications to enable reminders and compliance tracking.",
|
||||
"medNamePlaceholder": "Name",
|
||||
"medDosePlaceholder": "Dose",
|
||||
"notificationsTitle": "Reminders",
|
||||
"notificationsDescription": "HealthLog can remind you about your medications. Configure this later in Settings.",
|
||||
"telegramHint": "Reminders via Telegram bot with snooze buttons",
|
||||
"webPushHint": "Browser notifications directly to your device",
|
||||
"notificationsLater": "You can set this up anytime in Settings.",
|
||||
"targetsTitle": "Target Values",
|
||||
"targetsDescription": "Set optional target values for blood pressure and weight.",
|
||||
"targetSys": "Systolic (mmHg)",
|
||||
"targetDia": "Diastolic (mmHg)",
|
||||
"targetWeight": "Target weight (kg)",
|
||||
"errorProfile": "Could not save your profile. Please try again.",
|
||||
"errorMedication": "Could not add the medication \"{name}\". Please try again or add it later in Medications.",
|
||||
"errorTargets": "Could not save your target values. Please try again.",
|
||||
"errorGeneric": "Something went wrong while finishing setup. Please try again.",
|
||||
"medScheduleHint": "We'll add a default reminder window (08:00–09:00 daily). You can adjust it anytime in Medications.",
|
||||
"v2": {
|
||||
"title": "Welcome to HealthLog",
|
||||
"subtitle": "Three quick steps. You can finish anything later from Settings.",
|
||||
@@ -1582,27 +1460,6 @@
|
||||
"step3of4": "Step 3 of 4",
|
||||
"step4of4": "Step 4 of 4"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Welcome to HealthLog",
|
||||
"carouselLabel": "Welcome — three slides",
|
||||
"slideOf": "Slide {current} of {total}",
|
||||
"gotoSlide": "Go to slide {index}",
|
||||
"prevSlide": "Previous slide",
|
||||
"nextSlide": "Next slide",
|
||||
"slide1": {
|
||||
"title": "Your health data, owned by you",
|
||||
"body": "HealthLog stores every reading on your own infrastructure. No ads, no third-party sharing, no account lock-in."
|
||||
},
|
||||
"slide2": {
|
||||
"title": "One view across every source",
|
||||
"body": "Apple Health, Withings and manual entries merge into a single consistent history — with per-metric source priority you control."
|
||||
},
|
||||
"slide3": {
|
||||
"title": "Coach and Insights with substance",
|
||||
"body": "Evidence-grounded analysis built strictly from your numbers, every claim citable. Bring-your-own-key, no training on your data."
|
||||
},
|
||||
"cta": "Get started"
|
||||
},
|
||||
"goals": {
|
||||
"title": "What would you like to track?",
|
||||
"body": "Pick the areas you care about. Your dashboard and the default reminders follow your choice.",
|
||||
@@ -1669,10 +1526,8 @@
|
||||
"title": "Getting started",
|
||||
"subtitle": "Quick wins to get the most out of HealthLog.",
|
||||
"progress": "{done} of {total} done",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissAll": "Hide checklist",
|
||||
"dismissTooltip": "Hide this item",
|
||||
"restoreHint": "You can restore the checklist from Settings.",
|
||||
"items": {
|
||||
"profileTitle": "Set your profile",
|
||||
"profileDescription": "Height, date of birth and gender unlock personalised targets.",
|
||||
@@ -1697,8 +1552,6 @@
|
||||
"remainingMany": "{count} more readings to go."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"subtitle": "Profile, Security & Connections",
|
||||
"researchMode": {
|
||||
"sectionTitle": "Research Mode",
|
||||
"subtitle": "Opt-in display of an estimated GLP-1 drug-level curve, derived from EMA-published population pharmacokinetics. Reading-only — never a measurement or medical advice.",
|
||||
@@ -1841,18 +1694,9 @@
|
||||
"coming_soon": "Moving here with the next release update."
|
||||
}
|
||||
},
|
||||
"sectionsTitle": "Settings",
|
||||
"categoryGeneral": "General",
|
||||
"categoryNotifications": "Notifications",
|
||||
"categoryAi": "AI",
|
||||
"categoryPersonalization": "Personalization",
|
||||
"categoryIntegration": "Integration",
|
||||
"categoryApi": "API",
|
||||
"profile": "Profile",
|
||||
"security": "Security",
|
||||
"language": "Language",
|
||||
"languageDescription": "Choose the display language of the application.",
|
||||
"languageSystem": "System (automatic)",
|
||||
"username": "Username",
|
||||
"height": "Height (cm)",
|
||||
"dateOfBirth": "Date of birth",
|
||||
@@ -1930,16 +1774,6 @@
|
||||
"webPushActive": "Active",
|
||||
"kiInsights": "AI Insights (OpenAI)",
|
||||
"kiInsightsDescription": "Optional: Save your OpenAI key for daily, automatic AI evaluations in Insights.",
|
||||
"kiInsightsBenefitsTitle": "Benefits with OpenAI key",
|
||||
"kiInsightsBenefit1": "Daily summaries for general status, blood pressure, weight, pulse, BMI, and medication compliance.",
|
||||
"kiInsightsBenefit2": "Better trend and correlation interpretation based on your latest 30 daily measurement points per area.",
|
||||
"kiInsightsBenefit3": "Automatic background refresh so the Insights page always shows up-to-date assessments.",
|
||||
"createApiKeyHint": "Create your API key at:",
|
||||
"createApiKeyLinkLabel": "platform.openai.com/api-keys",
|
||||
"apiKey": "API Key",
|
||||
"apiKeyStored": "Key stored — enter new one to replace",
|
||||
"apiKeySaved": "API key saved",
|
||||
"apiKeyRemoved": "API key removed",
|
||||
"codexConnected": "ChatGPT connected successfully! AI insights are now active.",
|
||||
"codexDisconnected": "ChatGPT connection removed.",
|
||||
"codexConnectionFailed": "ChatGPT connection failed. Please try again.",
|
||||
@@ -1952,18 +1786,10 @@
|
||||
"regenerateRateLimit": "Please wait — you've hit the hourly limit for analyses.",
|
||||
"lastGeneratedAt": "Last generated",
|
||||
"ai": {
|
||||
"title": "AI Insights",
|
||||
"description": "Provider, model, key.",
|
||||
"chatgptConnectedBadge": "ChatGPT connected",
|
||||
"adminAiActiveBadge": "Admin AI active",
|
||||
"connectionExpiredBadge": "Connection expired",
|
||||
"chatgptConnectedHeading": "ChatGPT connected",
|
||||
"chatgptConnectedBody": "Insights are generated through your ChatGPT subscription — no extra cost.",
|
||||
"connectedSince": "Connected since {when}.",
|
||||
"disconnect": "Disconnect",
|
||||
"connectChatgptHeading": "Connect with ChatGPT",
|
||||
"connectChatgptBody": "Link your ChatGPT Pro/Max account to get AI-powered health analyses based on current medical guidelines. No additional API costs.",
|
||||
"connectChatgptCta": "Connect with ChatGPT",
|
||||
"deviceCodeHeading": "Finish connecting on chatgpt.com",
|
||||
"deviceCodeStep1": "Open this link on any device:",
|
||||
"deviceCodeStep2": "Enter this one-time code:",
|
||||
@@ -1972,42 +1798,20 @@
|
||||
"deviceCodeWaiting": "Waiting for approval…",
|
||||
"deviceCodeCancel": "Cancel",
|
||||
"oauthNotConfigured": "ChatGPT OAuth is not configured on this instance — use your own API key below instead.",
|
||||
"adminFallback": "Alternatively, HealthLog will use the AI provider configured by the administrator.",
|
||||
"personalProviderHeading": "AI provider (personal)",
|
||||
"personalProviderBody": "Your own AI provider overrides the admin setting. Leave blank for the default. For ChatGPT Pro/Max OAuth use the connect button above.",
|
||||
"providerLabel": "Provider",
|
||||
"providerOptionDefault": "— Default (Admin/Codex) —",
|
||||
"providerOptionOpenai": "OpenAI (API key)",
|
||||
"providerOptionAnthropic": "Anthropic (Claude)",
|
||||
"providerOptionLocal": "Local (OpenAI-compatible)",
|
||||
"modelLabel": "Model",
|
||||
"modelOptionDefault": "— Default —",
|
||||
"modelOptionCustom": "Custom…",
|
||||
"customModelLabel": "Custom model name",
|
||||
"openaiKeyLabel": "OpenAI API key",
|
||||
"openaiKeyHelp": "Your own key — not connected to your ChatGPT subscription. For the subscription use the connect button above.",
|
||||
"anthropicKeyLabel": "Anthropic API key",
|
||||
"baseUrlLabel": "Base URL",
|
||||
"localKeyLabel": "API key (optional)",
|
||||
"savedPreview": "(saved {preview})",
|
||||
"savedShort": "(saved)",
|
||||
"saveCta": "Save",
|
||||
"testCta": "Test connection",
|
||||
"removeKeyCta": "Remove saved key",
|
||||
"keyRemoved": "Saved key removed",
|
||||
"removeKeyConfirmTitle": "Remove saved API key?",
|
||||
"removeKeyConfirmBody": "Insights for this provider will fall back to the admin/Codex provider until you save a new key.",
|
||||
"saved": "Saved",
|
||||
"saveFailed": "Save failed",
|
||||
"testFailed": "Test failed",
|
||||
"errorGeneric": "Error",
|
||||
"providerChain": {
|
||||
"heading": "AI provider fallback chain",
|
||||
"activeLine": "Active provider: {provider}",
|
||||
"cachedSuffix": "(cached: {provider})",
|
||||
"chainLine": "Configured chain: {chain}",
|
||||
"managementHint": "Reordering and on/off toggles arrive in the next release.",
|
||||
"none": "none configured",
|
||||
"types": {
|
||||
"codex": "ChatGPT (Codex)",
|
||||
"openai": "OpenAI (your key)",
|
||||
@@ -2081,10 +1885,7 @@
|
||||
"withingsCredentialsSavedPlaceholder": "Saved — enter new to replace",
|
||||
"withingsCredentialsSavedPlaceholderSecret": "Saved — enter new to replace",
|
||||
"withingsSaveCredentials": "Save credentials",
|
||||
"withingsConnected": "Connected",
|
||||
"configured": "Configured",
|
||||
"withingsTokenExpired": "Token expired",
|
||||
"withingsLastSync": "Last sync",
|
||||
"withingsSync": "Sync now",
|
||||
"withingsFullSync": "Sync all data",
|
||||
"withingsFullSyncTitle": "Full synchronization?",
|
||||
@@ -2109,15 +1910,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"integrationStatus": {
|
||||
"stateConnected": "Connected",
|
||||
"stateError": "Error",
|
||||
"stateReauthRequired": "Reconnect required",
|
||||
"stateDisconnected": "Disconnected",
|
||||
"consecutiveFailures": "{count}/{threshold} consecutive failures",
|
||||
"lastSuccess": "Last successful sync",
|
||||
"lastAttempt": "Last attempt"
|
||||
},
|
||||
"integrationPill": {
|
||||
"connected": "Connected",
|
||||
"errorReconnect": "Error — reconnect",
|
||||
@@ -2130,7 +1922,6 @@
|
||||
},
|
||||
"apiTokens": "API Tokens",
|
||||
"apiTokensDescription": "Create API tokens for external medication intake (e.g., Shortcuts, automations).",
|
||||
"tokenName": "Token name",
|
||||
"tokenNamePlaceholder": "Token name (e.g., iPhone Shortcut)",
|
||||
"tokenCreated": "Token created — copy it now! It won't be shown again.",
|
||||
"tokenRevoke": "Revoke token?",
|
||||
@@ -2148,62 +1939,14 @@
|
||||
"tokenTableActions": "Actions",
|
||||
"noActiveTokens": "No active tokens available.",
|
||||
"tokenNeverUsed": "Never",
|
||||
"tokenLastUsed": "Last used:",
|
||||
"tokenCreatedAt": "Created:",
|
||||
"apiEndpoint": "API endpoint for medication intake:",
|
||||
"apiEndpointsTitle": "API endpoints",
|
||||
"apiEndpointsDescription": "Overview of currently available external endpoint(s) for token-based ingestion.",
|
||||
"apiEndpointMethod": "Method",
|
||||
"apiEndpointPath": "Path",
|
||||
"apiEndpointAuth": "Authentication",
|
||||
"apiEndpointExample": "Body example",
|
||||
"export": "Data Export",
|
||||
"exportDescription": "Export all your health data.",
|
||||
"exportJson": "JSON Export",
|
||||
"exportCsv": "CSV Export",
|
||||
"doctorReport": "Doctor Report (PDF)",
|
||||
"auditLog": "Activity Log",
|
||||
"auditLogHidden": "Log hidden.",
|
||||
"auditLogShowing": "Showing last {count} of {total} entries",
|
||||
"auditNoActivities": "No activities found.",
|
||||
"auditAction": "Action",
|
||||
"auditCategory": "Category",
|
||||
"auditIp": "IP",
|
||||
"auditLocation": "Location",
|
||||
"auditTimestamp": "Time",
|
||||
"auditOther": "Other",
|
||||
"auditCategoryAuth": "Auth",
|
||||
"auditCategoryData": "Data",
|
||||
"auditCategoryIntegration": "Integration",
|
||||
"auditCategoryAI": "AI",
|
||||
"auditCategoryAdmin": "Admin",
|
||||
"auditActionAuthRegister": "Registration",
|
||||
"auditActionAuthLogin": "Login",
|
||||
"auditActionAuthLoginPasskey": "Passkey login",
|
||||
"auditActionAuthLoginPassword": "Password login",
|
||||
"auditActionAuthLoginFailed": "Failed login",
|
||||
"auditActionAuthLogout": "Logout",
|
||||
"auditActionAuthPasskeyRegister": "Passkey added",
|
||||
"auditActionAuthPasskeyDelete": "Passkey deleted",
|
||||
"auditActionAuthPasswordChange": "Password changed",
|
||||
"auditActionMeasurementCreate": "Measurement created",
|
||||
"auditActionMeasurementUpdate": "Measurement updated",
|
||||
"auditActionMeasurementDelete": "Measurement deleted",
|
||||
"auditActionMedicationCreate": "Medication created",
|
||||
"auditActionMedicationUpdate": "Medication updated",
|
||||
"auditActionMedicationDelete": "Medication deleted",
|
||||
"auditActionMedicationIntake": "Intake recorded",
|
||||
"auditActionMedicationIngestExternal": "External intake",
|
||||
"auditActionWithingsConnect": "Withings connected",
|
||||
"auditActionWithingsDisconnect": "Withings disconnected",
|
||||
"auditActionExportDownload": "Export downloaded",
|
||||
"auditActionInsightsGenerate": "AI insight generated",
|
||||
"auditActionAdminUserUpdate": "Admin: User updated",
|
||||
"auditActionAdminUserResetPassword": "Admin: Password reset",
|
||||
"auditActionAdminSettingsUpdate": "Admin: Settings changed",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"dangerZoneTitle": "Danger Zone",
|
||||
"dangerZone": "Delete All Data",
|
||||
"dangerZoneDescription": "Deletes all your health data and integrations. Your user account will be preserved.",
|
||||
"dangerZoneConfirm": "Delete all data?",
|
||||
@@ -2213,9 +1956,6 @@
|
||||
"finalDelete": "Delete permanently",
|
||||
"saved": "Saved",
|
||||
"savingError": "Error saving",
|
||||
"adminAreaTitle": "Admin area",
|
||||
"adminAreaDescription": "System-wide settings and user management are available in the admin console.",
|
||||
"openAdminConsole": "Open admin console",
|
||||
"moodLogTitle": "moodLog",
|
||||
"moodLogDescription": "Import mood data from moodLog",
|
||||
"moodLogUrl": "moodLog URL",
|
||||
@@ -2231,7 +1971,6 @@
|
||||
"moodLogDisconnect": "Disconnect",
|
||||
"moodLogDisconnectTitle": "Disconnect moodLog?",
|
||||
"moodLogDisconnectDescription": "The connection will be removed and all imported mood data will be deleted.",
|
||||
"moodLogLastSync": "Last sync",
|
||||
"moodLogEntries": "Entries",
|
||||
"moodLogSyncResult": "{count} entries synchronized",
|
||||
"moodLogSyncFailed": "Sync failed",
|
||||
@@ -2298,14 +2037,10 @@
|
||||
"title": "Administration",
|
||||
"subtitle": "System status, users, and settings",
|
||||
"settingsSaveError": "Failed to save settings",
|
||||
"settingsSaveValidationError": "Please check the highlighted fields",
|
||||
"sectionsTitle": "Admin",
|
||||
"systemStatus": "System Status",
|
||||
"version": "Version",
|
||||
"database": "Database",
|
||||
"databaseConnected": "Connected",
|
||||
"databaseError": "Error",
|
||||
"gitCommit": "Git Commit",
|
||||
"startedAt": "Started",
|
||||
"users": "Users",
|
||||
"measurementsCount": "Measurements",
|
||||
@@ -2320,8 +2055,6 @@
|
||||
"load1": "Load (1m)",
|
||||
"memUsedPercent": "Memory",
|
||||
"diskBusyPercent": "Disk I/O",
|
||||
"diskReadBps": "Disk read",
|
||||
"diskWriteBps": "Disk write",
|
||||
"last2hours": "Last 2 hours",
|
||||
"empty": "Sampling started — data appears in 1–2 minutes.",
|
||||
"loadError": "Failed to load host metrics. Try refreshing the page."
|
||||
@@ -2376,18 +2109,11 @@
|
||||
"integrationWebPush": "Web Push",
|
||||
"integrationBugReport": "Bug Report",
|
||||
"apiGlobal": "Allow API endpoints and API tokens.",
|
||||
"moodLogGlobal": "Allow the moodLog integration.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionIntegrations": "Integrations",
|
||||
"sectionMedication": "Medications",
|
||||
"sectionManagement": "Management",
|
||||
"umamiTitle": "Umami",
|
||||
"umamiDescription": "Web analytics with Umami",
|
||||
"glitchtipTitle": "GlitchTip",
|
||||
"glitchtipDescription": "Error tracking with GlitchTip",
|
||||
"webPushVapidTitle": "Web Push VAPID",
|
||||
"monitoring": "Monitoring (Umami/GlitchTip)",
|
||||
"monitoringDescription": "Configuration for website analytics and error tracking.",
|
||||
"umamiEnabled": "Enable Umami tracking.",
|
||||
"umamiScriptUrl": "Umami script URL",
|
||||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||||
@@ -2398,7 +2124,6 @@
|
||||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||||
"glitchtipEnvironment": "GlitchTip environment",
|
||||
"glitchtipEnvironmentPlaceholder": "production",
|
||||
"webPushVapid": "Web Push (VAPID)",
|
||||
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
|
||||
"webPushVapidPublicKey": "VAPID public key",
|
||||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||||
@@ -2407,12 +2132,8 @@
|
||||
"webPushVapidSubject": "VAPID subject",
|
||||
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
|
||||
"configured": "Configured",
|
||||
"notConfigured": "Not configured",
|
||||
"monitoringTestUmami": "Send Umami test",
|
||||
"monitoringTestGlitchTip": "Send GlitchTip test",
|
||||
"monitoringTestSuccess": "Test event sent",
|
||||
"monitoringTestFailed": "Monitoring test failed",
|
||||
"monitoringSave": "Save monitoring",
|
||||
"bugReportGithub": "Bug report (GitHub Issues)",
|
||||
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
|
||||
"bugReportEnabledLabel": "Bug reports enabled",
|
||||
@@ -2421,9 +2142,6 @@
|
||||
"bugReportRepoPlaceholder": "owner/repo",
|
||||
"bugReportToken": "Issue token",
|
||||
"bugReportTokenPlaceholder": "ghp_...",
|
||||
"bugReportConfigured": "Bug report is configured.",
|
||||
"bugReportNotConfigured": "Bug report is not fully configured yet.",
|
||||
"bugReportSave": "Save bug report settings",
|
||||
"userManagement": "User Management",
|
||||
"userName": "Name",
|
||||
"userEmail": "Email",
|
||||
@@ -2438,7 +2156,6 @@
|
||||
"toUser": "Make user",
|
||||
"toAdmin": "Make admin",
|
||||
"ownRoleUnchangeable": "Cannot change own role",
|
||||
"lastAdminError": "Cannot demote the last admin",
|
||||
"resetPassword": "Reset password",
|
||||
"resetPasswordTitle": "Reset password: {name}",
|
||||
"newPassword": "New password",
|
||||
@@ -2456,14 +2173,11 @@
|
||||
"tokenLastUsed": "Last used",
|
||||
"tokenCreated": "Created",
|
||||
"tokenNeverUsed": "Never",
|
||||
"noTokens": "No API tokens found.",
|
||||
"tokensEmptyTitle": "No API tokens yet",
|
||||
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
|
||||
"loginOverview": "Login Overview",
|
||||
"allAuthEvents": "All auth events",
|
||||
"failedOnly": "Failed only",
|
||||
"noEntries": "No entries found.",
|
||||
"loginEmptyTitle": "No authentication events yet",
|
||||
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
|
||||
"loginEmptyFailedTitle": "No failed sign-in attempts",
|
||||
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
|
||||
@@ -2484,7 +2198,6 @@
|
||||
"outcomeSuccess": "Success",
|
||||
"outcomeFailed": "Failed",
|
||||
"auditDetails": "Details",
|
||||
"dangerZone": "Danger Zone",
|
||||
"deleteAllData": "Delete all data globally",
|
||||
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
|
||||
"deleteAllConfirm": "Really delete all data?",
|
||||
@@ -2509,8 +2222,6 @@
|
||||
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
|
||||
"reminderMissedMinutes": "Missed threshold (minutes)",
|
||||
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
|
||||
"reminderThresholdsSave": "Save thresholds",
|
||||
"notificationTest": "Test Notifications",
|
||||
"notificationTestSend": "Send test",
|
||||
"notificationTestSuccess": "Test notification sent",
|
||||
"notificationTestFailed": "Failed to send test notification",
|
||||
@@ -2523,8 +2234,6 @@
|
||||
"reminderCheckEventsToday": "Events today",
|
||||
"reminderCheckNotifSent": "Sent",
|
||||
"feedback": {
|
||||
"title": "Feedback Inbox",
|
||||
"description": "User-submitted feedback, bug reports, and feature requests.",
|
||||
"tabOpen": "Open",
|
||||
"tabAcknowledged": "Acknowledged",
|
||||
"tabResolved": "Resolved",
|
||||
@@ -2535,7 +2244,6 @@
|
||||
"createdAt": "Submitted",
|
||||
"actions": "Actions",
|
||||
"details": "Details",
|
||||
"noEntries": "No feedback in this category.",
|
||||
"emptyTitle": "All caught up",
|
||||
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
|
||||
"loading": "Loading feedback...",
|
||||
@@ -2544,11 +2252,6 @@
|
||||
"categoryFeature": "Feature",
|
||||
"categoryQuestion": "Question",
|
||||
"categoryOther": "Other",
|
||||
"statusOpen": "Open",
|
||||
"statusAcknowledged": "Acknowledged",
|
||||
"statusResolved": "Resolved",
|
||||
"statusArchived": "Archived",
|
||||
"dialogTitle": "Feedback details",
|
||||
"metadataHeading": "Metadata",
|
||||
"metaUrl": "URL",
|
||||
"metaLocale": "Locale",
|
||||
@@ -2569,8 +2272,7 @@
|
||||
"publishFailed": "GitHub publish failed",
|
||||
"updateFailed": "Update failed",
|
||||
"archiveConfirm": "Archive this feedback entry?",
|
||||
"submittedBy": "Submitted by",
|
||||
"sectionTitle": "Feedback"
|
||||
"submittedBy": "Submitted by"
|
||||
},
|
||||
"shell": {
|
||||
"overview": "Overview",
|
||||
@@ -2654,12 +2356,10 @@
|
||||
"subtitle": "Audit trail of authentication and admin events."
|
||||
},
|
||||
"auditLog": {
|
||||
"title": "Audit log",
|
||||
"filterActor": "Actor (user id or username)",
|
||||
"filterAction": "Action",
|
||||
"filterActionAll": "All actions",
|
||||
"filterTarget": "Target (id or path)",
|
||||
"filterSeverity": "Severity",
|
||||
"filterDate": "Date range",
|
||||
"range24h": "Last 24 hours",
|
||||
"range7d": "Last 7 days",
|
||||
@@ -2706,7 +2406,6 @@
|
||||
"runFailed": "Failed to enqueue backup",
|
||||
"loading": "Loading backups...",
|
||||
"loadError": "Failed to load backups.",
|
||||
"empty": "No backups recorded yet.",
|
||||
"emptyTitle": "No backups yet",
|
||||
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
|
||||
"colUser": "User",
|
||||
@@ -2753,10 +2452,7 @@
|
||||
"nextGoal": "Next goal",
|
||||
"allCompleted": "All achievements unlocked!",
|
||||
"completed": "Completed",
|
||||
"inProgress": "In progress",
|
||||
"progress": "Progress",
|
||||
"goalReached": "Goal reached",
|
||||
"remaining": "{count} remaining",
|
||||
"remainingUnlocks": "{count} still unlockable",
|
||||
"noneUnlockedYet": "No achievements unlocked yet.",
|
||||
"pointsValue": "{points} points",
|
||||
@@ -3020,8 +2716,7 @@
|
||||
"ariaLabel": "Hidden locked achievement"
|
||||
},
|
||||
"hiddenUnlockToast": {
|
||||
"title": "You unlocked a hidden achievement!",
|
||||
"description": "Tap to see the surprise."
|
||||
"title": "You unlocked a hidden achievement!"
|
||||
},
|
||||
"dashboardCard": {
|
||||
"title": "Recent unlocks",
|
||||
@@ -3035,20 +2730,9 @@
|
||||
"loginRequired": "Please sign in to report a bug.",
|
||||
"bugTitle": "Title",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Describe the bug in detail. What did you do? What happened? What did you expect?",
|
||||
"screenshot": "Screenshot (optional)",
|
||||
"screenshotPreview": "Screenshot preview",
|
||||
"attachScreenshot": "Attach screenshot",
|
||||
"imageOnly": "Only image files allowed",
|
||||
"tooLarge": "Screenshot is too large (max 5 MB)",
|
||||
"submit": "Send",
|
||||
"success": "Thank you! Your bug report has been submitted successfully.",
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"errorCreating": "Error creating report",
|
||||
"notConfiguredTitle": "Bug reports not available yet",
|
||||
"notConfiguredUser": "Bug reporting is disabled on this server. Please contact your administrator.",
|
||||
"notConfiguredAdmin": "Bug reporting requires a GitHub integration (issue token + repository). Configure it in the admin panel under Settings → Bug reports.",
|
||||
"openAdminSettings": "Open admin settings",
|
||||
"category": "Type",
|
||||
"categoryBug": "Bug report",
|
||||
"categoryFeature": "Feature request",
|
||||
@@ -3058,8 +2742,7 @@
|
||||
"githubEscalationNote": "Your feedback is stored locally. If the admin enables GitHub integration, it can be promoted to a public issue on request.",
|
||||
"internalOnlyNote": "Your feedback is stored locally and only visible to the administrator of this server.",
|
||||
"disabledTitle": "Bug reports are turned off",
|
||||
"disabledBody": "The administrator has disabled bug reports on this server.",
|
||||
"disabledError": "Bug reports are disabled by the administrator."
|
||||
"disabledBody": "The administrator has disabled bug reports on this server."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
@@ -3069,24 +2752,9 @@
|
||||
"noChannels": "Configure a notification channel in Settings first.",
|
||||
"goToSettings": "Go to Settings",
|
||||
"channelDisabled": "Disabled",
|
||||
"eventMedicationReminder": "Medication Reminder",
|
||||
"eventMedicationReminderDesc": "Reminder when an intake is due.",
|
||||
"eventMeasurementAnomaly": "Anomalous Measurement",
|
||||
"eventMeasurementAnomalyDesc": "Warning for unusual measurements (e.g., high blood pressure).",
|
||||
"eventComplianceLow": "Low Compliance",
|
||||
"eventComplianceLowDesc": "Notification when medication compliance drops below a threshold.",
|
||||
"eventWithingsSyncFailed": "Withings Sync Failed",
|
||||
"eventWithingsSyncFailedDesc": "Alert when the automatic Withings data sync fails.",
|
||||
"eventSystemAlert": "System Alert",
|
||||
"eventSystemAlertDesc": "Important system messages and administrative notices.",
|
||||
"eventPersonalRecord": "Personal Record",
|
||||
"eventPersonalRecordDesc": "Push when an all-time best is reached for a tracked metric or workout. Off by default."
|
||||
},
|
||||
"format": {
|
||||
"dateShort": "{month}/{day}/{year}",
|
||||
"timeShort": "{hours}:{minutes}",
|
||||
"dateTime": "{month}/{day}/{year}, {hours}:{minutes}"
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
"notice": "This locale is AI-drafted including the Coach's safety-critical instructions. Automated validation runs in CI; please report any AI Coach regressions on GitHub.",
|
||||
@@ -3094,108 +2762,10 @@
|
||||
"dismiss": "Dismiss"
|
||||
}
|
||||
},
|
||||
"classifications": {
|
||||
"bmi": {
|
||||
"Underweight": "Underweight",
|
||||
"Normal": "Normal",
|
||||
"Overweight": "Overweight",
|
||||
"ObesityGradeI": "Obesity Grade I",
|
||||
"ObesityGradeII": "Obesity Grade II",
|
||||
"ObesityGradeIII": "Obesity Grade III"
|
||||
},
|
||||
"bp": {
|
||||
"Optimal": "Optimal",
|
||||
"Normal": "Normal",
|
||||
"HighNormal": "High-normal",
|
||||
"HypertensionGrade1": "Hypertension Grade 1",
|
||||
"HypertensionGrade2": "Hypertension Grade 2",
|
||||
"HypertensionGrade3": "Hypertension Grade 3"
|
||||
},
|
||||
"pulse": {
|
||||
"Bradycardia": "Bradycardia",
|
||||
"Normal": "Normal",
|
||||
"Elevated": "Elevated",
|
||||
"Tachycardia": "Tachycardia"
|
||||
},
|
||||
"pulseTarget": {
|
||||
"SignificantlyLow": "Significantly low",
|
||||
"SlightlyLow": "Slightly low",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyElevated": "Slightly elevated",
|
||||
"SignificantlyElevated": "Significantly elevated"
|
||||
},
|
||||
"sleep": {
|
||||
"FarTooShort": "Far too short",
|
||||
"TooShort": "Too short",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyLong": "Slightly long",
|
||||
"FarTooLong": "Far too long"
|
||||
},
|
||||
"bodyFat": {
|
||||
"Essential": "Essential",
|
||||
"Athletic": "Athletic",
|
||||
"Fitness": "Fitness",
|
||||
"Average": "Average",
|
||||
"Obese": "Obese"
|
||||
},
|
||||
"steps": {
|
||||
"VeryLow": "Very low",
|
||||
"LowActive": "Low active",
|
||||
"ModeratelyActive": "Moderately active",
|
||||
"Active": "Active",
|
||||
"VeryActive": "Very active"
|
||||
},
|
||||
"general": {
|
||||
"Good": "Good",
|
||||
"Moderate": "Moderate",
|
||||
"Low": "Low",
|
||||
"VeryGood": "Very good",
|
||||
"VeryStable": "Very stable",
|
||||
"Stable": "Stable",
|
||||
"Fluctuating": "Fluctuating"
|
||||
},
|
||||
"alerts": {
|
||||
"bmiBelowNormalTitle": "BMI below normal range",
|
||||
"bmiBelowNormalMessage": "Your BMI of {bmi} is below the normal range (18.5–24.9).",
|
||||
"bmiOverweightTitle": "BMI in overweight range",
|
||||
"bmiOverweightMessage": "Your BMI of {bmi} is in the overweight range. Regular exercise and a balanced diet can help.",
|
||||
"bmiObesityTitle": "BMI in obesity range",
|
||||
"bmiObesityMessage": "Your BMI of {bmi} is in the obesity range.",
|
||||
"bmiNormalTitle": "BMI in normal range",
|
||||
"bmiNormalMessage": "Your BMI of {bmi} is in the healthy range.",
|
||||
"bpDangerTitle": "Blood pressure significantly elevated",
|
||||
"bpDangerMessage": "Your average blood pressure ({sys}/{dia}) is classified as \"{category}\".",
|
||||
"bpWarningTitle": "Blood pressure slightly elevated",
|
||||
"bpWarningMessage": "Your average blood pressure ({sys}/{dia}) is in the \"{category}\" range.",
|
||||
"bpTargetGoodTitle": "Good blood pressure target adherence",
|
||||
"bpTargetGoodMessage": "{pct}% of your readings are within the target range.",
|
||||
"bpTargetBadTitle": "Blood pressure often outside target range",
|
||||
"bpTargetBadMessage": "Only {pct}% of your readings are within the target range.",
|
||||
"weightIncreasingTitle": "Weight increasing",
|
||||
"weightIncreasingMessage": "Your weight is increasing by approx. {change} kg per week over the last 30 days.",
|
||||
"weightDecreasingTitle": "Weight decreasing",
|
||||
"weightDecreasingMessage": "Your weight is decreasing by approx. {change} kg per week over the last 30 days.",
|
||||
"pulseOutliersTitle": "Pulse outliers detected",
|
||||
"pulseOutliersMessage": "{count} unusual pulse readings in the last 30 days.",
|
||||
"complianceLowTitle": "Low compliance: {name}",
|
||||
"complianceLowMessage": "Your 7-day compliance for {name} is only {pct}%. Regular intake is important.",
|
||||
"complianceGoodTitle": "Excellent compliance: {name}",
|
||||
"complianceGoodMessage": "{pct}% compliance over the last 7 days. Keep it up!"
|
||||
}
|
||||
},
|
||||
"targets": {
|
||||
"title": "Targets",
|
||||
"introText": "Your current values compared to recommended target ranges. Guideline sources are linked on each card.",
|
||||
"weight": "Weight",
|
||||
"bloodPressure": "Blood pressure",
|
||||
"bloodPressureOnTarget": "Blood pressure on target",
|
||||
"restingPulse": "Resting pulse",
|
||||
"sleepDuration": "Sleep duration",
|
||||
"bmi": "BMI",
|
||||
"bodyFat": "Body fat",
|
||||
"stepsPerDay": "Steps/day",
|
||||
"medicationCompliance": "Medication compliance",
|
||||
"steps": "steps",
|
||||
"average30d": "30-day average:",
|
||||
"consistency": {
|
||||
"ariaLabel": "Last 7 days, in-range status per day",
|
||||
|
||||
+7
-437
@@ -9,31 +9,19 @@
|
||||
"close": "Cerrar",
|
||||
"loading": "Cargando…...",
|
||||
"error": "Error",
|
||||
"success": "Éxito",
|
||||
"saved": "Guardado",
|
||||
"confirm": "Confirmar",
|
||||
"back": "Atrás",
|
||||
"next": "Siguiente",
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"search": "Buscar",
|
||||
"filter": "Filtrar",
|
||||
"noData": "Sin datos disponibles",
|
||||
"optional": "Opcional",
|
||||
"required": "Obligatorio",
|
||||
"all": "Todo",
|
||||
"active": "Activo",
|
||||
"inactive": "Inactivo",
|
||||
"enabled": "Activado",
|
||||
"disabled": "Desactivado",
|
||||
"networkError": "Error de red",
|
||||
"unknownError": "Error desconocido",
|
||||
"notLoggedIn": "No conectado",
|
||||
"noAccess": "Acceso denegado",
|
||||
"copied": "Copied!",
|
||||
"or": "o",
|
||||
"unknown": "Desconocido",
|
||||
"replace": "Reemplazar",
|
||||
"add": "Añadir",
|
||||
"import": "Importar",
|
||||
"test": "Probar",
|
||||
@@ -169,7 +157,6 @@
|
||||
"dashboard": "Panel",
|
||||
"measurements": "Measurements",
|
||||
"medications": "Medicamentos",
|
||||
"charts": "Historial",
|
||||
"insights": "Análisis",
|
||||
"targets": "Targets",
|
||||
"achievements": "Achievements",
|
||||
@@ -198,8 +185,6 @@
|
||||
"auth": {
|
||||
"login": "Iniciar sesión",
|
||||
"register": "Registrarse",
|
||||
"loginTitle": "Iniciar sesión",
|
||||
"registerTitle": "Registrarse",
|
||||
"username": "Nombre de usuario",
|
||||
"password": "Contraseña",
|
||||
"email": "Email address",
|
||||
@@ -210,26 +195,17 @@
|
||||
"loginWithPassword": "Sign in with password",
|
||||
"noAccount": "Don't have an account?",
|
||||
"hasAccount": "Already have an account?",
|
||||
"registerDisabled": "Registration is disabled.",
|
||||
"loginFailed": "Login failed",
|
||||
"passkeyFailed": "Passkey authentication cancelled or failed",
|
||||
"registerFailed": "Registration failed",
|
||||
"createAccount": "Create account",
|
||||
"newAccount": "Create new account",
|
||||
"backToPasskey": "Back to Passkey",
|
||||
"passkeySetupLater": "You can set up passkeys at any time in Settings.",
|
||||
"passwordMinLength": "Min. 12 characters",
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long.",
|
||||
"passwordStrength": "Password strength",
|
||||
"strengthWeak": "Very weak",
|
||||
"strengthFair": "Weak",
|
||||
"strengthGood": "Fair",
|
||||
"strengthStrong": "Strong",
|
||||
"strengthVeryStrong": "Very strong"
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Panel",
|
||||
"subtitle": "Your health overview",
|
||||
"greeting": {
|
||||
"morning": "Good morning",
|
||||
"day": "Hello",
|
||||
@@ -260,25 +236,13 @@
|
||||
"stepsShort": "Pasos",
|
||||
"vo2MaxShort": "VO₂ max",
|
||||
"bpInTargetShort": "PA-objetivo",
|
||||
"days30Short": "30d",
|
||||
"medications": "Medicamentos",
|
||||
"insightsPreview": "AI Insights preview",
|
||||
"lastMeasurement": "Last measurement",
|
||||
"noMeasurements": "No measurements yet",
|
||||
"trend": "Tendencia",
|
||||
"trendUp": "rising",
|
||||
"trendDown": "falling",
|
||||
"trendStable": "stable",
|
||||
"quickEntry": "Quick entry",
|
||||
"quickAddMeasurement": "Log measurement",
|
||||
"quickAddMood": "Log mood",
|
||||
"addMeasurement": "Add measurement",
|
||||
"compliance7d": "Compliance (7 days)",
|
||||
"complianceGood": "Bien",
|
||||
"complianceLow": "Low",
|
||||
"mood": "Estado de ánimo",
|
||||
"customizeTitle": "Dashboard layout",
|
||||
"customizeSubtitle": "Choose which cards appear on your dashboard and in what order. Defaults work out of the box.",
|
||||
"layoutReset": "Reset to defaults",
|
||||
"layoutSaveSuccess": "Dashboard layout saved",
|
||||
"layoutSaveError": "Could not save dashboard layout",
|
||||
@@ -297,11 +261,7 @@
|
||||
"lastInjection": "Last injection",
|
||||
"nextInjection": "Next injection",
|
||||
"weightDelta": "since start",
|
||||
"inDays": "in {count} days",
|
||||
"empty": {
|
||||
"title": "No active GLP-1 medication",
|
||||
"description": "Add a GLP-1 receptor agonist (Mounjaro, Ozempic, Wegovy, …) to surface dose, schedule, and weight response here."
|
||||
}
|
||||
"inDays": "in {count} days"
|
||||
}
|
||||
},
|
||||
"measurements": {
|
||||
@@ -311,7 +271,6 @@
|
||||
"editMeasurement": "Edit measurement",
|
||||
"type": "Tipo",
|
||||
"value": "Valor",
|
||||
"unit": "Unit",
|
||||
"date": "Fecha",
|
||||
"source": "Source",
|
||||
"notes": "Notas",
|
||||
@@ -349,8 +308,6 @@
|
||||
"glucoseContextPostprandial": "Post-meal (2h after eating)",
|
||||
"glucoseContextRandom": "Random / casual",
|
||||
"glucoseContextBedtime": "Before bed",
|
||||
"glucoseUnit": "Glucose display unit",
|
||||
"glucoseUnitHint": "Stored canonically in mg/dL; display unit is your preference.",
|
||||
"unitHours": "hours",
|
||||
"unitSteps": "Pasos",
|
||||
"sourceManual": "Manual",
|
||||
@@ -371,7 +328,6 @@
|
||||
"loginRequired": "Please sign in to view measurements.",
|
||||
"allTypes": "All types",
|
||||
"measurementCount": "{count} measurements",
|
||||
"noMeasurements": "No measurements found",
|
||||
"emptyTitle": "No measurements yet",
|
||||
"emptyDescription": "Log your weight, blood pressure, pulse, or other vitals to start tracking trends.",
|
||||
"emptyFilteredTitle": "No measurements match this filter",
|
||||
@@ -382,10 +338,7 @@
|
||||
"actions": "Acciones",
|
||||
"deleteConfirmTitle": "Delete measurement?",
|
||||
"deleteConfirmDescription": "This measurement will be permanently deleted.",
|
||||
"pageInfo": "Page {page} de{total}",
|
||||
"showing": "Showing",
|
||||
"of": "de",
|
||||
"entries": "entries"
|
||||
"pageInfo": "Page {page} de{total}"
|
||||
},
|
||||
"mood": {
|
||||
"title": "Estado de ánimo",
|
||||
@@ -404,14 +357,9 @@
|
||||
"levelOkay": "Okay",
|
||||
"levelSchlecht": "Mal",
|
||||
"levelLausig": "Terrible",
|
||||
"sourceManual": "Manual",
|
||||
"sourceMoodlog": "moodLog",
|
||||
"sourceWeb": "Web",
|
||||
"sourceTelegram": "Telegram",
|
||||
"sourceDaylio": "Daylio",
|
||||
"allMoods": "All moods",
|
||||
"entryCount": "{count} entries",
|
||||
"noEntries": "No mood entries found",
|
||||
"emptyTitle": "No mood entries yet",
|
||||
"emptyDescription": "Log how you feel today to spot patterns over time.",
|
||||
"emptyFilteredTitle": "No mood entries match this filter",
|
||||
@@ -436,34 +384,21 @@
|
||||
"editMedication": "Edit medication",
|
||||
"newMedication": "New medication",
|
||||
"firstMedication": "Add first medication",
|
||||
"noMedicationsYet": "No medications added yet",
|
||||
"emptyTitle": "No medications yet",
|
||||
"emptyDescription": "Add medications, dosages, and reminder windows to track compliance.",
|
||||
"loadFailed": "Could not load medications",
|
||||
"retryLoad": "Reintentar",
|
||||
"name": "Nombre",
|
||||
"dose": "Dosis",
|
||||
"doseAmount": "Amount",
|
||||
"doseUnit": "Unit",
|
||||
"category": "Category",
|
||||
"schedule": "Schedule",
|
||||
"scheduleFrom": "Desde",
|
||||
"scheduleTo": "Hasta",
|
||||
"scheduleLabel": "Label",
|
||||
"scheduleDays": "Days",
|
||||
"scheduleDaily": "Daily",
|
||||
"active": "Activo",
|
||||
"inactive": "Paused",
|
||||
"intakeHistory": "Intake history",
|
||||
"showIntakeHistory": "Show intake history",
|
||||
"hideIntakeHistory": "Hide intake history",
|
||||
"markTaken": "Tomada",
|
||||
"markSkipped": "Omitida",
|
||||
"deleteConfirm": "Delete medication?",
|
||||
"deleteDescription": "The medication and all intake records will be permanently deleted.",
|
||||
"noMedications": "No medications found.",
|
||||
"compliance": "Cumplimiento",
|
||||
"import": "Importar",
|
||||
"importIntakes": "Import intakes",
|
||||
"importDescription": "Paste a JSON array with intake data. Expected format:",
|
||||
"importUploadFile": "Upload JSON file",
|
||||
@@ -477,7 +412,6 @@
|
||||
"importInvalidSkipped": "{count} invalid entries skipped",
|
||||
"importFailed": "Import failed",
|
||||
"importInvalidFormat": "Invalid JSON format",
|
||||
"apiAccess": "API access",
|
||||
"apiEndpointTitle": "API Endpoint: {name}",
|
||||
"apiEndpointDescription": "Use this endpoint to record intakes via API (e.g., iPhone Shortcut or cron job).",
|
||||
"apiEndpointActive": "API endpoint active",
|
||||
@@ -492,8 +426,6 @@
|
||||
"statusLoadFailed": "Could not load status",
|
||||
"changeFailed": "Change failed",
|
||||
"categoryBloodPressure": "Presión arterial",
|
||||
"categoryCholesterol": "Cholesterol",
|
||||
"categoryDiabetes": "Diabetes",
|
||||
"categoryVitamin": "Vitamins",
|
||||
"categoryThyroid": "Thyroid",
|
||||
"categoryHormone": "Hormones",
|
||||
@@ -524,7 +456,6 @@
|
||||
"intakeDeleteConfirm": "Delete intake record?",
|
||||
"intakeDeleteDescription": "This intake record will be permanently deleted.",
|
||||
"intakeCount": "{count} intakes",
|
||||
"viewHistory": "Historial",
|
||||
"today": "Hoy",
|
||||
"yesterday": "Ayer",
|
||||
"tomorrow": "Mañana",
|
||||
@@ -568,10 +499,8 @@
|
||||
"glp1DosesPerUnit": "Doses per pen / vial",
|
||||
"glp1DosesPerUnitPlaceholder": "e.g. 4 for a Mounjaro KwikPen",
|
||||
"glp1DosesPerUnitHelp": "Optional — set to enable the low-stock dashboard caption. Mounjaro KwikPen = 4, Ozempic 0.25/0.5 mg = 4, Wegovy single-dose pen = 1. Leave blank to disable inventory tracking.",
|
||||
"glp1Headline": "{name} · {dose}",
|
||||
"glp1LastInjection": "Last: {label}",
|
||||
"glp1LastInjectionWithSite": "Last: {label} · {site}",
|
||||
"glp1NextInjection": "Siguiente:{label}",
|
||||
"glp1NextInjectionDays": "Siguiente:{label} (in {days} days)",
|
||||
"glp1NextInjectionToday": "Next: today",
|
||||
"glp1NextInjectionTomorrow": "Next: tomorrow",
|
||||
@@ -738,7 +667,6 @@
|
||||
"siteThighRight": "Right thigh",
|
||||
"siteUpperArmLeft": "Left upper arm",
|
||||
"siteUpperArmRight": "Right upper arm",
|
||||
"sideEffectTagsLabel": "Common GLP-1 side effects",
|
||||
"sideEffectTagsHelp": "Tap a chip to add it to your mood-entry tags.",
|
||||
"sideEffectTagNausea": "nausea",
|
||||
"sideEffectTagConstipation": "constipation",
|
||||
@@ -774,12 +702,10 @@
|
||||
"purgeError": "Error deleting records",
|
||||
"invalidTimestamp": "Please select a valid time.",
|
||||
"noIntakesYet": "No intakes recorded yet",
|
||||
"noIntakesForMedication": "No intakes yet for",
|
||||
"deleteIntakeAriaLabel": "Delete intake",
|
||||
"actions": "Acciones",
|
||||
"pageInfo": "Page {page} de{total}",
|
||||
"loginRequiredIntakes": "Please sign in to view intakes.",
|
||||
"clear": "Clear",
|
||||
"phaseConfig": "Reminder phases",
|
||||
"phaseConfigDescription": "Configure timing for reminders.",
|
||||
"phaseGreen": "Green",
|
||||
@@ -872,24 +798,13 @@
|
||||
}
|
||||
},
|
||||
"charts": {
|
||||
"title": "Historial",
|
||||
"subtitle": "Visualization of your health data",
|
||||
"timeRange": "Time range",
|
||||
"days7": "7 days",
|
||||
"days30": "30 days",
|
||||
"days90": "90 days",
|
||||
"days365": "1 year",
|
||||
"daysAll": "Todo",
|
||||
"weight": "Peso",
|
||||
"bloodPressure": "Presión arterial",
|
||||
"pulse": "Pulso",
|
||||
"bodyFat": "Grasa corporal",
|
||||
"sleep": "Sueño",
|
||||
"steps": "Pasos",
|
||||
"compliance": "Cumplimiento",
|
||||
"noData": "No data in selected time range",
|
||||
"movingAverage": "Moving average",
|
||||
"target": "Target range",
|
||||
"bucketWeekly": "Weekly avg",
|
||||
"bucketMonthly": "Monthly avg",
|
||||
"points7Label": "7 pts",
|
||||
@@ -911,7 +826,6 @@
|
||||
"avgAllTimeShort": "All-time",
|
||||
"trend7dShort": "7-day trend",
|
||||
"trend": "Tendencia",
|
||||
"targetRanges": "Target ranges",
|
||||
"perWeek": "/week",
|
||||
"totalDelta": "Total",
|
||||
"selectMedication": "Select medication",
|
||||
@@ -923,7 +837,6 @@
|
||||
"colorRed": "Red:",
|
||||
"mood": "Estado de ánimo",
|
||||
"moodScore": "Mood Score",
|
||||
"moodMA": "7-day trend",
|
||||
"moodLabel1": "Terrible",
|
||||
"moodLabel2": "Mal",
|
||||
"moodLabel3": "Okay",
|
||||
@@ -961,7 +874,6 @@
|
||||
"personalBaseline": "Your normal",
|
||||
"deltaVsBaseline": "{delta} vs. your normal",
|
||||
"deltaUnchanged": "matches your normal",
|
||||
"targetWeight": "Target",
|
||||
"deltaVsTarget": "{delta} vs. target"
|
||||
},
|
||||
"chart": {
|
||||
@@ -989,25 +901,15 @@
|
||||
},
|
||||
"captionLastMonth": "vs. last month",
|
||||
"captionLastYear": "vs. last year",
|
||||
"delta": {
|
||||
"improved": "{delta} improved",
|
||||
"worsened": "{delta} worsened",
|
||||
"stable": "unchanged"
|
||||
},
|
||||
"deltaVs": {
|
||||
"lastMonth": "{delta} vs. last month",
|
||||
"lastYear": "{delta} vs. last year"
|
||||
},
|
||||
"tooltipPrior": "Prior period",
|
||||
"tooltipDelta": "Δ {delta}",
|
||||
"unavailable": {
|
||||
"lastMonth": "Comparison unavailable — no data from last month yet",
|
||||
"lastYear": "Comparison unavailable — no data from last year yet"
|
||||
},
|
||||
"insightsCallout": {
|
||||
"lastMonth": "Tracking against last month",
|
||||
"lastYear": "Tracking against last year"
|
||||
},
|
||||
"notAvailableForCompliance": "Comparison N/A for compliance"
|
||||
},
|
||||
"insights": {
|
||||
@@ -1447,10 +1349,7 @@
|
||||
"generatePrompt": "Click \"Generate\" for AI-powered insights about your health data."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Personal thresholds",
|
||||
"subtitle": "Override the computed target range for any metric. Defaults stay in effect until you set a value here.",
|
||||
"defaultLabel": "Default",
|
||||
"overrideLabel": "Your override",
|
||||
"autoModeLabel": "Auto",
|
||||
"overrideModeLabel": "Override",
|
||||
"resetAction": "Reset to default",
|
||||
@@ -1478,32 +1377,11 @@
|
||||
"metricBodyWater": "Body water",
|
||||
"metricBoneMass": "Bone mass",
|
||||
"metricOxygenSaturation": "Oxygen saturation (SpO₂)",
|
||||
"unsetExplanation": "No override — using computed default.",
|
||||
"loadError": "Could not load thresholds"
|
||||
"unsetExplanation": "No override — using computed default."
|
||||
},
|
||||
"onboarding": {
|
||||
"setupDescription": "Set up your profile to get started. You can change this later in Settings.",
|
||||
"completeSetup": "Complete setup",
|
||||
"skip": "Omitir",
|
||||
"medicationsTitle": "Do you take medications?",
|
||||
"medicationsDescription": "Add your medications to enable reminders and compliance tracking.",
|
||||
"medNamePlaceholder": "Nombre",
|
||||
"medDosePlaceholder": "Dosis",
|
||||
"notificationsTitle": "Reminders",
|
||||
"notificationsDescription": "HealthLog can remind you about your medications. Configure this later in Settings.",
|
||||
"telegramHint": "Reminders via Telegram bot with snooze buttons",
|
||||
"webPushHint": "Browser notifications directly to your device",
|
||||
"notificationsLater": "You can set this up anytime in Settings.",
|
||||
"targetsTitle": "Target Values",
|
||||
"targetsDescription": "Set optional target values for blood pressure and weight.",
|
||||
"targetSys": "Systolic (mmHg)",
|
||||
"targetDia": "Diastolic (mmHg)",
|
||||
"targetWeight": "Target weight (kg)",
|
||||
"errorProfile": "Could not save your profile. Please try again.",
|
||||
"errorMedication": "Could not add the medication \"{name}\". Please try again or add it later in Medications.",
|
||||
"errorTargets": "Could not save your target values. Please try again.",
|
||||
"errorGeneric": "Something went wrong while finishing setup. Please try again.",
|
||||
"medScheduleHint": "We'll add a default reminder window (08:00–09:00 daily). You can adjust it anytime in Medications.",
|
||||
"v2": {
|
||||
"title": "Welcome to HealthLog",
|
||||
"subtitle": "Three quick steps. You can finish anything later from Settings.",
|
||||
@@ -1582,27 +1460,6 @@
|
||||
"step3of4": "Paso 3 de 4",
|
||||
"step4of4": "Paso 4 de 4"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Te damos la bienvenida a HealthLog",
|
||||
"carouselLabel": "Bienvenida — tres diapositivas",
|
||||
"slideOf": "Diapositiva {current} de {total}",
|
||||
"gotoSlide": "Ir a la diapositiva {index}",
|
||||
"prevSlide": "Diapositiva anterior",
|
||||
"nextSlide": "Diapositiva siguiente",
|
||||
"slide1": {
|
||||
"title": "Tus datos de salud, en tus manos",
|
||||
"body": "HealthLog guarda cada medición en tu propia infraestructura. Sin publicidad, sin compartir con terceros, sin depender de una cuenta."
|
||||
},
|
||||
"slide2": {
|
||||
"title": "Una sola vista para cada fuente",
|
||||
"body": "Apple Health, Withings y la entrada manual se unen en un historial consistente, con prioridad de fuente por métrica que controlas tú."
|
||||
},
|
||||
"slide3": {
|
||||
"title": "Coach e Insights con sustancia",
|
||||
"body": "Un análisis basado solo en tus cifras, con cada afirmación verificable. Trae tu propia clave; tus datos no se usan para entrenar."
|
||||
},
|
||||
"cta": "Empezar"
|
||||
},
|
||||
"goals": {
|
||||
"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.",
|
||||
@@ -1669,10 +1526,8 @@
|
||||
"title": "Getting started",
|
||||
"subtitle": "Quick wins to get the most out of HealthLog.",
|
||||
"progress": "{done} de{total} Hecho",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissAll": "Hide checklist",
|
||||
"dismissTooltip": "Hide this item",
|
||||
"restoreHint": "You can restore the checklist from Settings.",
|
||||
"items": {
|
||||
"profileTitle": "Set your profile",
|
||||
"profileDescription": "Height, date of birth and gender unlock personalised targets.",
|
||||
@@ -1697,8 +1552,6 @@
|
||||
"remainingMany": "{count} more readings to go."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ajustes",
|
||||
"subtitle": "Profile, Security & Connections",
|
||||
"researchMode": {
|
||||
"sectionTitle": "Modo Investigación",
|
||||
"subtitle": "Visualización opcional de una curva estimada del nivel de fármaco GLP-1, derivada de la farmacocinética poblacional publicada por la EMA. Solo lectura: nunca una medición ni un consejo médico.",
|
||||
@@ -1841,18 +1694,9 @@
|
||||
"coming_soon": "Moving here with the next release update."
|
||||
}
|
||||
},
|
||||
"sectionsTitle": "Ajustes",
|
||||
"categoryGeneral": "General",
|
||||
"categoryNotifications": "Notificaciones",
|
||||
"categoryAi": "AI",
|
||||
"categoryPersonalization": "Personalization",
|
||||
"categoryIntegration": "Integration",
|
||||
"categoryApi": "API",
|
||||
"profile": "Perfil",
|
||||
"security": "Seguridad",
|
||||
"language": "Idioma",
|
||||
"languageDescription": "Choose the display language of the application.",
|
||||
"languageSystem": "System (automatic)",
|
||||
"username": "Nombre de usuario",
|
||||
"height": "Height (cm)",
|
||||
"dateOfBirth": "Fecha de nacimiento",
|
||||
@@ -1930,16 +1774,6 @@
|
||||
"webPushActive": "Activo",
|
||||
"kiInsights": "AI Insights (OpenAI)",
|
||||
"kiInsightsDescription": "Optional: Save your OpenAI key for daily, automatic AI evaluations in Insights.",
|
||||
"kiInsightsBenefitsTitle": "Benefits with OpenAI key",
|
||||
"kiInsightsBenefit1": "Daily summaries for general status, blood pressure, weight, pulse, BMI, and medication compliance.",
|
||||
"kiInsightsBenefit2": "Better trend and correlation interpretation based on your latest 30 daily measurement points per area.",
|
||||
"kiInsightsBenefit3": "Automatic background refresh so the Insights page always shows up-to-date assessments.",
|
||||
"createApiKeyHint": "Create your API key at:",
|
||||
"createApiKeyLinkLabel": "platform.openai.com/api-keys",
|
||||
"apiKey": "API Key",
|
||||
"apiKeyStored": "Key stored — enter new one to replace",
|
||||
"apiKeySaved": "API key saved",
|
||||
"apiKeyRemoved": "API key removed",
|
||||
"codexConnected": "ChatGPT connected successfully! AI insights are now active.",
|
||||
"codexDisconnected": "ChatGPT connection removed.",
|
||||
"codexConnectionFailed": "ChatGPT connection failed. Please try again.",
|
||||
@@ -1952,18 +1786,10 @@
|
||||
"regenerateRateLimit": "Please wait — you've hit the hourly limit for analyses.",
|
||||
"lastGeneratedAt": "Last generated",
|
||||
"ai": {
|
||||
"title": "AI Insights",
|
||||
"description": "Provider, model, key.",
|
||||
"chatgptConnectedBadge": "ChatGPT connected",
|
||||
"adminAiActiveBadge": "Admin AI active",
|
||||
"connectionExpiredBadge": "Connection expired",
|
||||
"chatgptConnectedHeading": "ChatGPT connected",
|
||||
"chatgptConnectedBody": "Insights are generated through your ChatGPT subscription — no extra cost.",
|
||||
"connectedSince": "Connected since {when}.",
|
||||
"disconnect": "Disconnect",
|
||||
"connectChatgptHeading": "Connect with ChatGPT",
|
||||
"connectChatgptBody": "Link your ChatGPT Pro/Max account to get AI-powered health analyses based on current medical guidelines. No additional API costs.",
|
||||
"connectChatgptCta": "Connect with ChatGPT",
|
||||
"deviceCodeHeading": "Finish connecting on chatgpt.com",
|
||||
"deviceCodeStep1": "Open this link on any device:",
|
||||
"deviceCodeStep2": "Enter this one-time code:",
|
||||
@@ -1972,42 +1798,20 @@
|
||||
"deviceCodeWaiting": "Waiting for approval…",
|
||||
"deviceCodeCancel": "Cancelar",
|
||||
"oauthNotConfigured": "ChatGPT OAuth is not configured on this instance — use your own API key below instead.",
|
||||
"adminFallback": "Alternatively, HealthLog will use the AI provider configured by the administrator.",
|
||||
"personalProviderHeading": "AI provider (personal)",
|
||||
"personalProviderBody": "Your own AI provider overrides the admin setting. Leave blank for the default. For ChatGPT Pro/Max OAuth use the connect button above.",
|
||||
"providerLabel": "Provider",
|
||||
"providerOptionDefault": "— Default (Admin/Codex) —",
|
||||
"providerOptionOpenai": "OpenAI (API key)",
|
||||
"providerOptionAnthropic": "Anthropic (Claude)",
|
||||
"providerOptionLocal": "Local (OpenAI-compatible)",
|
||||
"modelLabel": "Model",
|
||||
"modelOptionDefault": "— Default —",
|
||||
"modelOptionCustom": "Custom…",
|
||||
"customModelLabel": "Custom model name",
|
||||
"openaiKeyLabel": "OpenAI API key",
|
||||
"openaiKeyHelp": "Your own key — not connected to your ChatGPT subscription. For the subscription use the connect button above.",
|
||||
"anthropicKeyLabel": "Anthropic API key",
|
||||
"baseUrlLabel": "Base URL",
|
||||
"localKeyLabel": "API key (optional)",
|
||||
"savedPreview": "(saved {preview})",
|
||||
"savedShort": "(saved)",
|
||||
"saveCta": "Guardar",
|
||||
"testCta": "Test connection",
|
||||
"removeKeyCta": "Remove saved key",
|
||||
"keyRemoved": "Saved key removed",
|
||||
"removeKeyConfirmTitle": "Remove saved API key?",
|
||||
"removeKeyConfirmBody": "Insights for this provider will fall back to the admin/Codex provider until you save a new key.",
|
||||
"saved": "Guardado",
|
||||
"saveFailed": "Save failed",
|
||||
"testFailed": "Test failed",
|
||||
"errorGeneric": "Error",
|
||||
"providerChain": {
|
||||
"heading": "AI provider fallback chain",
|
||||
"activeLine": "Active provider: {provider}",
|
||||
"cachedSuffix": "(cached: {provider})",
|
||||
"chainLine": "Configured chain: {chain}",
|
||||
"managementHint": "Reordering and on/off toggles arrive in the next release.",
|
||||
"none": "none configured",
|
||||
"types": {
|
||||
"codex": "ChatGPT (Codex)",
|
||||
"openai": "OpenAI (your key)",
|
||||
@@ -2081,10 +1885,7 @@
|
||||
"withingsCredentialsSavedPlaceholder": "Saved — enter new to replace",
|
||||
"withingsCredentialsSavedPlaceholderSecret": "Saved — enter new to replace",
|
||||
"withingsSaveCredentials": "Save credentials",
|
||||
"withingsConnected": "Connected",
|
||||
"configured": "Configured",
|
||||
"withingsTokenExpired": "Token expired",
|
||||
"withingsLastSync": "Last sync",
|
||||
"withingsSync": "Sync now",
|
||||
"withingsFullSync": "Sync all data",
|
||||
"withingsFullSyncTitle": "Full synchronization?",
|
||||
@@ -2109,15 +1910,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"integrationStatus": {
|
||||
"stateConnected": "Connected",
|
||||
"stateError": "Error",
|
||||
"stateReauthRequired": "Reconnect required",
|
||||
"stateDisconnected": "Disconnected",
|
||||
"consecutiveFailures": "{count}/{threshold} consecutive failures",
|
||||
"lastSuccess": "Last successful sync",
|
||||
"lastAttempt": "Last attempt"
|
||||
},
|
||||
"integrationPill": {
|
||||
"connected": "Connected",
|
||||
"errorReconnect": "Error — reconnect",
|
||||
@@ -2130,7 +1922,6 @@
|
||||
},
|
||||
"apiTokens": "API Tokens",
|
||||
"apiTokensDescription": "Create API tokens for external medication intake (e.g., Shortcuts, automations).",
|
||||
"tokenName": "Token name",
|
||||
"tokenNamePlaceholder": "Token name (e.g., iPhone Shortcut)",
|
||||
"tokenCreated": "Token created — copy it now! It won't be shown again.",
|
||||
"tokenRevoke": "Revoke token?",
|
||||
@@ -2148,62 +1939,14 @@
|
||||
"tokenTableActions": "Acciones",
|
||||
"noActiveTokens": "No active tokens available.",
|
||||
"tokenNeverUsed": "Never",
|
||||
"tokenLastUsed": "Last used:",
|
||||
"tokenCreatedAt": "Created:",
|
||||
"apiEndpoint": "API endpoint for medication intake:",
|
||||
"apiEndpointsTitle": "API endpoints",
|
||||
"apiEndpointsDescription": "Overview of currently available external endpoint(s) for token-based ingestion.",
|
||||
"apiEndpointMethod": "Method",
|
||||
"apiEndpointPath": "Path",
|
||||
"apiEndpointAuth": "Authentication",
|
||||
"apiEndpointExample": "Body example",
|
||||
"export": "Data Export",
|
||||
"exportDescription": "Export all your health data.",
|
||||
"exportJson": "JSON Export",
|
||||
"exportCsv": "CSV Export",
|
||||
"doctorReport": "Doctor Report (PDF)",
|
||||
"auditLog": "Activity Log",
|
||||
"auditLogHidden": "Log hidden.",
|
||||
"auditLogShowing": "Showing last {count} de{total} entries",
|
||||
"auditNoActivities": "No activities found.",
|
||||
"auditAction": "Action",
|
||||
"auditCategory": "Category",
|
||||
"auditIp": "IP",
|
||||
"auditLocation": "Location",
|
||||
"auditTimestamp": "Hora",
|
||||
"auditOther": "Other",
|
||||
"auditCategoryAuth": "Auth",
|
||||
"auditCategoryData": "Datos",
|
||||
"auditCategoryIntegration": "Integration",
|
||||
"auditCategoryAI": "AI",
|
||||
"auditCategoryAdmin": "Admin",
|
||||
"auditActionAuthRegister": "Registration",
|
||||
"auditActionAuthLogin": "Iniciar sesión",
|
||||
"auditActionAuthLoginPasskey": "Passkey login",
|
||||
"auditActionAuthLoginPassword": "Password login",
|
||||
"auditActionAuthLoginFailed": "Failed login",
|
||||
"auditActionAuthLogout": "Cerrar sesión",
|
||||
"auditActionAuthPasskeyRegister": "Passkey added",
|
||||
"auditActionAuthPasskeyDelete": "Passkey deleted",
|
||||
"auditActionAuthPasswordChange": "Password changed",
|
||||
"auditActionMeasurementCreate": "Measurement created",
|
||||
"auditActionMeasurementUpdate": "Measurement updated",
|
||||
"auditActionMeasurementDelete": "Measurement deleted",
|
||||
"auditActionMedicationCreate": "Medication created",
|
||||
"auditActionMedicationUpdate": "Medication updated",
|
||||
"auditActionMedicationDelete": "Medication deleted",
|
||||
"auditActionMedicationIntake": "Intake recorded",
|
||||
"auditActionMedicationIngestExternal": "External intake",
|
||||
"auditActionWithingsConnect": "Withings connected",
|
||||
"auditActionWithingsDisconnect": "Withings disconnected",
|
||||
"auditActionExportDownload": "Export downloaded",
|
||||
"auditActionInsightsGenerate": "AI insight generated",
|
||||
"auditActionAdminUserUpdate": "Admin: User updated",
|
||||
"auditActionAdminUserResetPassword": "Admin: Password reset",
|
||||
"auditActionAdminSettingsUpdate": "Admin: Settings changed",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"dangerZoneTitle": "Danger Zone",
|
||||
"dangerZone": "Delete All Data",
|
||||
"dangerZoneDescription": "Deletes all your health data and integrations. Your user account will be preserved.",
|
||||
"dangerZoneConfirm": "Delete all data?",
|
||||
@@ -2213,9 +1956,6 @@
|
||||
"finalDelete": "Delete permanently",
|
||||
"saved": "Guardado",
|
||||
"savingError": "Error saving",
|
||||
"adminAreaTitle": "Admin area",
|
||||
"adminAreaDescription": "System-wide settings and user management are available in the admin console.",
|
||||
"openAdminConsole": "Open admin console",
|
||||
"moodLogTitle": "moodLog",
|
||||
"moodLogDescription": "Import mood data from moodLog",
|
||||
"moodLogUrl": "moodLog URL",
|
||||
@@ -2231,7 +1971,6 @@
|
||||
"moodLogDisconnect": "Disconnect",
|
||||
"moodLogDisconnectTitle": "Disconnect moodLog?",
|
||||
"moodLogDisconnectDescription": "The connection will be removed and all imported mood data will be deleted.",
|
||||
"moodLogLastSync": "Last sync",
|
||||
"moodLogEntries": "Entries",
|
||||
"moodLogSyncResult": "{count} entries synchronized",
|
||||
"moodLogSyncFailed": "Sync failed",
|
||||
@@ -2298,14 +2037,10 @@
|
||||
"title": "Administration",
|
||||
"subtitle": "System status, users, and settings",
|
||||
"settingsSaveError": "Failed to save settings",
|
||||
"settingsSaveValidationError": "Please check the highlighted fields",
|
||||
"sectionsTitle": "Admin",
|
||||
"systemStatus": "System Status",
|
||||
"version": "Version",
|
||||
"database": "Database",
|
||||
"databaseConnected": "Connected",
|
||||
"databaseError": "Error",
|
||||
"gitCommit": "Git Commit",
|
||||
"startedAt": "Started",
|
||||
"users": "Users",
|
||||
"measurementsCount": "Measurements",
|
||||
@@ -2320,8 +2055,6 @@
|
||||
"load1": "Load (1m)",
|
||||
"memUsedPercent": "Memory",
|
||||
"diskBusyPercent": "Disk I/O",
|
||||
"diskReadBps": "Disk read",
|
||||
"diskWriteBps": "Disk write",
|
||||
"last2hours": "Last 2 hours",
|
||||
"empty": "Sampling started — data appears in 1–2 minutes.",
|
||||
"loadError": "Failed to load host metrics. Try refreshing the page."
|
||||
@@ -2376,18 +2109,11 @@
|
||||
"integrationWebPush": "Web Push",
|
||||
"integrationBugReport": "Bug Report",
|
||||
"apiGlobal": "Allow API endpoints and API tokens.",
|
||||
"moodLogGlobal": "Allow the moodLog integration.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionIntegrations": "Integraciones",
|
||||
"sectionMedication": "Medicamentos",
|
||||
"sectionManagement": "Management",
|
||||
"umamiTitle": "Umami",
|
||||
"umamiDescription": "Web analytics with Umami",
|
||||
"glitchtipTitle": "GlitchTip",
|
||||
"glitchtipDescription": "Error tracking with GlitchTip",
|
||||
"webPushVapidTitle": "Web Push VAPID",
|
||||
"monitoring": "Monitoring (Umami/GlitchTip)",
|
||||
"monitoringDescription": "Configuration for website analytics and error tracking.",
|
||||
"umamiEnabled": "Enable Umami tracking.",
|
||||
"umamiScriptUrl": "Umami script URL",
|
||||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||||
@@ -2398,7 +2124,6 @@
|
||||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||||
"glitchtipEnvironment": "GlitchTip environment",
|
||||
"glitchtipEnvironmentPlaceholder": "production",
|
||||
"webPushVapid": "Web Push (VAPID)",
|
||||
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
|
||||
"webPushVapidPublicKey": "VAPID public key",
|
||||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||||
@@ -2407,12 +2132,8 @@
|
||||
"webPushVapidSubject": "VAPID subject",
|
||||
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
|
||||
"configured": "Configured",
|
||||
"notConfigured": "Not configured",
|
||||
"monitoringTestUmami": "Send Umami test",
|
||||
"monitoringTestGlitchTip": "Send GlitchTip test",
|
||||
"monitoringTestSuccess": "Test event sent",
|
||||
"monitoringTestFailed": "Monitoring test failed",
|
||||
"monitoringSave": "Save monitoring",
|
||||
"bugReportGithub": "Bug report (GitHub Issues)",
|
||||
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
|
||||
"bugReportEnabledLabel": "Bug reports enabled",
|
||||
@@ -2421,9 +2142,6 @@
|
||||
"bugReportRepoPlaceholder": "owner/repo",
|
||||
"bugReportToken": "Issue token",
|
||||
"bugReportTokenPlaceholder": "ghp_...",
|
||||
"bugReportConfigured": "Bug report is configured.",
|
||||
"bugReportNotConfigured": "Bug report is not fully configured yet.",
|
||||
"bugReportSave": "Save bug report settings",
|
||||
"userManagement": "User Management",
|
||||
"userName": "Nombre",
|
||||
"userEmail": "Correo electrónico",
|
||||
@@ -2438,7 +2156,6 @@
|
||||
"toUser": "Make user",
|
||||
"toAdmin": "Make admin",
|
||||
"ownRoleUnchangeable": "Cannot change own role",
|
||||
"lastAdminError": "Cannot demote the last admin",
|
||||
"resetPassword": "Reset password",
|
||||
"resetPasswordTitle": "Reset password: {name}",
|
||||
"newPassword": "New password",
|
||||
@@ -2456,14 +2173,11 @@
|
||||
"tokenLastUsed": "Last used",
|
||||
"tokenCreated": "Created",
|
||||
"tokenNeverUsed": "Never",
|
||||
"noTokens": "No API tokens found.",
|
||||
"tokensEmptyTitle": "No API tokens yet",
|
||||
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
|
||||
"loginOverview": "Login Overview",
|
||||
"allAuthEvents": "All auth events",
|
||||
"failedOnly": "Failed only",
|
||||
"noEntries": "No entries found.",
|
||||
"loginEmptyTitle": "No authentication events yet",
|
||||
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
|
||||
"loginEmptyFailedTitle": "No failed sign-in attempts",
|
||||
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
|
||||
@@ -2484,7 +2198,6 @@
|
||||
"outcomeSuccess": "Éxito",
|
||||
"outcomeFailed": "Failed",
|
||||
"auditDetails": "Details",
|
||||
"dangerZone": "Danger Zone",
|
||||
"deleteAllData": "Delete all data globally",
|
||||
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
|
||||
"deleteAllConfirm": "Really delete all data?",
|
||||
@@ -2509,8 +2222,6 @@
|
||||
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
|
||||
"reminderMissedMinutes": "Missed threshold (minutes)",
|
||||
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
|
||||
"reminderThresholdsSave": "Save thresholds",
|
||||
"notificationTest": "Test Notifications",
|
||||
"notificationTestSend": "Send test",
|
||||
"notificationTestSuccess": "Test notification sent",
|
||||
"notificationTestFailed": "Failed to send test notification",
|
||||
@@ -2523,8 +2234,6 @@
|
||||
"reminderCheckEventsToday": "Events today",
|
||||
"reminderCheckNotifSent": "Sent",
|
||||
"feedback": {
|
||||
"title": "Feedback Inbox",
|
||||
"description": "User-submitted feedback, bug reports, and feature requests.",
|
||||
"tabOpen": "Open",
|
||||
"tabAcknowledged": "Acknowledged",
|
||||
"tabResolved": "Resolved",
|
||||
@@ -2535,7 +2244,6 @@
|
||||
"createdAt": "Submitted",
|
||||
"actions": "Acciones",
|
||||
"details": "Details",
|
||||
"noEntries": "No feedback in this category.",
|
||||
"emptyTitle": "All caught up",
|
||||
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
|
||||
"loading": "Loading feedback...",
|
||||
@@ -2544,11 +2252,6 @@
|
||||
"categoryFeature": "Feature",
|
||||
"categoryQuestion": "Question",
|
||||
"categoryOther": "Other",
|
||||
"statusOpen": "Open",
|
||||
"statusAcknowledged": "Acknowledged",
|
||||
"statusResolved": "Resolved",
|
||||
"statusArchived": "Archived",
|
||||
"dialogTitle": "Feedback details",
|
||||
"metadataHeading": "Metadata",
|
||||
"metaUrl": "URL",
|
||||
"metaLocale": "Locale",
|
||||
@@ -2569,8 +2272,7 @@
|
||||
"publishFailed": "GitHub publish failed",
|
||||
"updateFailed": "Update failed",
|
||||
"archiveConfirm": "Archive this feedback entry?",
|
||||
"submittedBy": "Submitted by",
|
||||
"sectionTitle": "Feedback"
|
||||
"submittedBy": "Submitted by"
|
||||
},
|
||||
"shell": {
|
||||
"overview": "Resumen",
|
||||
@@ -2654,12 +2356,10 @@
|
||||
"subtitle": "Audit trail of authentication and admin events."
|
||||
},
|
||||
"auditLog": {
|
||||
"title": "Audit log",
|
||||
"filterActor": "Actor (user id or username)",
|
||||
"filterAction": "Action",
|
||||
"filterActionAll": "All actions",
|
||||
"filterTarget": "Target (id or path)",
|
||||
"filterSeverity": "Severity",
|
||||
"filterDate": "Date range",
|
||||
"range24h": "Last 24 hours",
|
||||
"range7d": "Últimos 7 días",
|
||||
@@ -2706,7 +2406,6 @@
|
||||
"runFailed": "Failed to enqueue backup",
|
||||
"loading": "Loading backups...",
|
||||
"loadError": "Failed to load backups.",
|
||||
"empty": "No backups recorded yet.",
|
||||
"emptyTitle": "No backups yet",
|
||||
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
|
||||
"colUser": "User",
|
||||
@@ -2753,10 +2452,7 @@
|
||||
"nextGoal": "Next goal",
|
||||
"allCompleted": "All achievements unlocked!",
|
||||
"completed": "Completed",
|
||||
"inProgress": "In progress",
|
||||
"progress": "Progress",
|
||||
"goalReached": "Goal reached",
|
||||
"remaining": "{count} remaining",
|
||||
"remainingUnlocks": "{count} still unlockable",
|
||||
"noneUnlockedYet": "No achievements unlocked yet.",
|
||||
"pointsValue": "{points} points",
|
||||
@@ -3020,8 +2716,7 @@
|
||||
"ariaLabel": "Hidden locked achievement"
|
||||
},
|
||||
"hiddenUnlockToast": {
|
||||
"title": "You unlocked a hidden achievement!",
|
||||
"description": "Tap to see the surprise."
|
||||
"title": "You unlocked a hidden achievement!"
|
||||
},
|
||||
"dashboardCard": {
|
||||
"title": "Recent unlocks",
|
||||
@@ -3035,20 +2730,9 @@
|
||||
"loginRequired": "Please sign in to report a bug.",
|
||||
"bugTitle": "Title",
|
||||
"description": "Descripción",
|
||||
"descriptionPlaceholder": "Describe the bug in detail. What did you do? What happened? What did you expect?",
|
||||
"screenshot": "Screenshot (optional)",
|
||||
"screenshotPreview": "Screenshot preview",
|
||||
"attachScreenshot": "Attach screenshot",
|
||||
"imageOnly": "Only image files allowed",
|
||||
"tooLarge": "Screenshot is too large (max 5 MB)",
|
||||
"submit": "Send",
|
||||
"success": "Thank you! Your bug report has been submitted successfully.",
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"errorCreating": "Error creating report",
|
||||
"notConfiguredTitle": "Bug reports not available yet",
|
||||
"notConfiguredUser": "Bug reporting is disabled on this server. Please contact your administrator.",
|
||||
"notConfiguredAdmin": "Bug reporting requires a GitHub integration (issue token + repository). Configure it in the admin panel under Settings → Bug reports.",
|
||||
"openAdminSettings": "Open admin settings",
|
||||
"category": "Tipo",
|
||||
"categoryBug": "Bug report",
|
||||
"categoryFeature": "Feature request",
|
||||
@@ -3058,8 +2742,7 @@
|
||||
"githubEscalationNote": "Your feedback is stored locally. If the admin enables GitHub integration, it can be promoted to a public issue on request.",
|
||||
"internalOnlyNote": "Your feedback is stored locally and only visible to the administrator of this server.",
|
||||
"disabledTitle": "Bug reports are turned off",
|
||||
"disabledBody": "The administrator has disabled bug reports on this server.",
|
||||
"disabledError": "Bug reports are disabled by the administrator."
|
||||
"disabledBody": "The administrator has disabled bug reports on this server."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notificaciones",
|
||||
@@ -3069,24 +2752,9 @@
|
||||
"noChannels": "Configure a notification channel in Settings first.",
|
||||
"goToSettings": "Go to Settings",
|
||||
"channelDisabled": "Desactivado",
|
||||
"eventMedicationReminder": "Medication Reminder",
|
||||
"eventMedicationReminderDesc": "Reminder when an intake is due.",
|
||||
"eventMeasurementAnomaly": "Anomalous Measurement",
|
||||
"eventMeasurementAnomalyDesc": "Warning for unusual measurements (e.g., high blood pressure).",
|
||||
"eventComplianceLow": "Low Compliance",
|
||||
"eventComplianceLowDesc": "Notification when medication compliance drops below a threshold.",
|
||||
"eventWithingsSyncFailed": "Withings Sync Failed",
|
||||
"eventWithingsSyncFailedDesc": "Alert when the automatic Withings data sync fails.",
|
||||
"eventSystemAlert": "Alerta del sistema",
|
||||
"eventSystemAlertDesc": "Mensajes importantes del sistema y avisos administrativos.",
|
||||
"eventPersonalRecord": "Récord personal",
|
||||
"eventPersonalRecordDesc": "Notificación cuando se alcanza un nuevo récord en una métrica o entrenamiento. Desactivado por defecto."
|
||||
},
|
||||
"format": {
|
||||
"dateShort": "{month}/{day}/{year}",
|
||||
"timeShort": "{hours}:{minutes}",
|
||||
"dateTime": "{month}/{day}/{year}, {hours}:{minutes}"
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
"notice": "Este idioma está redactado por IA, incluidas las instrucciones críticas para la seguridad del Coach. La validación automática se ejecuta en CI; informe de cualquier regresión del Coach IA en GitHub.",
|
||||
@@ -3094,108 +2762,10 @@
|
||||
"dismiss": "Cerrar"
|
||||
}
|
||||
},
|
||||
"classifications": {
|
||||
"bmi": {
|
||||
"Underweight": "Underweight",
|
||||
"Normal": "Normal",
|
||||
"Overweight": "Overweight",
|
||||
"ObesityGradeI": "Obesity Grade I",
|
||||
"ObesityGradeII": "Obesity Grade II",
|
||||
"ObesityGradeIII": "Obesity Grade III"
|
||||
},
|
||||
"bp": {
|
||||
"Optimal": "Optimal",
|
||||
"Normal": "Normal",
|
||||
"HighNormal": "High-normal",
|
||||
"HypertensionGrade1": "Hypertension Grade 1",
|
||||
"HypertensionGrade2": "Hypertension Grade 2",
|
||||
"HypertensionGrade3": "Hypertension Grade 3"
|
||||
},
|
||||
"pulse": {
|
||||
"Bradycardia": "Bradycardia",
|
||||
"Normal": "Normal",
|
||||
"Elevated": "Elevated",
|
||||
"Tachycardia": "Tachycardia"
|
||||
},
|
||||
"pulseTarget": {
|
||||
"SignificantlyLow": "Significantly low",
|
||||
"SlightlyLow": "Slightly low",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyElevated": "Slightly elevated",
|
||||
"SignificantlyElevated": "Significantly elevated"
|
||||
},
|
||||
"sleep": {
|
||||
"FarTooShort": "Far too short",
|
||||
"TooShort": "Too short",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyLong": "Slightly long",
|
||||
"FarTooLong": "Far too long"
|
||||
},
|
||||
"bodyFat": {
|
||||
"Essential": "Essential",
|
||||
"Athletic": "Athletic",
|
||||
"Fitness": "Fitness",
|
||||
"Average": "Promedio",
|
||||
"Obese": "Obese"
|
||||
},
|
||||
"steps": {
|
||||
"VeryLow": "Very low",
|
||||
"LowActive": "Low active",
|
||||
"ModeratelyActive": "Moderately active",
|
||||
"Active": "Activo",
|
||||
"VeryActive": "Very active"
|
||||
},
|
||||
"general": {
|
||||
"Good": "Bien",
|
||||
"Moderate": "Moderate",
|
||||
"Low": "Low",
|
||||
"VeryGood": "Very good",
|
||||
"VeryStable": "Very stable",
|
||||
"Stable": "Stable",
|
||||
"Fluctuating": "Fluctuating"
|
||||
},
|
||||
"alerts": {
|
||||
"bmiBelowNormalTitle": "BMI below normal range",
|
||||
"bmiBelowNormalMessage": "Your BMI of {bmi} is below the normal range (18.5–24.9).",
|
||||
"bmiOverweightTitle": "BMI in overweight range",
|
||||
"bmiOverweightMessage": "Your BMI of {bmi} is in the overweight range. Regular exercise and a balanced diet can help.",
|
||||
"bmiObesityTitle": "BMI in obesity range",
|
||||
"bmiObesityMessage": "Your BMI of {bmi} is in the obesity range.",
|
||||
"bmiNormalTitle": "BMI in normal range",
|
||||
"bmiNormalMessage": "Your BMI of {bmi} is in the healthy range.",
|
||||
"bpDangerTitle": "Blood pressure significantly elevated",
|
||||
"bpDangerMessage": "Your average blood pressure ({sys}/{dia}) is classified as \"{category}\".",
|
||||
"bpWarningTitle": "Blood pressure slightly elevated",
|
||||
"bpWarningMessage": "Your average blood pressure ({sys}/{dia}) is in the \"{category}\" range.",
|
||||
"bpTargetGoodTitle": "Good blood pressure target adherence",
|
||||
"bpTargetGoodMessage": "{pct}% of your readings are within the target range.",
|
||||
"bpTargetBadTitle": "Blood pressure often outside target range",
|
||||
"bpTargetBadMessage": "Only {pct}% of your readings are within the target range.",
|
||||
"weightIncreasingTitle": "Weight increasing",
|
||||
"weightIncreasingMessage": "Your weight is increasing by approx. {change} kg per week over the last 30 days.",
|
||||
"weightDecreasingTitle": "Weight decreasing",
|
||||
"weightDecreasingMessage": "Your weight is decreasing by approx. {change} kg per week over the last 30 days.",
|
||||
"pulseOutliersTitle": "Pulse outliers detected",
|
||||
"pulseOutliersMessage": "{count} unusual pulse readings in the last 30 days.",
|
||||
"complianceLowTitle": "Low compliance: {name}",
|
||||
"complianceLowMessage": "Your 7-day compliance for {name} is only {pct}%. Regular intake is important.",
|
||||
"complianceGoodTitle": "Excellent compliance: {name}",
|
||||
"complianceGoodMessage": "{pct}% compliance over the last 7 days. Keep it up!"
|
||||
}
|
||||
},
|
||||
"targets": {
|
||||
"title": "Targets",
|
||||
"introText": "Your current values compared to recommended target ranges. Guideline sources are linked on each card.",
|
||||
"weight": "Peso",
|
||||
"bloodPressure": "Presión arterial",
|
||||
"bloodPressureOnTarget": "Blood pressure on target",
|
||||
"restingPulse": "Resting pulse",
|
||||
"sleepDuration": "Sleep duration",
|
||||
"bmi": "IMC",
|
||||
"bodyFat": "Grasa corporal",
|
||||
"stepsPerDay": "Steps/day",
|
||||
"medicationCompliance": "Medication compliance",
|
||||
"steps": "Pasos",
|
||||
"average30d": "30-day average:",
|
||||
"consistency": {
|
||||
"ariaLabel": "Last 7 days, in-range status per day",
|
||||
|
||||
+7
-437
@@ -9,31 +9,19 @@
|
||||
"close": "Fermer",
|
||||
"loading": "Chargement…...",
|
||||
"error": "Erreur",
|
||||
"success": "Succès",
|
||||
"saved": "Enregistré",
|
||||
"confirm": "Confirmer",
|
||||
"back": "Retour",
|
||||
"next": "Suivant",
|
||||
"yes": "Oui",
|
||||
"no": "Non",
|
||||
"search": "Rechercher",
|
||||
"filter": "Filtrer",
|
||||
"noData": "Aucune donnée disponible",
|
||||
"optional": "Facultatif",
|
||||
"required": "Requis",
|
||||
"all": "Tout",
|
||||
"active": "Actif",
|
||||
"inactive": "Inactif",
|
||||
"enabled": "Activé",
|
||||
"disabled": "Désactivé",
|
||||
"networkError": "Erreur réseau",
|
||||
"unknownError": "Erreur inconnue",
|
||||
"notLoggedIn": "Non connecté",
|
||||
"noAccess": "Accès refusé",
|
||||
"copied": "Copied!",
|
||||
"or": "ou",
|
||||
"unknown": "Inconnu",
|
||||
"replace": "Remplacer",
|
||||
"add": "Ajouter",
|
||||
"import": "Importer",
|
||||
"test": "Tester",
|
||||
@@ -169,7 +157,6 @@
|
||||
"dashboard": "Tableau de bord",
|
||||
"measurements": "Measurements",
|
||||
"medications": "Médicaments",
|
||||
"charts": "Historique",
|
||||
"insights": "Analyses",
|
||||
"targets": "Targets",
|
||||
"achievements": "Achievements",
|
||||
@@ -198,8 +185,6 @@
|
||||
"auth": {
|
||||
"login": "Se connecter",
|
||||
"register": "S'inscrire",
|
||||
"loginTitle": "Se connecter",
|
||||
"registerTitle": "S'inscrire",
|
||||
"username": "Nom d'utilisateur",
|
||||
"password": "Mot de passe",
|
||||
"email": "Email address",
|
||||
@@ -210,26 +195,17 @@
|
||||
"loginWithPassword": "Sign in with password",
|
||||
"noAccount": "Don't have an account?",
|
||||
"hasAccount": "Already have an account?",
|
||||
"registerDisabled": "Registration is disabled.",
|
||||
"loginFailed": "Login failed",
|
||||
"passkeyFailed": "Passkey authentication cancelled or failed",
|
||||
"registerFailed": "Registration failed",
|
||||
"createAccount": "Create account",
|
||||
"newAccount": "Create new account",
|
||||
"backToPasskey": "Back to Passkey",
|
||||
"passkeySetupLater": "You can set up passkeys at any time in Settings.",
|
||||
"passwordMinLength": "Min. 12 characters",
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long.",
|
||||
"passwordStrength": "Password strength",
|
||||
"strengthWeak": "Very weak",
|
||||
"strengthFair": "Weak",
|
||||
"strengthGood": "Fair",
|
||||
"strengthStrong": "Strong",
|
||||
"strengthVeryStrong": "Very strong"
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Tableau de bord",
|
||||
"subtitle": "Your health overview",
|
||||
"greeting": {
|
||||
"morning": "Good morning",
|
||||
"day": "Hello",
|
||||
@@ -260,25 +236,13 @@
|
||||
"stepsShort": "Pas",
|
||||
"vo2MaxShort": "VO₂ max",
|
||||
"bpInTargetShort": "TA-cible",
|
||||
"days30Short": "30d",
|
||||
"medications": "Médicaments",
|
||||
"insightsPreview": "AI Insights preview",
|
||||
"lastMeasurement": "Last measurement",
|
||||
"noMeasurements": "No measurements yet",
|
||||
"trend": "Tendance",
|
||||
"trendUp": "rising",
|
||||
"trendDown": "falling",
|
||||
"trendStable": "stable",
|
||||
"quickEntry": "Quick entry",
|
||||
"quickAddMeasurement": "Log measurement",
|
||||
"quickAddMood": "Log mood",
|
||||
"addMeasurement": "Add measurement",
|
||||
"compliance7d": "Compliance (7 days)",
|
||||
"complianceGood": "Bien",
|
||||
"complianceLow": "Low",
|
||||
"mood": "Humeur",
|
||||
"customizeTitle": "Dashboard layout",
|
||||
"customizeSubtitle": "Choose which cards appear on your dashboard and in what order. Defaults work out of the box.",
|
||||
"layoutReset": "Reset to defaults",
|
||||
"layoutSaveSuccess": "Dashboard layout saved",
|
||||
"layoutSaveError": "Could not save dashboard layout",
|
||||
@@ -297,11 +261,7 @@
|
||||
"lastInjection": "Last injection",
|
||||
"nextInjection": "Next injection",
|
||||
"weightDelta": "since start",
|
||||
"inDays": "in {count} days",
|
||||
"empty": {
|
||||
"title": "No active GLP-1 medication",
|
||||
"description": "Add a GLP-1 receptor agonist (Mounjaro, Ozempic, Wegovy, …) to surface dose, schedule, and weight response here."
|
||||
}
|
||||
"inDays": "in {count} days"
|
||||
}
|
||||
},
|
||||
"measurements": {
|
||||
@@ -311,7 +271,6 @@
|
||||
"editMeasurement": "Edit measurement",
|
||||
"type": "Type",
|
||||
"value": "Valeur",
|
||||
"unit": "Unit",
|
||||
"date": "Date",
|
||||
"source": "Source",
|
||||
"notes": "Notes",
|
||||
@@ -349,8 +308,6 @@
|
||||
"glucoseContextPostprandial": "Post-meal (2h after eating)",
|
||||
"glucoseContextRandom": "Random / casual",
|
||||
"glucoseContextBedtime": "Before bed",
|
||||
"glucoseUnit": "Glucose display unit",
|
||||
"glucoseUnitHint": "Stored canonically in mg/dL; display unit is your preference.",
|
||||
"unitHours": "hours",
|
||||
"unitSteps": "Pas",
|
||||
"sourceManual": "Manual",
|
||||
@@ -371,7 +328,6 @@
|
||||
"loginRequired": "Please sign in to view measurements.",
|
||||
"allTypes": "All types",
|
||||
"measurementCount": "{count} measurements",
|
||||
"noMeasurements": "No measurements found",
|
||||
"emptyTitle": "No measurements yet",
|
||||
"emptyDescription": "Log your weight, blood pressure, pulse, or other vitals to start tracking trends.",
|
||||
"emptyFilteredTitle": "No measurements match this filter",
|
||||
@@ -382,10 +338,7 @@
|
||||
"actions": "Actions",
|
||||
"deleteConfirmTitle": "Delete measurement?",
|
||||
"deleteConfirmDescription": "This measurement will be permanently deleted.",
|
||||
"pageInfo": "Page {page} de{total}",
|
||||
"showing": "Showing",
|
||||
"of": "de",
|
||||
"entries": "entries"
|
||||
"pageInfo": "Page {page} de{total}"
|
||||
},
|
||||
"mood": {
|
||||
"title": "Humeur",
|
||||
@@ -404,14 +357,9 @@
|
||||
"levelOkay": "Okay",
|
||||
"levelSchlecht": "Mauvais",
|
||||
"levelLausig": "Terrible",
|
||||
"sourceManual": "Manual",
|
||||
"sourceMoodlog": "moodLog",
|
||||
"sourceWeb": "Web",
|
||||
"sourceTelegram": "Telegram",
|
||||
"sourceDaylio": "Daylio",
|
||||
"allMoods": "All moods",
|
||||
"entryCount": "{count} entries",
|
||||
"noEntries": "No mood entries found",
|
||||
"emptyTitle": "No mood entries yet",
|
||||
"emptyDescription": "Log how you feel today to spot patterns over time.",
|
||||
"emptyFilteredTitle": "No mood entries match this filter",
|
||||
@@ -436,34 +384,21 @@
|
||||
"editMedication": "Edit medication",
|
||||
"newMedication": "New medication",
|
||||
"firstMedication": "Add first medication",
|
||||
"noMedicationsYet": "No medications added yet",
|
||||
"emptyTitle": "No medications yet",
|
||||
"emptyDescription": "Add medications, dosages, and reminder windows to track compliance.",
|
||||
"loadFailed": "Could not load medications",
|
||||
"retryLoad": "Réessayer",
|
||||
"name": "Nom",
|
||||
"dose": "Dose",
|
||||
"doseAmount": "Amount",
|
||||
"doseUnit": "Unit",
|
||||
"category": "Category",
|
||||
"schedule": "Schedule",
|
||||
"scheduleFrom": "De",
|
||||
"scheduleTo": "À",
|
||||
"scheduleLabel": "Label",
|
||||
"scheduleDays": "Days",
|
||||
"scheduleDaily": "Daily",
|
||||
"active": "Actif",
|
||||
"inactive": "Paused",
|
||||
"intakeHistory": "Intake history",
|
||||
"showIntakeHistory": "Show intake history",
|
||||
"hideIntakeHistory": "Hide intake history",
|
||||
"markTaken": "Pris",
|
||||
"markSkipped": "Sauté",
|
||||
"deleteConfirm": "Delete medication?",
|
||||
"deleteDescription": "The medication and all intake records will be permanently deleted.",
|
||||
"noMedications": "No medications found.",
|
||||
"compliance": "Observance",
|
||||
"import": "Importer",
|
||||
"importIntakes": "Import intakes",
|
||||
"importDescription": "Paste a JSON array with intake data. Expected format:",
|
||||
"importUploadFile": "Upload JSON file",
|
||||
@@ -477,7 +412,6 @@
|
||||
"importInvalidSkipped": "{count} invalid entries skipped",
|
||||
"importFailed": "Import failed",
|
||||
"importInvalidFormat": "Invalid JSON format",
|
||||
"apiAccess": "API access",
|
||||
"apiEndpointTitle": "API Endpoint: {name}",
|
||||
"apiEndpointDescription": "Use this endpoint to record intakes via API (e.g., iPhone Shortcut or cron job).",
|
||||
"apiEndpointActive": "API endpoint active",
|
||||
@@ -492,8 +426,6 @@
|
||||
"statusLoadFailed": "Could not load status",
|
||||
"changeFailed": "Change failed",
|
||||
"categoryBloodPressure": "Tension artérielle",
|
||||
"categoryCholesterol": "Cholesterol",
|
||||
"categoryDiabetes": "Diabetes",
|
||||
"categoryVitamin": "Vitamins",
|
||||
"categoryThyroid": "Thyroid",
|
||||
"categoryHormone": "Hormones",
|
||||
@@ -524,7 +456,6 @@
|
||||
"intakeDeleteConfirm": "Delete intake record?",
|
||||
"intakeDeleteDescription": "This intake record will be permanently deleted.",
|
||||
"intakeCount": "{count} intakes",
|
||||
"viewHistory": "Historique",
|
||||
"today": "Aujourd'hui",
|
||||
"yesterday": "Hier",
|
||||
"tomorrow": "Demain",
|
||||
@@ -568,10 +499,8 @@
|
||||
"glp1DosesPerUnit": "Doses per pen / vial",
|
||||
"glp1DosesPerUnitPlaceholder": "e.g. 4 for a Mounjaro KwikPen",
|
||||
"glp1DosesPerUnitHelp": "Optional — set to enable the low-stock dashboard caption. Mounjaro KwikPen = 4, Ozempic 0.25/0.5 mg = 4, Wegovy single-dose pen = 1. Leave blank to disable inventory tracking.",
|
||||
"glp1Headline": "{name} · {dose}",
|
||||
"glp1LastInjection": "Last: {label}",
|
||||
"glp1LastInjectionWithSite": "Last: {label} · {site}",
|
||||
"glp1NextInjection": "Suivant:{label}",
|
||||
"glp1NextInjectionDays": "Suivant:{label} (in {days} days)",
|
||||
"glp1NextInjectionToday": "Next: today",
|
||||
"glp1NextInjectionTomorrow": "Next: tomorrow",
|
||||
@@ -738,7 +667,6 @@
|
||||
"siteThighRight": "Right thigh",
|
||||
"siteUpperArmLeft": "Left upper arm",
|
||||
"siteUpperArmRight": "Right upper arm",
|
||||
"sideEffectTagsLabel": "Common GLP-1 side effects",
|
||||
"sideEffectTagsHelp": "Tap a chip to add it to your mood-entry tags.",
|
||||
"sideEffectTagNausea": "nausea",
|
||||
"sideEffectTagConstipation": "constipation",
|
||||
@@ -774,12 +702,10 @@
|
||||
"purgeError": "Error deleting records",
|
||||
"invalidTimestamp": "Please select a valid time.",
|
||||
"noIntakesYet": "No intakes recorded yet",
|
||||
"noIntakesForMedication": "No intakes yet for",
|
||||
"deleteIntakeAriaLabel": "Delete intake",
|
||||
"actions": "Actions",
|
||||
"pageInfo": "Page {page} de{total}",
|
||||
"loginRequiredIntakes": "Please sign in to view intakes.",
|
||||
"clear": "Clear",
|
||||
"phaseConfig": "Reminder phases",
|
||||
"phaseConfigDescription": "Configure timing for reminders.",
|
||||
"phaseGreen": "Green",
|
||||
@@ -872,24 +798,13 @@
|
||||
}
|
||||
},
|
||||
"charts": {
|
||||
"title": "Historique",
|
||||
"subtitle": "Visualization of your health data",
|
||||
"timeRange": "Time range",
|
||||
"days7": "7 days",
|
||||
"days30": "30 days",
|
||||
"days90": "90 days",
|
||||
"days365": "1 year",
|
||||
"daysAll": "Tout",
|
||||
"weight": "Poids",
|
||||
"bloodPressure": "Tension artérielle",
|
||||
"pulse": "Pouls",
|
||||
"bodyFat": "Masse grasse",
|
||||
"sleep": "Sommeil",
|
||||
"steps": "Pas",
|
||||
"compliance": "Observance",
|
||||
"noData": "No data in selected time range",
|
||||
"movingAverage": "Moving average",
|
||||
"target": "Target range",
|
||||
"bucketWeekly": "Weekly avg",
|
||||
"bucketMonthly": "Monthly avg",
|
||||
"points7Label": "7 pts",
|
||||
@@ -911,7 +826,6 @@
|
||||
"avgAllTimeShort": "All-time",
|
||||
"trend7dShort": "7-day trend",
|
||||
"trend": "Tendance",
|
||||
"targetRanges": "Target ranges",
|
||||
"perWeek": "/week",
|
||||
"totalDelta": "Total",
|
||||
"selectMedication": "Select medication",
|
||||
@@ -923,7 +837,6 @@
|
||||
"colorRed": "Red:",
|
||||
"mood": "Humeur",
|
||||
"moodScore": "Mood Score",
|
||||
"moodMA": "7-day trend",
|
||||
"moodLabel1": "Terrible",
|
||||
"moodLabel2": "Mauvais",
|
||||
"moodLabel3": "Okay",
|
||||
@@ -961,7 +874,6 @@
|
||||
"personalBaseline": "Your normal",
|
||||
"deltaVsBaseline": "{delta} vs. your normal",
|
||||
"deltaUnchanged": "matches your normal",
|
||||
"targetWeight": "Target",
|
||||
"deltaVsTarget": "{delta} vs. target"
|
||||
},
|
||||
"chart": {
|
||||
@@ -989,25 +901,15 @@
|
||||
},
|
||||
"captionLastMonth": "vs. last month",
|
||||
"captionLastYear": "vs. last year",
|
||||
"delta": {
|
||||
"improved": "{delta} improved",
|
||||
"worsened": "{delta} worsened",
|
||||
"stable": "unchanged"
|
||||
},
|
||||
"deltaVs": {
|
||||
"lastMonth": "{delta} vs. last month",
|
||||
"lastYear": "{delta} vs. last year"
|
||||
},
|
||||
"tooltipPrior": "Prior period",
|
||||
"tooltipDelta": "Δ {delta}",
|
||||
"unavailable": {
|
||||
"lastMonth": "Comparison unavailable — no data from last month yet",
|
||||
"lastYear": "Comparison unavailable — no data from last year yet"
|
||||
},
|
||||
"insightsCallout": {
|
||||
"lastMonth": "Tracking against last month",
|
||||
"lastYear": "Tracking against last year"
|
||||
},
|
||||
"notAvailableForCompliance": "Comparison N/A for compliance"
|
||||
},
|
||||
"insights": {
|
||||
@@ -1447,10 +1349,7 @@
|
||||
"generatePrompt": "Click \"Generate\" for AI-powered insights about your health data."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Personal thresholds",
|
||||
"subtitle": "Override the computed target range for any metric. Defaults stay in effect until you set a value here.",
|
||||
"defaultLabel": "Default",
|
||||
"overrideLabel": "Your override",
|
||||
"autoModeLabel": "Auto",
|
||||
"overrideModeLabel": "Override",
|
||||
"resetAction": "Reset to default",
|
||||
@@ -1478,32 +1377,11 @@
|
||||
"metricBodyWater": "Body water",
|
||||
"metricBoneMass": "Bone mass",
|
||||
"metricOxygenSaturation": "Oxygen saturation (SpO₂)",
|
||||
"unsetExplanation": "No override — using computed default.",
|
||||
"loadError": "Could not load thresholds"
|
||||
"unsetExplanation": "No override — using computed default."
|
||||
},
|
||||
"onboarding": {
|
||||
"setupDescription": "Set up your profile to get started. You can change this later in Settings.",
|
||||
"completeSetup": "Complete setup",
|
||||
"skip": "Ignorer",
|
||||
"medicationsTitle": "Do you take medications?",
|
||||
"medicationsDescription": "Add your medications to enable reminders and compliance tracking.",
|
||||
"medNamePlaceholder": "Nom",
|
||||
"medDosePlaceholder": "Dose",
|
||||
"notificationsTitle": "Reminders",
|
||||
"notificationsDescription": "HealthLog can remind you about your medications. Configure this later in Settings.",
|
||||
"telegramHint": "Reminders via Telegram bot with snooze buttons",
|
||||
"webPushHint": "Browser notifications directly to your device",
|
||||
"notificationsLater": "You can set this up anytime in Settings.",
|
||||
"targetsTitle": "Target Values",
|
||||
"targetsDescription": "Set optional target values for blood pressure and weight.",
|
||||
"targetSys": "Systolic (mmHg)",
|
||||
"targetDia": "Diastolic (mmHg)",
|
||||
"targetWeight": "Target weight (kg)",
|
||||
"errorProfile": "Could not save your profile. Please try again.",
|
||||
"errorMedication": "Could not add the medication \"{name}\". Please try again or add it later in Medications.",
|
||||
"errorTargets": "Could not save your target values. Please try again.",
|
||||
"errorGeneric": "Something went wrong while finishing setup. Please try again.",
|
||||
"medScheduleHint": "We'll add a default reminder window (08:00–09:00 daily). You can adjust it anytime in Medications.",
|
||||
"v2": {
|
||||
"title": "Welcome to HealthLog",
|
||||
"subtitle": "Three quick steps. You can finish anything later from Settings.",
|
||||
@@ -1582,27 +1460,6 @@
|
||||
"step3of4": "Étape 3 sur 4",
|
||||
"step4of4": "Étape 4 sur 4"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Bienvenue sur HealthLog",
|
||||
"carouselLabel": "Bienvenue — trois diapositives",
|
||||
"slideOf": "Diapositive {current} sur {total}",
|
||||
"gotoSlide": "Aller à la diapositive {index}",
|
||||
"prevSlide": "Diapositive précédente",
|
||||
"nextSlide": "Diapositive suivante",
|
||||
"slide1": {
|
||||
"title": "Vos données de santé vous appartiennent",
|
||||
"body": "HealthLog conserve chaque mesure sur votre propre infrastructure. Sans publicité, sans partage à des tiers, sans dépendance à un compte."
|
||||
},
|
||||
"slide2": {
|
||||
"title": "Une seule vue pour toutes vos sources",
|
||||
"body": "Apple Health, Withings et la saisie manuelle se rejoignent dans un historique cohérent, avec une priorité de source par métrique que vous contrôlez."
|
||||
},
|
||||
"slide3": {
|
||||
"title": "Un coach et des insights pertinents",
|
||||
"body": "Une analyse fondée sur vos chiffres, chaque conclusion étant traçable. Apportez votre propre clé, aucun entraînement sur vos données."
|
||||
},
|
||||
"cta": "Commencer"
|
||||
},
|
||||
"goals": {
|
||||
"title": "Que souhaitez-vous suivre ?",
|
||||
"body": "Sélectionnez les domaines qui comptent pour vous. Le tableau de bord et les rappels s'y adapteront.",
|
||||
@@ -1669,10 +1526,8 @@
|
||||
"title": "Getting started",
|
||||
"subtitle": "Quick wins to get the most out of HealthLog.",
|
||||
"progress": "{done} de{total} Terminé",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissAll": "Hide checklist",
|
||||
"dismissTooltip": "Hide this item",
|
||||
"restoreHint": "You can restore the checklist from Settings.",
|
||||
"items": {
|
||||
"profileTitle": "Set your profile",
|
||||
"profileDescription": "Height, date of birth and gender unlock personalised targets.",
|
||||
@@ -1697,8 +1552,6 @@
|
||||
"remainingMany": "{count} more readings to go."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Paramètres",
|
||||
"subtitle": "Profile, Security & Connections",
|
||||
"researchMode": {
|
||||
"sectionTitle": "Mode Recherche",
|
||||
"subtitle": "Affichage optionnel d'une courbe de niveau estimé de médicament GLP-1, dérivée de la pharmacocinétique de population publiée par l'EMA. Lecture seule — jamais une mesure ni un conseil médical.",
|
||||
@@ -1841,18 +1694,9 @@
|
||||
"coming_soon": "Moving here with the next release update."
|
||||
}
|
||||
},
|
||||
"sectionsTitle": "Paramètres",
|
||||
"categoryGeneral": "General",
|
||||
"categoryNotifications": "Notifications",
|
||||
"categoryAi": "AI",
|
||||
"categoryPersonalization": "Personalization",
|
||||
"categoryIntegration": "Integration",
|
||||
"categoryApi": "API",
|
||||
"profile": "Profil",
|
||||
"security": "Sécurité",
|
||||
"language": "Langue",
|
||||
"languageDescription": "Choose the display language of the application.",
|
||||
"languageSystem": "System (automatic)",
|
||||
"username": "Nom d'utilisateur",
|
||||
"height": "Height (cm)",
|
||||
"dateOfBirth": "Date de naissance",
|
||||
@@ -1930,16 +1774,6 @@
|
||||
"webPushActive": "Actif",
|
||||
"kiInsights": "AI Insights (OpenAI)",
|
||||
"kiInsightsDescription": "Optional: Save your OpenAI key for daily, automatic AI evaluations in Insights.",
|
||||
"kiInsightsBenefitsTitle": "Benefits with OpenAI key",
|
||||
"kiInsightsBenefit1": "Daily summaries for general status, blood pressure, weight, pulse, BMI, and medication compliance.",
|
||||
"kiInsightsBenefit2": "Better trend and correlation interpretation based on your latest 30 daily measurement points per area.",
|
||||
"kiInsightsBenefit3": "Automatic background refresh so the Insights page always shows up-to-date assessments.",
|
||||
"createApiKeyHint": "Create your API key at:",
|
||||
"createApiKeyLinkLabel": "platform.openai.com/api-keys",
|
||||
"apiKey": "API Key",
|
||||
"apiKeyStored": "Key stored — enter new one to replace",
|
||||
"apiKeySaved": "API key saved",
|
||||
"apiKeyRemoved": "API key removed",
|
||||
"codexConnected": "ChatGPT connected successfully! AI insights are now active.",
|
||||
"codexDisconnected": "ChatGPT connection removed.",
|
||||
"codexConnectionFailed": "ChatGPT connection failed. Please try again.",
|
||||
@@ -1952,18 +1786,10 @@
|
||||
"regenerateRateLimit": "Please wait — you've hit the hourly limit for analyses.",
|
||||
"lastGeneratedAt": "Last generated",
|
||||
"ai": {
|
||||
"title": "AI Insights",
|
||||
"description": "Provider, model, key.",
|
||||
"chatgptConnectedBadge": "ChatGPT connected",
|
||||
"adminAiActiveBadge": "Admin AI active",
|
||||
"connectionExpiredBadge": "Connection expired",
|
||||
"chatgptConnectedHeading": "ChatGPT connected",
|
||||
"chatgptConnectedBody": "Insights are generated through your ChatGPT subscription — no extra cost.",
|
||||
"connectedSince": "Connected since {when}.",
|
||||
"disconnect": "Disconnect",
|
||||
"connectChatgptHeading": "Connect with ChatGPT",
|
||||
"connectChatgptBody": "Link your ChatGPT Pro/Max account to get AI-powered health analyses based on current medical guidelines. No additional API costs.",
|
||||
"connectChatgptCta": "Connect with ChatGPT",
|
||||
"deviceCodeHeading": "Finish connecting on chatgpt.com",
|
||||
"deviceCodeStep1": "Open this link on any device:",
|
||||
"deviceCodeStep2": "Enter this one-time code:",
|
||||
@@ -1972,42 +1798,20 @@
|
||||
"deviceCodeWaiting": "Waiting for approval…",
|
||||
"deviceCodeCancel": "Annuler",
|
||||
"oauthNotConfigured": "ChatGPT OAuth is not configured on this instance — use your own API key below instead.",
|
||||
"adminFallback": "Alternatively, HealthLog will use the AI provider configured by the administrator.",
|
||||
"personalProviderHeading": "AI provider (personal)",
|
||||
"personalProviderBody": "Your own AI provider overrides the admin setting. Leave blank for the default. For ChatGPT Pro/Max OAuth use the connect button above.",
|
||||
"providerLabel": "Provider",
|
||||
"providerOptionDefault": "— Default (Admin/Codex) —",
|
||||
"providerOptionOpenai": "OpenAI (API key)",
|
||||
"providerOptionAnthropic": "Anthropic (Claude)",
|
||||
"providerOptionLocal": "Local (OpenAI-compatible)",
|
||||
"modelLabel": "Model",
|
||||
"modelOptionDefault": "— Default —",
|
||||
"modelOptionCustom": "Custom…",
|
||||
"customModelLabel": "Custom model name",
|
||||
"openaiKeyLabel": "OpenAI API key",
|
||||
"openaiKeyHelp": "Your own key — not connected to your ChatGPT subscription. For the subscription use the connect button above.",
|
||||
"anthropicKeyLabel": "Anthropic API key",
|
||||
"baseUrlLabel": "Base URL",
|
||||
"localKeyLabel": "API key (optional)",
|
||||
"savedPreview": "(saved {preview})",
|
||||
"savedShort": "(saved)",
|
||||
"saveCta": "Enregistrer",
|
||||
"testCta": "Test connection",
|
||||
"removeKeyCta": "Remove saved key",
|
||||
"keyRemoved": "Saved key removed",
|
||||
"removeKeyConfirmTitle": "Remove saved API key?",
|
||||
"removeKeyConfirmBody": "Insights for this provider will fall back to the admin/Codex provider until you save a new key.",
|
||||
"saved": "Enregistré",
|
||||
"saveFailed": "Save failed",
|
||||
"testFailed": "Test failed",
|
||||
"errorGeneric": "Erreur",
|
||||
"providerChain": {
|
||||
"heading": "AI provider fallback chain",
|
||||
"activeLine": "Active provider: {provider}",
|
||||
"cachedSuffix": "(cached: {provider})",
|
||||
"chainLine": "Configured chain: {chain}",
|
||||
"managementHint": "Reordering and on/off toggles arrive in the next release.",
|
||||
"none": "none configured",
|
||||
"types": {
|
||||
"codex": "ChatGPT (Codex)",
|
||||
"openai": "OpenAI (your key)",
|
||||
@@ -2081,10 +1885,7 @@
|
||||
"withingsCredentialsSavedPlaceholder": "Saved — enter new to replace",
|
||||
"withingsCredentialsSavedPlaceholderSecret": "Saved — enter new to replace",
|
||||
"withingsSaveCredentials": "Save credentials",
|
||||
"withingsConnected": "Connected",
|
||||
"configured": "Configured",
|
||||
"withingsTokenExpired": "Token expired",
|
||||
"withingsLastSync": "Last sync",
|
||||
"withingsSync": "Sync now",
|
||||
"withingsFullSync": "Sync all data",
|
||||
"withingsFullSyncTitle": "Full synchronization?",
|
||||
@@ -2109,15 +1910,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"integrationStatus": {
|
||||
"stateConnected": "Connected",
|
||||
"stateError": "Erreur",
|
||||
"stateReauthRequired": "Reconnect required",
|
||||
"stateDisconnected": "Disconnected",
|
||||
"consecutiveFailures": "{count}/{threshold} consecutive failures",
|
||||
"lastSuccess": "Last successful sync",
|
||||
"lastAttempt": "Last attempt"
|
||||
},
|
||||
"integrationPill": {
|
||||
"connected": "Connected",
|
||||
"errorReconnect": "Error — reconnect",
|
||||
@@ -2130,7 +1922,6 @@
|
||||
},
|
||||
"apiTokens": "API Tokens",
|
||||
"apiTokensDescription": "Create API tokens for external medication intake (e.g., Shortcuts, automations).",
|
||||
"tokenName": "Token name",
|
||||
"tokenNamePlaceholder": "Token name (e.g., iPhone Shortcut)",
|
||||
"tokenCreated": "Token created — copy it now! It won't be shown again.",
|
||||
"tokenRevoke": "Revoke token?",
|
||||
@@ -2148,62 +1939,14 @@
|
||||
"tokenTableActions": "Actions",
|
||||
"noActiveTokens": "No active tokens available.",
|
||||
"tokenNeverUsed": "Never",
|
||||
"tokenLastUsed": "Last used:",
|
||||
"tokenCreatedAt": "Created:",
|
||||
"apiEndpoint": "API endpoint for medication intake:",
|
||||
"apiEndpointsTitle": "API endpoints",
|
||||
"apiEndpointsDescription": "Overview of currently available external endpoint(s) for token-based ingestion.",
|
||||
"apiEndpointMethod": "Method",
|
||||
"apiEndpointPath": "Path",
|
||||
"apiEndpointAuth": "Authentication",
|
||||
"apiEndpointExample": "Body example",
|
||||
"export": "Data Export",
|
||||
"exportDescription": "Export all your health data.",
|
||||
"exportJson": "JSON Export",
|
||||
"exportCsv": "CSV Export",
|
||||
"doctorReport": "Doctor Report (PDF)",
|
||||
"auditLog": "Activity Log",
|
||||
"auditLogHidden": "Log hidden.",
|
||||
"auditLogShowing": "Showing last {count} de{total} entries",
|
||||
"auditNoActivities": "No activities found.",
|
||||
"auditAction": "Action",
|
||||
"auditCategory": "Category",
|
||||
"auditIp": "IP",
|
||||
"auditLocation": "Location",
|
||||
"auditTimestamp": "Heure",
|
||||
"auditOther": "Other",
|
||||
"auditCategoryAuth": "Auth",
|
||||
"auditCategoryData": "Données",
|
||||
"auditCategoryIntegration": "Integration",
|
||||
"auditCategoryAI": "AI",
|
||||
"auditCategoryAdmin": "Admin",
|
||||
"auditActionAuthRegister": "Registration",
|
||||
"auditActionAuthLogin": "Connexion",
|
||||
"auditActionAuthLoginPasskey": "Passkey login",
|
||||
"auditActionAuthLoginPassword": "Password login",
|
||||
"auditActionAuthLoginFailed": "Failed login",
|
||||
"auditActionAuthLogout": "Déconnexion",
|
||||
"auditActionAuthPasskeyRegister": "Passkey added",
|
||||
"auditActionAuthPasskeyDelete": "Passkey deleted",
|
||||
"auditActionAuthPasswordChange": "Password changed",
|
||||
"auditActionMeasurementCreate": "Measurement created",
|
||||
"auditActionMeasurementUpdate": "Measurement updated",
|
||||
"auditActionMeasurementDelete": "Measurement deleted",
|
||||
"auditActionMedicationCreate": "Medication created",
|
||||
"auditActionMedicationUpdate": "Medication updated",
|
||||
"auditActionMedicationDelete": "Medication deleted",
|
||||
"auditActionMedicationIntake": "Intake recorded",
|
||||
"auditActionMedicationIngestExternal": "External intake",
|
||||
"auditActionWithingsConnect": "Withings connected",
|
||||
"auditActionWithingsDisconnect": "Withings disconnected",
|
||||
"auditActionExportDownload": "Export downloaded",
|
||||
"auditActionInsightsGenerate": "AI insight generated",
|
||||
"auditActionAdminUserUpdate": "Admin: User updated",
|
||||
"auditActionAdminUserResetPassword": "Admin: Password reset",
|
||||
"auditActionAdminSettingsUpdate": "Admin: Settings changed",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"dangerZoneTitle": "Danger Zone",
|
||||
"dangerZone": "Delete All Data",
|
||||
"dangerZoneDescription": "Deletes all your health data and integrations. Your user account will be preserved.",
|
||||
"dangerZoneConfirm": "Delete all data?",
|
||||
@@ -2213,9 +1956,6 @@
|
||||
"finalDelete": "Delete permanently",
|
||||
"saved": "Enregistré",
|
||||
"savingError": "Error saving",
|
||||
"adminAreaTitle": "Admin area",
|
||||
"adminAreaDescription": "System-wide settings and user management are available in the admin console.",
|
||||
"openAdminConsole": "Open admin console",
|
||||
"moodLogTitle": "moodLog",
|
||||
"moodLogDescription": "Import mood data from moodLog",
|
||||
"moodLogUrl": "moodLog URL",
|
||||
@@ -2231,7 +1971,6 @@
|
||||
"moodLogDisconnect": "Disconnect",
|
||||
"moodLogDisconnectTitle": "Disconnect moodLog?",
|
||||
"moodLogDisconnectDescription": "The connection will be removed and all imported mood data will be deleted.",
|
||||
"moodLogLastSync": "Last sync",
|
||||
"moodLogEntries": "Entries",
|
||||
"moodLogSyncResult": "{count} entries synchronized",
|
||||
"moodLogSyncFailed": "Sync failed",
|
||||
@@ -2298,14 +2037,10 @@
|
||||
"title": "Administration",
|
||||
"subtitle": "System status, users, and settings",
|
||||
"settingsSaveError": "Failed to save settings",
|
||||
"settingsSaveValidationError": "Please check the highlighted fields",
|
||||
"sectionsTitle": "Admin",
|
||||
"systemStatus": "System Status",
|
||||
"version": "Version",
|
||||
"database": "Database",
|
||||
"databaseConnected": "Connected",
|
||||
"databaseError": "Erreur",
|
||||
"gitCommit": "Git Commit",
|
||||
"startedAt": "Started",
|
||||
"users": "Users",
|
||||
"measurementsCount": "Measurements",
|
||||
@@ -2320,8 +2055,6 @@
|
||||
"load1": "Load (1m)",
|
||||
"memUsedPercent": "Memory",
|
||||
"diskBusyPercent": "Disk I/O",
|
||||
"diskReadBps": "Disk read",
|
||||
"diskWriteBps": "Disk write",
|
||||
"last2hours": "Last 2 hours",
|
||||
"empty": "Sampling started — data appears in 1–2 minutes.",
|
||||
"loadError": "Failed to load host metrics. Try refreshing the page."
|
||||
@@ -2376,18 +2109,11 @@
|
||||
"integrationWebPush": "Web Push",
|
||||
"integrationBugReport": "Bug Report",
|
||||
"apiGlobal": "Allow API endpoints and API tokens.",
|
||||
"moodLogGlobal": "Allow the moodLog integration.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionIntegrations": "Intégrations",
|
||||
"sectionMedication": "Médicaments",
|
||||
"sectionManagement": "Management",
|
||||
"umamiTitle": "Umami",
|
||||
"umamiDescription": "Web analytics with Umami",
|
||||
"glitchtipTitle": "GlitchTip",
|
||||
"glitchtipDescription": "Error tracking with GlitchTip",
|
||||
"webPushVapidTitle": "Web Push VAPID",
|
||||
"monitoring": "Monitoring (Umami/GlitchTip)",
|
||||
"monitoringDescription": "Configuration for website analytics and error tracking.",
|
||||
"umamiEnabled": "Enable Umami tracking.",
|
||||
"umamiScriptUrl": "Umami script URL",
|
||||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||||
@@ -2398,7 +2124,6 @@
|
||||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||||
"glitchtipEnvironment": "GlitchTip environment",
|
||||
"glitchtipEnvironmentPlaceholder": "production",
|
||||
"webPushVapid": "Web Push (VAPID)",
|
||||
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
|
||||
"webPushVapidPublicKey": "VAPID public key",
|
||||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||||
@@ -2407,12 +2132,8 @@
|
||||
"webPushVapidSubject": "VAPID subject",
|
||||
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
|
||||
"configured": "Configured",
|
||||
"notConfigured": "Not configured",
|
||||
"monitoringTestUmami": "Send Umami test",
|
||||
"monitoringTestGlitchTip": "Send GlitchTip test",
|
||||
"monitoringTestSuccess": "Test event sent",
|
||||
"monitoringTestFailed": "Monitoring test failed",
|
||||
"monitoringSave": "Save monitoring",
|
||||
"bugReportGithub": "Bug report (GitHub Issues)",
|
||||
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
|
||||
"bugReportEnabledLabel": "Bug reports enabled",
|
||||
@@ -2421,9 +2142,6 @@
|
||||
"bugReportRepoPlaceholder": "owner/repo",
|
||||
"bugReportToken": "Issue token",
|
||||
"bugReportTokenPlaceholder": "ghp_...",
|
||||
"bugReportConfigured": "Bug report is configured.",
|
||||
"bugReportNotConfigured": "Bug report is not fully configured yet.",
|
||||
"bugReportSave": "Save bug report settings",
|
||||
"userManagement": "User Management",
|
||||
"userName": "Nom",
|
||||
"userEmail": "E-mail",
|
||||
@@ -2438,7 +2156,6 @@
|
||||
"toUser": "Make user",
|
||||
"toAdmin": "Make admin",
|
||||
"ownRoleUnchangeable": "Cannot change own role",
|
||||
"lastAdminError": "Cannot demote the last admin",
|
||||
"resetPassword": "Reset password",
|
||||
"resetPasswordTitle": "Reset password: {name}",
|
||||
"newPassword": "New password",
|
||||
@@ -2456,14 +2173,11 @@
|
||||
"tokenLastUsed": "Last used",
|
||||
"tokenCreated": "Created",
|
||||
"tokenNeverUsed": "Never",
|
||||
"noTokens": "No API tokens found.",
|
||||
"tokensEmptyTitle": "No API tokens yet",
|
||||
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
|
||||
"loginOverview": "Login Overview",
|
||||
"allAuthEvents": "All auth events",
|
||||
"failedOnly": "Failed only",
|
||||
"noEntries": "No entries found.",
|
||||
"loginEmptyTitle": "No authentication events yet",
|
||||
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
|
||||
"loginEmptyFailedTitle": "No failed sign-in attempts",
|
||||
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
|
||||
@@ -2484,7 +2198,6 @@
|
||||
"outcomeSuccess": "Succès",
|
||||
"outcomeFailed": "Failed",
|
||||
"auditDetails": "Details",
|
||||
"dangerZone": "Danger Zone",
|
||||
"deleteAllData": "Delete all data globally",
|
||||
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
|
||||
"deleteAllConfirm": "Really delete all data?",
|
||||
@@ -2509,8 +2222,6 @@
|
||||
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
|
||||
"reminderMissedMinutes": "Missed threshold (minutes)",
|
||||
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
|
||||
"reminderThresholdsSave": "Save thresholds",
|
||||
"notificationTest": "Test Notifications",
|
||||
"notificationTestSend": "Send test",
|
||||
"notificationTestSuccess": "Test notification sent",
|
||||
"notificationTestFailed": "Failed to send test notification",
|
||||
@@ -2523,8 +2234,6 @@
|
||||
"reminderCheckEventsToday": "Events today",
|
||||
"reminderCheckNotifSent": "Sent",
|
||||
"feedback": {
|
||||
"title": "Feedback Inbox",
|
||||
"description": "User-submitted feedback, bug reports, and feature requests.",
|
||||
"tabOpen": "Open",
|
||||
"tabAcknowledged": "Acknowledged",
|
||||
"tabResolved": "Resolved",
|
||||
@@ -2535,7 +2244,6 @@
|
||||
"createdAt": "Submitted",
|
||||
"actions": "Actions",
|
||||
"details": "Details",
|
||||
"noEntries": "No feedback in this category.",
|
||||
"emptyTitle": "All caught up",
|
||||
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
|
||||
"loading": "Loading feedback...",
|
||||
@@ -2544,11 +2252,6 @@
|
||||
"categoryFeature": "Feature",
|
||||
"categoryQuestion": "Question",
|
||||
"categoryOther": "Other",
|
||||
"statusOpen": "Open",
|
||||
"statusAcknowledged": "Acknowledged",
|
||||
"statusResolved": "Resolved",
|
||||
"statusArchived": "Archived",
|
||||
"dialogTitle": "Feedback details",
|
||||
"metadataHeading": "Metadata",
|
||||
"metaUrl": "URL",
|
||||
"metaLocale": "Locale",
|
||||
@@ -2569,8 +2272,7 @@
|
||||
"publishFailed": "GitHub publish failed",
|
||||
"updateFailed": "Update failed",
|
||||
"archiveConfirm": "Archive this feedback entry?",
|
||||
"submittedBy": "Submitted by",
|
||||
"sectionTitle": "Feedback"
|
||||
"submittedBy": "Submitted by"
|
||||
},
|
||||
"shell": {
|
||||
"overview": "Vue d'ensemble",
|
||||
@@ -2654,12 +2356,10 @@
|
||||
"subtitle": "Audit trail of authentication and admin events."
|
||||
},
|
||||
"auditLog": {
|
||||
"title": "Audit log",
|
||||
"filterActor": "Actor (user id or username)",
|
||||
"filterAction": "Action",
|
||||
"filterActionAll": "All actions",
|
||||
"filterTarget": "Target (id or path)",
|
||||
"filterSeverity": "Severity",
|
||||
"filterDate": "Date range",
|
||||
"range24h": "Last 24 hours",
|
||||
"range7d": "7 derniers jours",
|
||||
@@ -2706,7 +2406,6 @@
|
||||
"runFailed": "Failed to enqueue backup",
|
||||
"loading": "Loading backups...",
|
||||
"loadError": "Failed to load backups.",
|
||||
"empty": "No backups recorded yet.",
|
||||
"emptyTitle": "No backups yet",
|
||||
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
|
||||
"colUser": "User",
|
||||
@@ -2753,10 +2452,7 @@
|
||||
"nextGoal": "Next goal",
|
||||
"allCompleted": "All achievements unlocked!",
|
||||
"completed": "Completed",
|
||||
"inProgress": "In progress",
|
||||
"progress": "Progress",
|
||||
"goalReached": "Goal reached",
|
||||
"remaining": "{count} remaining",
|
||||
"remainingUnlocks": "{count} still unlockable",
|
||||
"noneUnlockedYet": "No achievements unlocked yet.",
|
||||
"pointsValue": "{points} points",
|
||||
@@ -3020,8 +2716,7 @@
|
||||
"ariaLabel": "Hidden locked achievement"
|
||||
},
|
||||
"hiddenUnlockToast": {
|
||||
"title": "You unlocked a hidden achievement!",
|
||||
"description": "Tap to see the surprise."
|
||||
"title": "You unlocked a hidden achievement!"
|
||||
},
|
||||
"dashboardCard": {
|
||||
"title": "Recent unlocks",
|
||||
@@ -3035,20 +2730,9 @@
|
||||
"loginRequired": "Please sign in to report a bug.",
|
||||
"bugTitle": "Title",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Describe the bug in detail. What did you do? What happened? What did you expect?",
|
||||
"screenshot": "Screenshot (optional)",
|
||||
"screenshotPreview": "Screenshot preview",
|
||||
"attachScreenshot": "Attach screenshot",
|
||||
"imageOnly": "Only image files allowed",
|
||||
"tooLarge": "Screenshot is too large (max 5 MB)",
|
||||
"submit": "Send",
|
||||
"success": "Thank you! Your bug report has been submitted successfully.",
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"errorCreating": "Error creating report",
|
||||
"notConfiguredTitle": "Bug reports not available yet",
|
||||
"notConfiguredUser": "Bug reporting is disabled on this server. Please contact your administrator.",
|
||||
"notConfiguredAdmin": "Bug reporting requires a GitHub integration (issue token + repository). Configure it in the admin panel under Settings → Bug reports.",
|
||||
"openAdminSettings": "Open admin settings",
|
||||
"category": "Type",
|
||||
"categoryBug": "Bug report",
|
||||
"categoryFeature": "Feature request",
|
||||
@@ -3058,8 +2742,7 @@
|
||||
"githubEscalationNote": "Your feedback is stored locally. If the admin enables GitHub integration, it can be promoted to a public issue on request.",
|
||||
"internalOnlyNote": "Your feedback is stored locally and only visible to the administrator of this server.",
|
||||
"disabledTitle": "Bug reports are turned off",
|
||||
"disabledBody": "The administrator has disabled bug reports on this server.",
|
||||
"disabledError": "Bug reports are disabled by the administrator."
|
||||
"disabledBody": "The administrator has disabled bug reports on this server."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
@@ -3069,24 +2752,9 @@
|
||||
"noChannels": "Configure a notification channel in Settings first.",
|
||||
"goToSettings": "Go to Settings",
|
||||
"channelDisabled": "Désactivé",
|
||||
"eventMedicationReminder": "Medication Reminder",
|
||||
"eventMedicationReminderDesc": "Reminder when an intake is due.",
|
||||
"eventMeasurementAnomaly": "Anomalous Measurement",
|
||||
"eventMeasurementAnomalyDesc": "Warning for unusual measurements (e.g., high blood pressure).",
|
||||
"eventComplianceLow": "Low Compliance",
|
||||
"eventComplianceLowDesc": "Notification when medication compliance drops below a threshold.",
|
||||
"eventWithingsSyncFailed": "Withings Sync Failed",
|
||||
"eventWithingsSyncFailedDesc": "Alert when the automatic Withings data sync fails.",
|
||||
"eventSystemAlert": "Alerte système",
|
||||
"eventSystemAlertDesc": "Messages système importants et avis administratifs.",
|
||||
"eventPersonalRecord": "Record personnel",
|
||||
"eventPersonalRecordDesc": "Notification lorsqu'un nouveau record est atteint pour une mesure ou un entraînement. Désactivé par défaut."
|
||||
},
|
||||
"format": {
|
||||
"dateShort": "{month}/{day}/{year}",
|
||||
"timeShort": "{hours}:{minutes}",
|
||||
"dateTime": "{month}/{day}/{year}, {hours}:{minutes}"
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
"notice": "Cette langue est rédigée par IA, y compris les instructions critiques pour la sécurité du Coach. Une validation automatique tourne en CI ; signalez toute régression du Coach IA sur GitHub.",
|
||||
@@ -3094,108 +2762,10 @@
|
||||
"dismiss": "Ignorer"
|
||||
}
|
||||
},
|
||||
"classifications": {
|
||||
"bmi": {
|
||||
"Underweight": "Underweight",
|
||||
"Normal": "Normal",
|
||||
"Overweight": "Overweight",
|
||||
"ObesityGradeI": "Obesity Grade I",
|
||||
"ObesityGradeII": "Obesity Grade II",
|
||||
"ObesityGradeIII": "Obesity Grade III"
|
||||
},
|
||||
"bp": {
|
||||
"Optimal": "Optimal",
|
||||
"Normal": "Normal",
|
||||
"HighNormal": "High-normal",
|
||||
"HypertensionGrade1": "Hypertension Grade 1",
|
||||
"HypertensionGrade2": "Hypertension Grade 2",
|
||||
"HypertensionGrade3": "Hypertension Grade 3"
|
||||
},
|
||||
"pulse": {
|
||||
"Bradycardia": "Bradycardia",
|
||||
"Normal": "Normal",
|
||||
"Elevated": "Elevated",
|
||||
"Tachycardia": "Tachycardia"
|
||||
},
|
||||
"pulseTarget": {
|
||||
"SignificantlyLow": "Significantly low",
|
||||
"SlightlyLow": "Slightly low",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyElevated": "Slightly elevated",
|
||||
"SignificantlyElevated": "Significantly elevated"
|
||||
},
|
||||
"sleep": {
|
||||
"FarTooShort": "Far too short",
|
||||
"TooShort": "Too short",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyLong": "Slightly long",
|
||||
"FarTooLong": "Far too long"
|
||||
},
|
||||
"bodyFat": {
|
||||
"Essential": "Essential",
|
||||
"Athletic": "Athletic",
|
||||
"Fitness": "Fitness",
|
||||
"Average": "Moyenne",
|
||||
"Obese": "Obese"
|
||||
},
|
||||
"steps": {
|
||||
"VeryLow": "Very low",
|
||||
"LowActive": "Low active",
|
||||
"ModeratelyActive": "Moderately active",
|
||||
"Active": "Actif",
|
||||
"VeryActive": "Very active"
|
||||
},
|
||||
"general": {
|
||||
"Good": "Bien",
|
||||
"Moderate": "Moderate",
|
||||
"Low": "Low",
|
||||
"VeryGood": "Very good",
|
||||
"VeryStable": "Very stable",
|
||||
"Stable": "Stable",
|
||||
"Fluctuating": "Fluctuating"
|
||||
},
|
||||
"alerts": {
|
||||
"bmiBelowNormalTitle": "BMI below normal range",
|
||||
"bmiBelowNormalMessage": "Your BMI of {bmi} is below the normal range (18.5–24.9).",
|
||||
"bmiOverweightTitle": "BMI in overweight range",
|
||||
"bmiOverweightMessage": "Your BMI of {bmi} is in the overweight range. Regular exercise and a balanced diet can help.",
|
||||
"bmiObesityTitle": "BMI in obesity range",
|
||||
"bmiObesityMessage": "Your BMI of {bmi} is in the obesity range.",
|
||||
"bmiNormalTitle": "BMI in normal range",
|
||||
"bmiNormalMessage": "Your BMI of {bmi} is in the healthy range.",
|
||||
"bpDangerTitle": "Blood pressure significantly elevated",
|
||||
"bpDangerMessage": "Your average blood pressure ({sys}/{dia}) is classified as \"{category}\".",
|
||||
"bpWarningTitle": "Blood pressure slightly elevated",
|
||||
"bpWarningMessage": "Your average blood pressure ({sys}/{dia}) is in the \"{category}\" range.",
|
||||
"bpTargetGoodTitle": "Good blood pressure target adherence",
|
||||
"bpTargetGoodMessage": "{pct}% of your readings are within the target range.",
|
||||
"bpTargetBadTitle": "Blood pressure often outside target range",
|
||||
"bpTargetBadMessage": "Only {pct}% of your readings are within the target range.",
|
||||
"weightIncreasingTitle": "Weight increasing",
|
||||
"weightIncreasingMessage": "Your weight is increasing by approx. {change} kg per week over the last 30 days.",
|
||||
"weightDecreasingTitle": "Weight decreasing",
|
||||
"weightDecreasingMessage": "Your weight is decreasing by approx. {change} kg per week over the last 30 days.",
|
||||
"pulseOutliersTitle": "Pulse outliers detected",
|
||||
"pulseOutliersMessage": "{count} unusual pulse readings in the last 30 days.",
|
||||
"complianceLowTitle": "Low compliance: {name}",
|
||||
"complianceLowMessage": "Your 7-day compliance for {name} is only {pct}%. Regular intake is important.",
|
||||
"complianceGoodTitle": "Excellent compliance: {name}",
|
||||
"complianceGoodMessage": "{pct}% compliance over the last 7 days. Keep it up!"
|
||||
}
|
||||
},
|
||||
"targets": {
|
||||
"title": "Targets",
|
||||
"introText": "Your current values compared to recommended target ranges. Guideline sources are linked on each card.",
|
||||
"weight": "Poids",
|
||||
"bloodPressure": "Tension artérielle",
|
||||
"bloodPressureOnTarget": "Blood pressure on target",
|
||||
"restingPulse": "Resting pulse",
|
||||
"sleepDuration": "Sleep duration",
|
||||
"bmi": "IMC",
|
||||
"bodyFat": "Masse grasse",
|
||||
"stepsPerDay": "Steps/day",
|
||||
"medicationCompliance": "Medication compliance",
|
||||
"steps": "Pas",
|
||||
"average30d": "30-day average:",
|
||||
"consistency": {
|
||||
"ariaLabel": "Last 7 days, in-range status per day",
|
||||
|
||||
+7
-437
@@ -9,31 +9,19 @@
|
||||
"close": "Chiudi",
|
||||
"loading": "Caricamento…...",
|
||||
"error": "Errore",
|
||||
"success": "Successo",
|
||||
"saved": "Salvato",
|
||||
"confirm": "Conferma",
|
||||
"back": "Indietro",
|
||||
"next": "Avanti",
|
||||
"yes": "Sì",
|
||||
"no": "No",
|
||||
"search": "Cerca",
|
||||
"filter": "Filtra",
|
||||
"noData": "Nessun dato disponibile",
|
||||
"optional": "Opzionale",
|
||||
"required": "Obbligatorio",
|
||||
"all": "Tutto",
|
||||
"active": "Attivo",
|
||||
"inactive": "Inattivo",
|
||||
"enabled": "Abilitato",
|
||||
"disabled": "Disabilitato",
|
||||
"networkError": "Errore di rete",
|
||||
"unknownError": "Errore sconosciuto",
|
||||
"notLoggedIn": "Non connesso",
|
||||
"noAccess": "Accesso negato",
|
||||
"copied": "Copied!",
|
||||
"or": "o",
|
||||
"unknown": "Sconosciuto",
|
||||
"replace": "Sostituisci",
|
||||
"add": "Aggiungi",
|
||||
"import": "Importa",
|
||||
"test": "Verifica",
|
||||
@@ -169,7 +157,6 @@
|
||||
"dashboard": "Cruscotto",
|
||||
"measurements": "Measurements",
|
||||
"medications": "Farmaci",
|
||||
"charts": "Cronologia",
|
||||
"insights": "Analisi",
|
||||
"targets": "Targets",
|
||||
"achievements": "Achievements",
|
||||
@@ -198,8 +185,6 @@
|
||||
"auth": {
|
||||
"login": "Accedi",
|
||||
"register": "Registrati",
|
||||
"loginTitle": "Accedi",
|
||||
"registerTitle": "Registrati",
|
||||
"username": "Nome utente",
|
||||
"password": "Password",
|
||||
"email": "Email address",
|
||||
@@ -210,26 +195,17 @@
|
||||
"loginWithPassword": "Sign in with password",
|
||||
"noAccount": "Don't have an account?",
|
||||
"hasAccount": "Already have an account?",
|
||||
"registerDisabled": "Registration is disabled.",
|
||||
"loginFailed": "Login failed",
|
||||
"passkeyFailed": "Passkey authentication cancelled or failed",
|
||||
"registerFailed": "Registration failed",
|
||||
"createAccount": "Create account",
|
||||
"newAccount": "Create new account",
|
||||
"backToPasskey": "Back to Passkey",
|
||||
"passkeySetupLater": "You can set up passkeys at any time in Settings.",
|
||||
"passwordMinLength": "Min. 12 characters",
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long.",
|
||||
"passwordStrength": "Password strength",
|
||||
"strengthWeak": "Very weak",
|
||||
"strengthFair": "Weak",
|
||||
"strengthGood": "Fair",
|
||||
"strengthStrong": "Strong",
|
||||
"strengthVeryStrong": "Very strong"
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Cruscotto",
|
||||
"subtitle": "Your health overview",
|
||||
"greeting": {
|
||||
"morning": "Good morning",
|
||||
"day": "Hello",
|
||||
@@ -260,25 +236,13 @@
|
||||
"stepsShort": "Passi",
|
||||
"vo2MaxShort": "VO₂ max",
|
||||
"bpInTargetShort": "PA-target",
|
||||
"days30Short": "30d",
|
||||
"medications": "Farmaci",
|
||||
"insightsPreview": "AI Insights preview",
|
||||
"lastMeasurement": "Last measurement",
|
||||
"noMeasurements": "No measurements yet",
|
||||
"trend": "Tendenza",
|
||||
"trendUp": "rising",
|
||||
"trendDown": "falling",
|
||||
"trendStable": "stable",
|
||||
"quickEntry": "Quick entry",
|
||||
"quickAddMeasurement": "Log measurement",
|
||||
"quickAddMood": "Log mood",
|
||||
"addMeasurement": "Add measurement",
|
||||
"compliance7d": "Compliance (7 days)",
|
||||
"complianceGood": "Bene",
|
||||
"complianceLow": "Low",
|
||||
"mood": "Umore",
|
||||
"customizeTitle": "Dashboard layout",
|
||||
"customizeSubtitle": "Choose which cards appear on your dashboard and in what order. Defaults work out of the box.",
|
||||
"layoutReset": "Reset to defaults",
|
||||
"layoutSaveSuccess": "Dashboard layout saved",
|
||||
"layoutSaveError": "Could not save dashboard layout",
|
||||
@@ -297,11 +261,7 @@
|
||||
"lastInjection": "Last injection",
|
||||
"nextInjection": "Next injection",
|
||||
"weightDelta": "since start",
|
||||
"inDays": "in {count} days",
|
||||
"empty": {
|
||||
"title": "No active GLP-1 medication",
|
||||
"description": "Add a GLP-1 receptor agonist (Mounjaro, Ozempic, Wegovy, …) to surface dose, schedule, and weight response here."
|
||||
}
|
||||
"inDays": "in {count} days"
|
||||
}
|
||||
},
|
||||
"measurements": {
|
||||
@@ -311,7 +271,6 @@
|
||||
"editMeasurement": "Edit measurement",
|
||||
"type": "Tipo",
|
||||
"value": "Valore",
|
||||
"unit": "Unit",
|
||||
"date": "Data",
|
||||
"source": "Source",
|
||||
"notes": "Note",
|
||||
@@ -349,8 +308,6 @@
|
||||
"glucoseContextPostprandial": "Post-meal (2h after eating)",
|
||||
"glucoseContextRandom": "Random / casual",
|
||||
"glucoseContextBedtime": "Before bed",
|
||||
"glucoseUnit": "Glucose display unit",
|
||||
"glucoseUnitHint": "Stored canonically in mg/dL; display unit is your preference.",
|
||||
"unitHours": "hours",
|
||||
"unitSteps": "Passi",
|
||||
"sourceManual": "Manual",
|
||||
@@ -371,7 +328,6 @@
|
||||
"loginRequired": "Please sign in to view measurements.",
|
||||
"allTypes": "All types",
|
||||
"measurementCount": "{count} measurements",
|
||||
"noMeasurements": "No measurements found",
|
||||
"emptyTitle": "No measurements yet",
|
||||
"emptyDescription": "Log your weight, blood pressure, pulse, or other vitals to start tracking trends.",
|
||||
"emptyFilteredTitle": "No measurements match this filter",
|
||||
@@ -382,10 +338,7 @@
|
||||
"actions": "Azioni",
|
||||
"deleteConfirmTitle": "Delete measurement?",
|
||||
"deleteConfirmDescription": "This measurement will be permanently deleted.",
|
||||
"pageInfo": "Page {page} di{total}",
|
||||
"showing": "Showing",
|
||||
"of": "di",
|
||||
"entries": "entries"
|
||||
"pageInfo": "Page {page} di{total}"
|
||||
},
|
||||
"mood": {
|
||||
"title": "Umore",
|
||||
@@ -404,14 +357,9 @@
|
||||
"levelOkay": "Okay",
|
||||
"levelSchlecht": "Male",
|
||||
"levelLausig": "Terrible",
|
||||
"sourceManual": "Manual",
|
||||
"sourceMoodlog": "moodLog",
|
||||
"sourceWeb": "Web",
|
||||
"sourceTelegram": "Telegram",
|
||||
"sourceDaylio": "Daylio",
|
||||
"allMoods": "All moods",
|
||||
"entryCount": "{count} entries",
|
||||
"noEntries": "No mood entries found",
|
||||
"emptyTitle": "No mood entries yet",
|
||||
"emptyDescription": "Log how you feel today to spot patterns over time.",
|
||||
"emptyFilteredTitle": "No mood entries match this filter",
|
||||
@@ -436,34 +384,21 @@
|
||||
"editMedication": "Edit medication",
|
||||
"newMedication": "New medication",
|
||||
"firstMedication": "Add first medication",
|
||||
"noMedicationsYet": "No medications added yet",
|
||||
"emptyTitle": "No medications yet",
|
||||
"emptyDescription": "Add medications, dosages, and reminder windows to track compliance.",
|
||||
"loadFailed": "Could not load medications",
|
||||
"retryLoad": "Riprova",
|
||||
"name": "Nome",
|
||||
"dose": "Dose",
|
||||
"doseAmount": "Amount",
|
||||
"doseUnit": "Unit",
|
||||
"category": "Category",
|
||||
"schedule": "Schedule",
|
||||
"scheduleFrom": "Da",
|
||||
"scheduleTo": "A",
|
||||
"scheduleLabel": "Label",
|
||||
"scheduleDays": "Days",
|
||||
"scheduleDaily": "Daily",
|
||||
"active": "Attivo",
|
||||
"inactive": "Paused",
|
||||
"intakeHistory": "Intake history",
|
||||
"showIntakeHistory": "Show intake history",
|
||||
"hideIntakeHistory": "Hide intake history",
|
||||
"markTaken": "Assunta",
|
||||
"markSkipped": "Saltata",
|
||||
"deleteConfirm": "Delete medication?",
|
||||
"deleteDescription": "The medication and all intake records will be permanently deleted.",
|
||||
"noMedications": "No medications found.",
|
||||
"compliance": "Aderenza",
|
||||
"import": "Importa",
|
||||
"importIntakes": "Import intakes",
|
||||
"importDescription": "Paste a JSON array with intake data. Expected format:",
|
||||
"importUploadFile": "Upload JSON file",
|
||||
@@ -477,7 +412,6 @@
|
||||
"importInvalidSkipped": "{count} invalid entries skipped",
|
||||
"importFailed": "Import failed",
|
||||
"importInvalidFormat": "Invalid JSON format",
|
||||
"apiAccess": "API access",
|
||||
"apiEndpointTitle": "API Endpoint: {name}",
|
||||
"apiEndpointDescription": "Use this endpoint to record intakes via API (e.g., iPhone Shortcut or cron job).",
|
||||
"apiEndpointActive": "API endpoint active",
|
||||
@@ -492,8 +426,6 @@
|
||||
"statusLoadFailed": "Could not load status",
|
||||
"changeFailed": "Change failed",
|
||||
"categoryBloodPressure": "Pressione arteriosa",
|
||||
"categoryCholesterol": "Cholesterol",
|
||||
"categoryDiabetes": "Diabetes",
|
||||
"categoryVitamin": "Vitamins",
|
||||
"categoryThyroid": "Thyroid",
|
||||
"categoryHormone": "Hormones",
|
||||
@@ -524,7 +456,6 @@
|
||||
"intakeDeleteConfirm": "Delete intake record?",
|
||||
"intakeDeleteDescription": "This intake record will be permanently deleted.",
|
||||
"intakeCount": "{count} intakes",
|
||||
"viewHistory": "Cronologia",
|
||||
"today": "Oggi",
|
||||
"yesterday": "Ieri",
|
||||
"tomorrow": "Domani",
|
||||
@@ -568,10 +499,8 @@
|
||||
"glp1DosesPerUnit": "Doses per pen / vial",
|
||||
"glp1DosesPerUnitPlaceholder": "e.g. 4 for a Mounjaro KwikPen",
|
||||
"glp1DosesPerUnitHelp": "Optional — set to enable the low-stock dashboard caption. Mounjaro KwikPen = 4, Ozempic 0.25/0.5 mg = 4, Wegovy single-dose pen = 1. Leave blank to disable inventory tracking.",
|
||||
"glp1Headline": "{name} · {dose}",
|
||||
"glp1LastInjection": "Last: {label}",
|
||||
"glp1LastInjectionWithSite": "Last: {label} · {site}",
|
||||
"glp1NextInjection": "Avanti:{label}",
|
||||
"glp1NextInjectionDays": "Avanti:{label} (in {days} days)",
|
||||
"glp1NextInjectionToday": "Next: today",
|
||||
"glp1NextInjectionTomorrow": "Next: tomorrow",
|
||||
@@ -738,7 +667,6 @@
|
||||
"siteThighRight": "Right thigh",
|
||||
"siteUpperArmLeft": "Left upper arm",
|
||||
"siteUpperArmRight": "Right upper arm",
|
||||
"sideEffectTagsLabel": "Common GLP-1 side effects",
|
||||
"sideEffectTagsHelp": "Tap a chip to add it to your mood-entry tags.",
|
||||
"sideEffectTagNausea": "nausea",
|
||||
"sideEffectTagConstipation": "constipation",
|
||||
@@ -774,12 +702,10 @@
|
||||
"purgeError": "Error deleting records",
|
||||
"invalidTimestamp": "Please select a valid time.",
|
||||
"noIntakesYet": "No intakes recorded yet",
|
||||
"noIntakesForMedication": "No intakes yet for",
|
||||
"deleteIntakeAriaLabel": "Delete intake",
|
||||
"actions": "Azioni",
|
||||
"pageInfo": "Page {page} di{total}",
|
||||
"loginRequiredIntakes": "Please sign in to view intakes.",
|
||||
"clear": "Clear",
|
||||
"phaseConfig": "Reminder phases",
|
||||
"phaseConfigDescription": "Configure timing for reminders.",
|
||||
"phaseGreen": "Green",
|
||||
@@ -872,24 +798,13 @@
|
||||
}
|
||||
},
|
||||
"charts": {
|
||||
"title": "Cronologia",
|
||||
"subtitle": "Visualization of your health data",
|
||||
"timeRange": "Time range",
|
||||
"days7": "7 days",
|
||||
"days30": "30 days",
|
||||
"days90": "90 days",
|
||||
"days365": "1 year",
|
||||
"daysAll": "Tutto",
|
||||
"weight": "Peso",
|
||||
"bloodPressure": "Pressione arteriosa",
|
||||
"pulse": "Polso",
|
||||
"bodyFat": "Massa grassa",
|
||||
"sleep": "Sonno",
|
||||
"steps": "Passi",
|
||||
"compliance": "Aderenza",
|
||||
"noData": "No data in selected time range",
|
||||
"movingAverage": "Moving average",
|
||||
"target": "Target range",
|
||||
"bucketWeekly": "Weekly avg",
|
||||
"bucketMonthly": "Monthly avg",
|
||||
"points7Label": "7 pts",
|
||||
@@ -911,7 +826,6 @@
|
||||
"avgAllTimeShort": "All-time",
|
||||
"trend7dShort": "7-day trend",
|
||||
"trend": "Tendenza",
|
||||
"targetRanges": "Target ranges",
|
||||
"perWeek": "/week",
|
||||
"totalDelta": "Totale",
|
||||
"selectMedication": "Select medication",
|
||||
@@ -923,7 +837,6 @@
|
||||
"colorRed": "Red:",
|
||||
"mood": "Umore",
|
||||
"moodScore": "Mood Score",
|
||||
"moodMA": "7-day trend",
|
||||
"moodLabel1": "Pessimo",
|
||||
"moodLabel2": "Male",
|
||||
"moodLabel3": "Okay",
|
||||
@@ -961,7 +874,6 @@
|
||||
"personalBaseline": "Your normal",
|
||||
"deltaVsBaseline": "{delta} vs. your normal",
|
||||
"deltaUnchanged": "matches your normal",
|
||||
"targetWeight": "Target",
|
||||
"deltaVsTarget": "{delta} vs. target"
|
||||
},
|
||||
"chart": {
|
||||
@@ -989,25 +901,15 @@
|
||||
},
|
||||
"captionLastMonth": "vs. last month",
|
||||
"captionLastYear": "vs. last year",
|
||||
"delta": {
|
||||
"improved": "{delta} improved",
|
||||
"worsened": "{delta} worsened",
|
||||
"stable": "unchanged"
|
||||
},
|
||||
"deltaVs": {
|
||||
"lastMonth": "{delta} vs. last month",
|
||||
"lastYear": "{delta} vs. last year"
|
||||
},
|
||||
"tooltipPrior": "Prior period",
|
||||
"tooltipDelta": "Δ {delta}",
|
||||
"unavailable": {
|
||||
"lastMonth": "Comparison unavailable — no data from last month yet",
|
||||
"lastYear": "Comparison unavailable — no data from last year yet"
|
||||
},
|
||||
"insightsCallout": {
|
||||
"lastMonth": "Tracking against last month",
|
||||
"lastYear": "Tracking against last year"
|
||||
},
|
||||
"notAvailableForCompliance": "Comparison N/A for compliance"
|
||||
},
|
||||
"insights": {
|
||||
@@ -1447,10 +1349,7 @@
|
||||
"generatePrompt": "Click \"Generate\" for AI-powered insights about your health data."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Personal thresholds",
|
||||
"subtitle": "Override the computed target range for any metric. Defaults stay in effect until you set a value here.",
|
||||
"defaultLabel": "Default",
|
||||
"overrideLabel": "Your override",
|
||||
"autoModeLabel": "Auto",
|
||||
"overrideModeLabel": "Override",
|
||||
"resetAction": "Reset to default",
|
||||
@@ -1478,32 +1377,11 @@
|
||||
"metricBodyWater": "Body water",
|
||||
"metricBoneMass": "Bone mass",
|
||||
"metricOxygenSaturation": "Oxygen saturation (SpO₂)",
|
||||
"unsetExplanation": "No override — using computed default.",
|
||||
"loadError": "Could not load thresholds"
|
||||
"unsetExplanation": "No override — using computed default."
|
||||
},
|
||||
"onboarding": {
|
||||
"setupDescription": "Set up your profile to get started. You can change this later in Settings.",
|
||||
"completeSetup": "Complete setup",
|
||||
"skip": "Salta",
|
||||
"medicationsTitle": "Do you take medications?",
|
||||
"medicationsDescription": "Add your medications to enable reminders and compliance tracking.",
|
||||
"medNamePlaceholder": "Nome",
|
||||
"medDosePlaceholder": "Dose",
|
||||
"notificationsTitle": "Reminders",
|
||||
"notificationsDescription": "HealthLog can remind you about your medications. Configure this later in Settings.",
|
||||
"telegramHint": "Reminders via Telegram bot with snooze buttons",
|
||||
"webPushHint": "Browser notifications directly to your device",
|
||||
"notificationsLater": "You can set this up anytime in Settings.",
|
||||
"targetsTitle": "Target Values",
|
||||
"targetsDescription": "Set optional target values for blood pressure and weight.",
|
||||
"targetSys": "Systolic (mmHg)",
|
||||
"targetDia": "Diastolic (mmHg)",
|
||||
"targetWeight": "Target weight (kg)",
|
||||
"errorProfile": "Could not save your profile. Please try again.",
|
||||
"errorMedication": "Could not add the medication \"{name}\". Please try again or add it later in Medications.",
|
||||
"errorTargets": "Could not save your target values. Please try again.",
|
||||
"errorGeneric": "Something went wrong while finishing setup. Please try again.",
|
||||
"medScheduleHint": "We'll add a default reminder window (08:00–09:00 daily). You can adjust it anytime in Medications.",
|
||||
"v2": {
|
||||
"title": "Welcome to HealthLog",
|
||||
"subtitle": "Three quick steps. You can finish anything later from Settings.",
|
||||
@@ -1582,27 +1460,6 @@
|
||||
"step3of4": "Passo 3 di 4",
|
||||
"step4of4": "Passo 4 di 4"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Benvenuto su HealthLog",
|
||||
"carouselLabel": "Benvenuto — tre slide",
|
||||
"slideOf": "Slide {current} di {total}",
|
||||
"gotoSlide": "Vai alla slide {index}",
|
||||
"prevSlide": "Slide precedente",
|
||||
"nextSlide": "Slide successiva",
|
||||
"slide1": {
|
||||
"title": "I tuoi dati di salute, di tua proprietà",
|
||||
"body": "HealthLog conserva ogni misurazione sulla tua infrastruttura. Niente pubblicità, nessuna condivisione con terzi, nessun vincolo di account."
|
||||
},
|
||||
"slide2": {
|
||||
"title": "Un'unica vista per ogni sorgente",
|
||||
"body": "Apple Health, Withings e gli inserimenti manuali confluiscono in una cronologia coerente, con priorità di sorgente per metrica decisa da te."
|
||||
},
|
||||
"slide3": {
|
||||
"title": "Coach e Insights con sostanza",
|
||||
"body": "Un'analisi basata solo sui tuoi dati, con ogni affermazione tracciabile. Bring-your-own-key: nessun addestramento sui tuoi dati."
|
||||
},
|
||||
"cta": "Iniziamo"
|
||||
},
|
||||
"goals": {
|
||||
"title": "Cosa vuoi monitorare?",
|
||||
"body": "Scegli gli ambiti che ti interessano. Dashboard e promemoria si adatteranno alle tue scelte.",
|
||||
@@ -1669,10 +1526,8 @@
|
||||
"title": "Getting started",
|
||||
"subtitle": "Quick wins to get the most out of HealthLog.",
|
||||
"progress": "{done} di{total} Fatto",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissAll": "Hide checklist",
|
||||
"dismissTooltip": "Hide this item",
|
||||
"restoreHint": "You can restore the checklist from Settings.",
|
||||
"items": {
|
||||
"profileTitle": "Set your profile",
|
||||
"profileDescription": "Height, date of birth and gender unlock personalised targets.",
|
||||
@@ -1697,8 +1552,6 @@
|
||||
"remainingMany": "{count} more readings to go."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Impostazioni",
|
||||
"subtitle": "Profile, Security & Connections",
|
||||
"researchMode": {
|
||||
"sectionTitle": "Modalità Ricerca",
|
||||
"subtitle": "Visualizzazione opzionale di una curva stimata del livello del farmaco GLP-1, derivata dalla farmacocinetica di popolazione pubblicata dall'EMA. Solo lettura: mai una misurazione né un consiglio medico.",
|
||||
@@ -1841,18 +1694,9 @@
|
||||
"coming_soon": "Moving here with the next release update."
|
||||
}
|
||||
},
|
||||
"sectionsTitle": "Impostazioni",
|
||||
"categoryGeneral": "General",
|
||||
"categoryNotifications": "Notifiche",
|
||||
"categoryAi": "AI",
|
||||
"categoryPersonalization": "Personalization",
|
||||
"categoryIntegration": "Integration",
|
||||
"categoryApi": "API",
|
||||
"profile": "Profilo",
|
||||
"security": "Sicurezza",
|
||||
"language": "Lingua",
|
||||
"languageDescription": "Choose the display language of the application.",
|
||||
"languageSystem": "System (automatic)",
|
||||
"username": "Nome utente",
|
||||
"height": "Height (cm)",
|
||||
"dateOfBirth": "Data di nascita",
|
||||
@@ -1930,16 +1774,6 @@
|
||||
"webPushActive": "Attivo",
|
||||
"kiInsights": "AI Insights (OpenAI)",
|
||||
"kiInsightsDescription": "Optional: Save your OpenAI key for daily, automatic AI evaluations in Insights.",
|
||||
"kiInsightsBenefitsTitle": "Benefits with OpenAI key",
|
||||
"kiInsightsBenefit1": "Daily summaries for general status, blood pressure, weight, pulse, BMI, and medication compliance.",
|
||||
"kiInsightsBenefit2": "Better trend and correlation interpretation based on your latest 30 daily measurement points per area.",
|
||||
"kiInsightsBenefit3": "Automatic background refresh so the Insights page always shows up-to-date assessments.",
|
||||
"createApiKeyHint": "Create your API key at:",
|
||||
"createApiKeyLinkLabel": "platform.openai.com/api-keys",
|
||||
"apiKey": "API Key",
|
||||
"apiKeyStored": "Key stored — enter new one to replace",
|
||||
"apiKeySaved": "API key saved",
|
||||
"apiKeyRemoved": "API key removed",
|
||||
"codexConnected": "ChatGPT connected successfully! AI insights are now active.",
|
||||
"codexDisconnected": "ChatGPT connection removed.",
|
||||
"codexConnectionFailed": "ChatGPT connection failed. Please try again.",
|
||||
@@ -1952,18 +1786,10 @@
|
||||
"regenerateRateLimit": "Please wait — you've hit the hourly limit for analyses.",
|
||||
"lastGeneratedAt": "Last generated",
|
||||
"ai": {
|
||||
"title": "AI Insights",
|
||||
"description": "Provider, model, key.",
|
||||
"chatgptConnectedBadge": "ChatGPT connected",
|
||||
"adminAiActiveBadge": "Admin AI active",
|
||||
"connectionExpiredBadge": "Connection expired",
|
||||
"chatgptConnectedHeading": "ChatGPT connected",
|
||||
"chatgptConnectedBody": "Insights are generated through your ChatGPT subscription — no extra cost.",
|
||||
"connectedSince": "Connected since {when}.",
|
||||
"disconnect": "Disconnect",
|
||||
"connectChatgptHeading": "Connect with ChatGPT",
|
||||
"connectChatgptBody": "Link your ChatGPT Pro/Max account to get AI-powered health analyses based on current medical guidelines. No additional API costs.",
|
||||
"connectChatgptCta": "Connect with ChatGPT",
|
||||
"deviceCodeHeading": "Finish connecting on chatgpt.com",
|
||||
"deviceCodeStep1": "Open this link on any device:",
|
||||
"deviceCodeStep2": "Enter this one-time code:",
|
||||
@@ -1972,42 +1798,20 @@
|
||||
"deviceCodeWaiting": "Waiting for approval…",
|
||||
"deviceCodeCancel": "Annulla",
|
||||
"oauthNotConfigured": "ChatGPT OAuth is not configured on this instance — use your own API key below instead.",
|
||||
"adminFallback": "Alternatively, HealthLog will use the AI provider configured by the administrator.",
|
||||
"personalProviderHeading": "AI provider (personal)",
|
||||
"personalProviderBody": "Your own AI provider overrides the admin setting. Leave blank for the default. For ChatGPT Pro/Max OAuth use the connect button above.",
|
||||
"providerLabel": "Provider",
|
||||
"providerOptionDefault": "— Default (Admin/Codex) —",
|
||||
"providerOptionOpenai": "OpenAI (API key)",
|
||||
"providerOptionAnthropic": "Anthropic (Claude)",
|
||||
"providerOptionLocal": "Local (OpenAI-compatible)",
|
||||
"modelLabel": "Model",
|
||||
"modelOptionDefault": "— Default —",
|
||||
"modelOptionCustom": "Custom…",
|
||||
"customModelLabel": "Custom model name",
|
||||
"openaiKeyLabel": "OpenAI API key",
|
||||
"openaiKeyHelp": "Your own key — not connected to your ChatGPT subscription. For the subscription use the connect button above.",
|
||||
"anthropicKeyLabel": "Anthropic API key",
|
||||
"baseUrlLabel": "Base URL",
|
||||
"localKeyLabel": "API key (optional)",
|
||||
"savedPreview": "(saved {preview})",
|
||||
"savedShort": "(saved)",
|
||||
"saveCta": "Salva",
|
||||
"testCta": "Test connection",
|
||||
"removeKeyCta": "Remove saved key",
|
||||
"keyRemoved": "Saved key removed",
|
||||
"removeKeyConfirmTitle": "Remove saved API key?",
|
||||
"removeKeyConfirmBody": "Insights for this provider will fall back to the admin/Codex provider until you save a new key.",
|
||||
"saved": "Salvato",
|
||||
"saveFailed": "Save failed",
|
||||
"testFailed": "Test failed",
|
||||
"errorGeneric": "Errore",
|
||||
"providerChain": {
|
||||
"heading": "AI provider fallback chain",
|
||||
"activeLine": "Active provider: {provider}",
|
||||
"cachedSuffix": "(cached: {provider})",
|
||||
"chainLine": "Configured chain: {chain}",
|
||||
"managementHint": "Reordering and on/off toggles arrive in the next release.",
|
||||
"none": "none configured",
|
||||
"types": {
|
||||
"codex": "ChatGPT (Codex)",
|
||||
"openai": "OpenAI (your key)",
|
||||
@@ -2081,10 +1885,7 @@
|
||||
"withingsCredentialsSavedPlaceholder": "Saved — enter new to replace",
|
||||
"withingsCredentialsSavedPlaceholderSecret": "Saved — enter new to replace",
|
||||
"withingsSaveCredentials": "Save credentials",
|
||||
"withingsConnected": "Connected",
|
||||
"configured": "Configured",
|
||||
"withingsTokenExpired": "Token expired",
|
||||
"withingsLastSync": "Last sync",
|
||||
"withingsSync": "Sync now",
|
||||
"withingsFullSync": "Sync all data",
|
||||
"withingsFullSyncTitle": "Full synchronization?",
|
||||
@@ -2109,15 +1910,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"integrationStatus": {
|
||||
"stateConnected": "Connected",
|
||||
"stateError": "Errore",
|
||||
"stateReauthRequired": "Reconnect required",
|
||||
"stateDisconnected": "Disconnected",
|
||||
"consecutiveFailures": "{count}/{threshold} consecutive failures",
|
||||
"lastSuccess": "Last successful sync",
|
||||
"lastAttempt": "Last attempt"
|
||||
},
|
||||
"integrationPill": {
|
||||
"connected": "Connected",
|
||||
"errorReconnect": "Error — reconnect",
|
||||
@@ -2130,7 +1922,6 @@
|
||||
},
|
||||
"apiTokens": "API Tokens",
|
||||
"apiTokensDescription": "Create API tokens for external medication intake (e.g., Shortcuts, automations).",
|
||||
"tokenName": "Token name",
|
||||
"tokenNamePlaceholder": "Token name (e.g., iPhone Shortcut)",
|
||||
"tokenCreated": "Token created — copy it now! It won't be shown again.",
|
||||
"tokenRevoke": "Revoke token?",
|
||||
@@ -2148,62 +1939,14 @@
|
||||
"tokenTableActions": "Azioni",
|
||||
"noActiveTokens": "No active tokens available.",
|
||||
"tokenNeverUsed": "Never",
|
||||
"tokenLastUsed": "Last used:",
|
||||
"tokenCreatedAt": "Created:",
|
||||
"apiEndpoint": "API endpoint for medication intake:",
|
||||
"apiEndpointsTitle": "API endpoints",
|
||||
"apiEndpointsDescription": "Overview of currently available external endpoint(s) for token-based ingestion.",
|
||||
"apiEndpointMethod": "Method",
|
||||
"apiEndpointPath": "Path",
|
||||
"apiEndpointAuth": "Authentication",
|
||||
"apiEndpointExample": "Body example",
|
||||
"export": "Data Export",
|
||||
"exportDescription": "Export all your health data.",
|
||||
"exportJson": "JSON Export",
|
||||
"exportCsv": "CSV Export",
|
||||
"doctorReport": "Doctor Report (PDF)",
|
||||
"auditLog": "Activity Log",
|
||||
"auditLogHidden": "Log hidden.",
|
||||
"auditLogShowing": "Showing last {count} di{total} entries",
|
||||
"auditNoActivities": "No activities found.",
|
||||
"auditAction": "Action",
|
||||
"auditCategory": "Category",
|
||||
"auditIp": "IP",
|
||||
"auditLocation": "Location",
|
||||
"auditTimestamp": "Ora",
|
||||
"auditOther": "Other",
|
||||
"auditCategoryAuth": "Auth",
|
||||
"auditCategoryData": "Dati",
|
||||
"auditCategoryIntegration": "Integration",
|
||||
"auditCategoryAI": "AI",
|
||||
"auditCategoryAdmin": "Admin",
|
||||
"auditActionAuthRegister": "Registration",
|
||||
"auditActionAuthLogin": "Accedi",
|
||||
"auditActionAuthLoginPasskey": "Passkey login",
|
||||
"auditActionAuthLoginPassword": "Password login",
|
||||
"auditActionAuthLoginFailed": "Failed login",
|
||||
"auditActionAuthLogout": "Disconnetti",
|
||||
"auditActionAuthPasskeyRegister": "Passkey added",
|
||||
"auditActionAuthPasskeyDelete": "Passkey deleted",
|
||||
"auditActionAuthPasswordChange": "Password changed",
|
||||
"auditActionMeasurementCreate": "Measurement created",
|
||||
"auditActionMeasurementUpdate": "Measurement updated",
|
||||
"auditActionMeasurementDelete": "Measurement deleted",
|
||||
"auditActionMedicationCreate": "Medication created",
|
||||
"auditActionMedicationUpdate": "Medication updated",
|
||||
"auditActionMedicationDelete": "Medication deleted",
|
||||
"auditActionMedicationIntake": "Intake recorded",
|
||||
"auditActionMedicationIngestExternal": "External intake",
|
||||
"auditActionWithingsConnect": "Withings connected",
|
||||
"auditActionWithingsDisconnect": "Withings disconnected",
|
||||
"auditActionExportDownload": "Export downloaded",
|
||||
"auditActionInsightsGenerate": "AI insight generated",
|
||||
"auditActionAdminUserUpdate": "Admin: User updated",
|
||||
"auditActionAdminUserResetPassword": "Admin: Password reset",
|
||||
"auditActionAdminSettingsUpdate": "Admin: Settings changed",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"dangerZoneTitle": "Danger Zone",
|
||||
"dangerZone": "Delete All Data",
|
||||
"dangerZoneDescription": "Deletes all your health data and integrations. Your user account will be preserved.",
|
||||
"dangerZoneConfirm": "Delete all data?",
|
||||
@@ -2213,9 +1956,6 @@
|
||||
"finalDelete": "Delete permanently",
|
||||
"saved": "Salvato",
|
||||
"savingError": "Error saving",
|
||||
"adminAreaTitle": "Admin area",
|
||||
"adminAreaDescription": "System-wide settings and user management are available in the admin console.",
|
||||
"openAdminConsole": "Open admin console",
|
||||
"moodLogTitle": "moodLog",
|
||||
"moodLogDescription": "Import mood data from moodLog",
|
||||
"moodLogUrl": "moodLog URL",
|
||||
@@ -2231,7 +1971,6 @@
|
||||
"moodLogDisconnect": "Disconnect",
|
||||
"moodLogDisconnectTitle": "Disconnect moodLog?",
|
||||
"moodLogDisconnectDescription": "The connection will be removed and all imported mood data will be deleted.",
|
||||
"moodLogLastSync": "Last sync",
|
||||
"moodLogEntries": "Entries",
|
||||
"moodLogSyncResult": "{count} entries synchronized",
|
||||
"moodLogSyncFailed": "Sync failed",
|
||||
@@ -2298,14 +2037,10 @@
|
||||
"title": "Administration",
|
||||
"subtitle": "System status, users, and settings",
|
||||
"settingsSaveError": "Failed to save settings",
|
||||
"settingsSaveValidationError": "Please check the highlighted fields",
|
||||
"sectionsTitle": "Admin",
|
||||
"systemStatus": "System Status",
|
||||
"version": "Version",
|
||||
"database": "Database",
|
||||
"databaseConnected": "Connected",
|
||||
"databaseError": "Errore",
|
||||
"gitCommit": "Git Commit",
|
||||
"startedAt": "Started",
|
||||
"users": "Users",
|
||||
"measurementsCount": "Measurements",
|
||||
@@ -2320,8 +2055,6 @@
|
||||
"load1": "Load (1m)",
|
||||
"memUsedPercent": "Memory",
|
||||
"diskBusyPercent": "Disk I/O",
|
||||
"diskReadBps": "Disk read",
|
||||
"diskWriteBps": "Disk write",
|
||||
"last2hours": "Last 2 hours",
|
||||
"empty": "Sampling started — data appears in 1–2 minutes.",
|
||||
"loadError": "Failed to load host metrics. Try refreshing the page."
|
||||
@@ -2376,18 +2109,11 @@
|
||||
"integrationWebPush": "Web Push",
|
||||
"integrationBugReport": "Bug Report",
|
||||
"apiGlobal": "Allow API endpoints and API tokens.",
|
||||
"moodLogGlobal": "Allow the moodLog integration.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionIntegrations": "Integrazioni",
|
||||
"sectionMedication": "Farmaci",
|
||||
"sectionManagement": "Management",
|
||||
"umamiTitle": "Umami",
|
||||
"umamiDescription": "Web analytics with Umami",
|
||||
"glitchtipTitle": "GlitchTip",
|
||||
"glitchtipDescription": "Error tracking with GlitchTip",
|
||||
"webPushVapidTitle": "Web Push VAPID",
|
||||
"monitoring": "Monitoring (Umami/GlitchTip)",
|
||||
"monitoringDescription": "Configuration for website analytics and error tracking.",
|
||||
"umamiEnabled": "Enable Umami tracking.",
|
||||
"umamiScriptUrl": "Umami script URL",
|
||||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||||
@@ -2398,7 +2124,6 @@
|
||||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||||
"glitchtipEnvironment": "GlitchTip environment",
|
||||
"glitchtipEnvironmentPlaceholder": "production",
|
||||
"webPushVapid": "Web Push (VAPID)",
|
||||
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
|
||||
"webPushVapidPublicKey": "VAPID public key",
|
||||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||||
@@ -2407,12 +2132,8 @@
|
||||
"webPushVapidSubject": "VAPID subject",
|
||||
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
|
||||
"configured": "Configured",
|
||||
"notConfigured": "Not configured",
|
||||
"monitoringTestUmami": "Send Umami test",
|
||||
"monitoringTestGlitchTip": "Send GlitchTip test",
|
||||
"monitoringTestSuccess": "Test event sent",
|
||||
"monitoringTestFailed": "Monitoring test failed",
|
||||
"monitoringSave": "Save monitoring",
|
||||
"bugReportGithub": "Bug report (GitHub Issues)",
|
||||
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
|
||||
"bugReportEnabledLabel": "Bug reports enabled",
|
||||
@@ -2421,9 +2142,6 @@
|
||||
"bugReportRepoPlaceholder": "owner/repo",
|
||||
"bugReportToken": "Issue token",
|
||||
"bugReportTokenPlaceholder": "ghp_...",
|
||||
"bugReportConfigured": "Bug report is configured.",
|
||||
"bugReportNotConfigured": "Bug report is not fully configured yet.",
|
||||
"bugReportSave": "Save bug report settings",
|
||||
"userManagement": "User Management",
|
||||
"userName": "Nome",
|
||||
"userEmail": "E-mail",
|
||||
@@ -2438,7 +2156,6 @@
|
||||
"toUser": "Make user",
|
||||
"toAdmin": "Make admin",
|
||||
"ownRoleUnchangeable": "Cannot change own role",
|
||||
"lastAdminError": "Cannot demote the last admin",
|
||||
"resetPassword": "Reset password",
|
||||
"resetPasswordTitle": "Reset password: {name}",
|
||||
"newPassword": "New password",
|
||||
@@ -2456,14 +2173,11 @@
|
||||
"tokenLastUsed": "Last used",
|
||||
"tokenCreated": "Created",
|
||||
"tokenNeverUsed": "Never",
|
||||
"noTokens": "No API tokens found.",
|
||||
"tokensEmptyTitle": "No API tokens yet",
|
||||
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
|
||||
"loginOverview": "Login Overview",
|
||||
"allAuthEvents": "All auth events",
|
||||
"failedOnly": "Failed only",
|
||||
"noEntries": "No entries found.",
|
||||
"loginEmptyTitle": "No authentication events yet",
|
||||
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
|
||||
"loginEmptyFailedTitle": "No failed sign-in attempts",
|
||||
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
|
||||
@@ -2484,7 +2198,6 @@
|
||||
"outcomeSuccess": "Successo",
|
||||
"outcomeFailed": "Failed",
|
||||
"auditDetails": "Details",
|
||||
"dangerZone": "Danger Zone",
|
||||
"deleteAllData": "Delete all data globally",
|
||||
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
|
||||
"deleteAllConfirm": "Really delete all data?",
|
||||
@@ -2509,8 +2222,6 @@
|
||||
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
|
||||
"reminderMissedMinutes": "Missed threshold (minutes)",
|
||||
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
|
||||
"reminderThresholdsSave": "Save thresholds",
|
||||
"notificationTest": "Test Notifications",
|
||||
"notificationTestSend": "Send test",
|
||||
"notificationTestSuccess": "Test notification sent",
|
||||
"notificationTestFailed": "Failed to send test notification",
|
||||
@@ -2523,8 +2234,6 @@
|
||||
"reminderCheckEventsToday": "Events today",
|
||||
"reminderCheckNotifSent": "Sent",
|
||||
"feedback": {
|
||||
"title": "Feedback Inbox",
|
||||
"description": "User-submitted feedback, bug reports, and feature requests.",
|
||||
"tabOpen": "Open",
|
||||
"tabAcknowledged": "Acknowledged",
|
||||
"tabResolved": "Resolved",
|
||||
@@ -2535,7 +2244,6 @@
|
||||
"createdAt": "Submitted",
|
||||
"actions": "Azioni",
|
||||
"details": "Details",
|
||||
"noEntries": "No feedback in this category.",
|
||||
"emptyTitle": "All caught up",
|
||||
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
|
||||
"loading": "Loading feedback...",
|
||||
@@ -2544,11 +2252,6 @@
|
||||
"categoryFeature": "Feature",
|
||||
"categoryQuestion": "Question",
|
||||
"categoryOther": "Other",
|
||||
"statusOpen": "Open",
|
||||
"statusAcknowledged": "Acknowledged",
|
||||
"statusResolved": "Resolved",
|
||||
"statusArchived": "Archived",
|
||||
"dialogTitle": "Feedback details",
|
||||
"metadataHeading": "Metadata",
|
||||
"metaUrl": "URL",
|
||||
"metaLocale": "Locale",
|
||||
@@ -2569,8 +2272,7 @@
|
||||
"publishFailed": "GitHub publish failed",
|
||||
"updateFailed": "Update failed",
|
||||
"archiveConfirm": "Archive this feedback entry?",
|
||||
"submittedBy": "Submitted by",
|
||||
"sectionTitle": "Feedback"
|
||||
"submittedBy": "Submitted by"
|
||||
},
|
||||
"shell": {
|
||||
"overview": "Panoramica",
|
||||
@@ -2654,12 +2356,10 @@
|
||||
"subtitle": "Audit trail of authentication and admin events."
|
||||
},
|
||||
"auditLog": {
|
||||
"title": "Audit log",
|
||||
"filterActor": "Actor (user id or username)",
|
||||
"filterAction": "Action",
|
||||
"filterActionAll": "All actions",
|
||||
"filterTarget": "Target (id or path)",
|
||||
"filterSeverity": "Severity",
|
||||
"filterDate": "Date range",
|
||||
"range24h": "Last 24 hours",
|
||||
"range7d": "Ultimi 7 giorni",
|
||||
@@ -2706,7 +2406,6 @@
|
||||
"runFailed": "Failed to enqueue backup",
|
||||
"loading": "Loading backups...",
|
||||
"loadError": "Failed to load backups.",
|
||||
"empty": "No backups recorded yet.",
|
||||
"emptyTitle": "No backups yet",
|
||||
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
|
||||
"colUser": "User",
|
||||
@@ -2753,10 +2452,7 @@
|
||||
"nextGoal": "Next goal",
|
||||
"allCompleted": "All achievements unlocked!",
|
||||
"completed": "Completed",
|
||||
"inProgress": "In progress",
|
||||
"progress": "Progress",
|
||||
"goalReached": "Goal reached",
|
||||
"remaining": "{count} remaining",
|
||||
"remainingUnlocks": "{count} still unlockable",
|
||||
"noneUnlockedYet": "No achievements unlocked yet.",
|
||||
"pointsValue": "{points} points",
|
||||
@@ -3020,8 +2716,7 @@
|
||||
"ariaLabel": "Hidden locked achievement"
|
||||
},
|
||||
"hiddenUnlockToast": {
|
||||
"title": "You unlocked a hidden achievement!",
|
||||
"description": "Tap to see the surprise."
|
||||
"title": "You unlocked a hidden achievement!"
|
||||
},
|
||||
"dashboardCard": {
|
||||
"title": "Recent unlocks",
|
||||
@@ -3035,20 +2730,9 @@
|
||||
"loginRequired": "Please sign in to report a bug.",
|
||||
"bugTitle": "Title",
|
||||
"description": "Descrizione",
|
||||
"descriptionPlaceholder": "Describe the bug in detail. What did you do? What happened? What did you expect?",
|
||||
"screenshot": "Screenshot (optional)",
|
||||
"screenshotPreview": "Screenshot preview",
|
||||
"attachScreenshot": "Attach screenshot",
|
||||
"imageOnly": "Only image files allowed",
|
||||
"tooLarge": "Screenshot is too large (max 5 MB)",
|
||||
"submit": "Send",
|
||||
"success": "Thank you! Your bug report has been submitted successfully.",
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"errorCreating": "Error creating report",
|
||||
"notConfiguredTitle": "Bug reports not available yet",
|
||||
"notConfiguredUser": "Bug reporting is disabled on this server. Please contact your administrator.",
|
||||
"notConfiguredAdmin": "Bug reporting requires a GitHub integration (issue token + repository). Configure it in the admin panel under Settings → Bug reports.",
|
||||
"openAdminSettings": "Open admin settings",
|
||||
"category": "Tipo",
|
||||
"categoryBug": "Bug report",
|
||||
"categoryFeature": "Feature request",
|
||||
@@ -3058,8 +2742,7 @@
|
||||
"githubEscalationNote": "Your feedback is stored locally. If the admin enables GitHub integration, it can be promoted to a public issue on request.",
|
||||
"internalOnlyNote": "Your feedback is stored locally and only visible to the administrator of this server.",
|
||||
"disabledTitle": "Bug reports are turned off",
|
||||
"disabledBody": "The administrator has disabled bug reports on this server.",
|
||||
"disabledError": "Bug reports are disabled by the administrator."
|
||||
"disabledBody": "The administrator has disabled bug reports on this server."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifiche",
|
||||
@@ -3069,24 +2752,9 @@
|
||||
"noChannels": "Configure a notification channel in Settings first.",
|
||||
"goToSettings": "Go to Settings",
|
||||
"channelDisabled": "Disabilitato",
|
||||
"eventMedicationReminder": "Medication Reminder",
|
||||
"eventMedicationReminderDesc": "Reminder when an intake is due.",
|
||||
"eventMeasurementAnomaly": "Anomalous Measurement",
|
||||
"eventMeasurementAnomalyDesc": "Warning for unusual measurements (e.g., high blood pressure).",
|
||||
"eventComplianceLow": "Low Compliance",
|
||||
"eventComplianceLowDesc": "Notification when medication compliance drops below a threshold.",
|
||||
"eventWithingsSyncFailed": "Withings Sync Failed",
|
||||
"eventWithingsSyncFailedDesc": "Alert when the automatic Withings data sync fails.",
|
||||
"eventSystemAlert": "Avviso di sistema",
|
||||
"eventSystemAlertDesc": "Messaggi di sistema importanti e avvisi amministrativi.",
|
||||
"eventPersonalRecord": "Record personale",
|
||||
"eventPersonalRecordDesc": "Notifica quando viene raggiunto un nuovo record per una metrica o un allenamento. Disattivato per impostazione predefinita."
|
||||
},
|
||||
"format": {
|
||||
"dateShort": "{month}/{day}/{year}",
|
||||
"timeShort": "{hours}:{minutes}",
|
||||
"dateTime": "{month}/{day}/{year}, {hours}:{minutes}"
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
"notice": "Questa lingua è redatta tramite IA, incluse le istruzioni critiche per la sicurezza del Coach. La validazione automatica gira in CI; segnali qualsiasi regressione del Coach IA su GitHub.",
|
||||
@@ -3094,108 +2762,10 @@
|
||||
"dismiss": "Chiudi"
|
||||
}
|
||||
},
|
||||
"classifications": {
|
||||
"bmi": {
|
||||
"Underweight": "Underweight",
|
||||
"Normal": "Normal",
|
||||
"Overweight": "Overweight",
|
||||
"ObesityGradeI": "Obesity Grade I",
|
||||
"ObesityGradeII": "Obesity Grade II",
|
||||
"ObesityGradeIII": "Obesity Grade III"
|
||||
},
|
||||
"bp": {
|
||||
"Optimal": "Optimal",
|
||||
"Normal": "Normal",
|
||||
"HighNormal": "High-normal",
|
||||
"HypertensionGrade1": "Hypertension Grade 1",
|
||||
"HypertensionGrade2": "Hypertension Grade 2",
|
||||
"HypertensionGrade3": "Hypertension Grade 3"
|
||||
},
|
||||
"pulse": {
|
||||
"Bradycardia": "Bradycardia",
|
||||
"Normal": "Normal",
|
||||
"Elevated": "Elevated",
|
||||
"Tachycardia": "Tachycardia"
|
||||
},
|
||||
"pulseTarget": {
|
||||
"SignificantlyLow": "Significantly low",
|
||||
"SlightlyLow": "Slightly low",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyElevated": "Slightly elevated",
|
||||
"SignificantlyElevated": "Significantly elevated"
|
||||
},
|
||||
"sleep": {
|
||||
"FarTooShort": "Far too short",
|
||||
"TooShort": "Too short",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyLong": "Slightly long",
|
||||
"FarTooLong": "Far too long"
|
||||
},
|
||||
"bodyFat": {
|
||||
"Essential": "Essential",
|
||||
"Athletic": "Athletic",
|
||||
"Fitness": "Fitness",
|
||||
"Average": "Media",
|
||||
"Obese": "Obese"
|
||||
},
|
||||
"steps": {
|
||||
"VeryLow": "Very low",
|
||||
"LowActive": "Low active",
|
||||
"ModeratelyActive": "Moderately active",
|
||||
"Active": "Attivo",
|
||||
"VeryActive": "Very active"
|
||||
},
|
||||
"general": {
|
||||
"Good": "Bene",
|
||||
"Moderate": "Moderate",
|
||||
"Low": "Low",
|
||||
"VeryGood": "Very good",
|
||||
"VeryStable": "Very stable",
|
||||
"Stable": "Stable",
|
||||
"Fluctuating": "Fluctuating"
|
||||
},
|
||||
"alerts": {
|
||||
"bmiBelowNormalTitle": "BMI below normal range",
|
||||
"bmiBelowNormalMessage": "Your BMI of {bmi} is below the normal range (18.5–24.9).",
|
||||
"bmiOverweightTitle": "BMI in overweight range",
|
||||
"bmiOverweightMessage": "Your BMI of {bmi} is in the overweight range. Regular exercise and a balanced diet can help.",
|
||||
"bmiObesityTitle": "BMI in obesity range",
|
||||
"bmiObesityMessage": "Your BMI of {bmi} is in the obesity range.",
|
||||
"bmiNormalTitle": "BMI in normal range",
|
||||
"bmiNormalMessage": "Your BMI of {bmi} is in the healthy range.",
|
||||
"bpDangerTitle": "Blood pressure significantly elevated",
|
||||
"bpDangerMessage": "Your average blood pressure ({sys}/{dia}) is classified as \"{category}\".",
|
||||
"bpWarningTitle": "Blood pressure slightly elevated",
|
||||
"bpWarningMessage": "Your average blood pressure ({sys}/{dia}) is in the \"{category}\" range.",
|
||||
"bpTargetGoodTitle": "Good blood pressure target adherence",
|
||||
"bpTargetGoodMessage": "{pct}% of your readings are within the target range.",
|
||||
"bpTargetBadTitle": "Blood pressure often outside target range",
|
||||
"bpTargetBadMessage": "Only {pct}% of your readings are within the target range.",
|
||||
"weightIncreasingTitle": "Weight increasing",
|
||||
"weightIncreasingMessage": "Your weight is increasing by approx. {change} kg per week over the last 30 days.",
|
||||
"weightDecreasingTitle": "Weight decreasing",
|
||||
"weightDecreasingMessage": "Your weight is decreasing by approx. {change} kg per week over the last 30 days.",
|
||||
"pulseOutliersTitle": "Pulse outliers detected",
|
||||
"pulseOutliersMessage": "{count} unusual pulse readings in the last 30 days.",
|
||||
"complianceLowTitle": "Low compliance: {name}",
|
||||
"complianceLowMessage": "Your 7-day compliance for {name} is only {pct}%. Regular intake is important.",
|
||||
"complianceGoodTitle": "Excellent compliance: {name}",
|
||||
"complianceGoodMessage": "{pct}% compliance over the last 7 days. Keep it up!"
|
||||
}
|
||||
},
|
||||
"targets": {
|
||||
"title": "Targets",
|
||||
"introText": "Your current values compared to recommended target ranges. Guideline sources are linked on each card.",
|
||||
"weight": "Peso",
|
||||
"bloodPressure": "Pressione arteriosa",
|
||||
"bloodPressureOnTarget": "Blood pressure on target",
|
||||
"restingPulse": "Resting pulse",
|
||||
"sleepDuration": "Sleep duration",
|
||||
"bmi": "IMC",
|
||||
"bodyFat": "Massa grassa",
|
||||
"stepsPerDay": "Steps/day",
|
||||
"medicationCompliance": "Medication compliance",
|
||||
"steps": "Passi",
|
||||
"average30d": "30-day average:",
|
||||
"consistency": {
|
||||
"ariaLabel": "Last 7 days, in-range status per day",
|
||||
|
||||
+7
-437
@@ -9,31 +9,19 @@
|
||||
"close": "Zamknij",
|
||||
"loading": "Ładowanie…...",
|
||||
"error": "Błąd",
|
||||
"success": "Sukces",
|
||||
"saved": "Zapisano",
|
||||
"confirm": "Potwierdź",
|
||||
"back": "Wstecz",
|
||||
"next": "Dalej",
|
||||
"yes": "Tak",
|
||||
"no": "Nie",
|
||||
"search": "Szukaj",
|
||||
"filter": "Filtruj",
|
||||
"noData": "Brak danych",
|
||||
"optional": "Opcjonalne",
|
||||
"required": "Wymagane",
|
||||
"all": "Wszystko",
|
||||
"active": "Aktywne",
|
||||
"inactive": "Nieaktywne",
|
||||
"enabled": "Włączone",
|
||||
"disabled": "Wyłączone",
|
||||
"networkError": "Błąd sieci",
|
||||
"unknownError": "Nieznany błąd",
|
||||
"notLoggedIn": "Niezalogowany",
|
||||
"noAccess": "Brak dostępu",
|
||||
"copied": "Copied!",
|
||||
"or": "lub",
|
||||
"unknown": "Nieznane",
|
||||
"replace": "Zastąp",
|
||||
"add": "Dodaj",
|
||||
"import": "Importuj",
|
||||
"test": "Testuj",
|
||||
@@ -169,7 +157,6 @@
|
||||
"dashboard": "Pulpit",
|
||||
"measurements": "Measurements",
|
||||
"medications": "Leki",
|
||||
"charts": "Historia",
|
||||
"insights": "Statystyki",
|
||||
"targets": "Targets",
|
||||
"achievements": "Achievements",
|
||||
@@ -198,8 +185,6 @@
|
||||
"auth": {
|
||||
"login": "Zaloguj się",
|
||||
"register": "Zarejestruj się",
|
||||
"loginTitle": "Zaloguj się",
|
||||
"registerTitle": "Zarejestruj się",
|
||||
"username": "Nazwa użytkownika",
|
||||
"password": "Hasło",
|
||||
"email": "Email address",
|
||||
@@ -210,26 +195,17 @@
|
||||
"loginWithPassword": "Sign in with password",
|
||||
"noAccount": "Don't have an account?",
|
||||
"hasAccount": "Already have an account?",
|
||||
"registerDisabled": "Registration is disabled.",
|
||||
"loginFailed": "Login failed",
|
||||
"passkeyFailed": "Passkey authentication cancelled or failed",
|
||||
"registerFailed": "Registration failed",
|
||||
"createAccount": "Create account",
|
||||
"newAccount": "Create new account",
|
||||
"backToPasskey": "Back to Passkey",
|
||||
"passkeySetupLater": "You can set up passkeys at any time in Settings.",
|
||||
"passwordMinLength": "Min. 12 characters",
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long.",
|
||||
"passwordStrength": "Password strength",
|
||||
"strengthWeak": "Very weak",
|
||||
"strengthFair": "Weak",
|
||||
"strengthGood": "Fair",
|
||||
"strengthStrong": "Strong",
|
||||
"strengthVeryStrong": "Very strong"
|
||||
"passwordTooShort": "Password must be at least {minLength} characters long."
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Pulpit",
|
||||
"subtitle": "Your health overview",
|
||||
"greeting": {
|
||||
"morning": "Good morning",
|
||||
"day": "Hello",
|
||||
@@ -260,25 +236,13 @@
|
||||
"stepsShort": "Kroki",
|
||||
"vo2MaxShort": "VO₂ max",
|
||||
"bpInTargetShort": "RR-cel",
|
||||
"days30Short": "30d",
|
||||
"medications": "Leki",
|
||||
"insightsPreview": "AI Insights preview",
|
||||
"lastMeasurement": "Last measurement",
|
||||
"noMeasurements": "No measurements yet",
|
||||
"trend": "Trend",
|
||||
"trendUp": "rising",
|
||||
"trendDown": "falling",
|
||||
"trendStable": "stable",
|
||||
"quickEntry": "Quick entry",
|
||||
"quickAddMeasurement": "Log measurement",
|
||||
"quickAddMood": "Log mood",
|
||||
"addMeasurement": "Add measurement",
|
||||
"compliance7d": "Compliance (7 days)",
|
||||
"complianceGood": "Dobrze",
|
||||
"complianceLow": "Low",
|
||||
"mood": "Nastrój",
|
||||
"customizeTitle": "Dashboard layout",
|
||||
"customizeSubtitle": "Choose which cards appear on your dashboard and in what order. Defaults work out of the box.",
|
||||
"layoutReset": "Reset to defaults",
|
||||
"layoutSaveSuccess": "Dashboard layout saved",
|
||||
"layoutSaveError": "Could not save dashboard layout",
|
||||
@@ -297,11 +261,7 @@
|
||||
"lastInjection": "Last injection",
|
||||
"nextInjection": "Next injection",
|
||||
"weightDelta": "since start",
|
||||
"inDays": "in {count} days",
|
||||
"empty": {
|
||||
"title": "No active GLP-1 medication",
|
||||
"description": "Add a GLP-1 receptor agonist (Mounjaro, Ozempic, Wegovy, …) to surface dose, schedule, and weight response here."
|
||||
}
|
||||
"inDays": "in {count} days"
|
||||
}
|
||||
},
|
||||
"measurements": {
|
||||
@@ -311,7 +271,6 @@
|
||||
"editMeasurement": "Edit measurement",
|
||||
"type": "Typ",
|
||||
"value": "Wartość",
|
||||
"unit": "Unit",
|
||||
"date": "Data",
|
||||
"source": "Source",
|
||||
"notes": "Notatki",
|
||||
@@ -349,8 +308,6 @@
|
||||
"glucoseContextPostprandial": "Post-meal (2h after eating)",
|
||||
"glucoseContextRandom": "Random / casual",
|
||||
"glucoseContextBedtime": "Before bed",
|
||||
"glucoseUnit": "Glucose display unit",
|
||||
"glucoseUnitHint": "Stored canonically in mg/dL; display unit is your preference.",
|
||||
"unitHours": "hours",
|
||||
"unitSteps": "Kroki",
|
||||
"sourceManual": "Manual",
|
||||
@@ -371,7 +328,6 @@
|
||||
"loginRequired": "Please sign in to view measurements.",
|
||||
"allTypes": "All types",
|
||||
"measurementCount": "{count} measurements",
|
||||
"noMeasurements": "No measurements found",
|
||||
"emptyTitle": "No measurements yet",
|
||||
"emptyDescription": "Log your weight, blood pressure, pulse, or other vitals to start tracking trends.",
|
||||
"emptyFilteredTitle": "No measurements match this filter",
|
||||
@@ -382,10 +338,7 @@
|
||||
"actions": "Akcje",
|
||||
"deleteConfirmTitle": "Delete measurement?",
|
||||
"deleteConfirmDescription": "This measurement will be permanently deleted.",
|
||||
"pageInfo": "Page {page} z{total}",
|
||||
"showing": "Showing",
|
||||
"of": "z",
|
||||
"entries": "entries"
|
||||
"pageInfo": "Page {page} z{total}"
|
||||
},
|
||||
"mood": {
|
||||
"title": "Nastrój",
|
||||
@@ -404,14 +357,9 @@
|
||||
"levelOkay": "Okay",
|
||||
"levelSchlecht": "Źle",
|
||||
"levelLausig": "Terrible",
|
||||
"sourceManual": "Manual",
|
||||
"sourceMoodlog": "moodLog",
|
||||
"sourceWeb": "Web",
|
||||
"sourceTelegram": "Telegram",
|
||||
"sourceDaylio": "Daylio",
|
||||
"allMoods": "All moods",
|
||||
"entryCount": "{count} entries",
|
||||
"noEntries": "No mood entries found",
|
||||
"emptyTitle": "No mood entries yet",
|
||||
"emptyDescription": "Log how you feel today to spot patterns over time.",
|
||||
"emptyFilteredTitle": "No mood entries match this filter",
|
||||
@@ -436,34 +384,21 @@
|
||||
"editMedication": "Edit medication",
|
||||
"newMedication": "New medication",
|
||||
"firstMedication": "Add first medication",
|
||||
"noMedicationsYet": "No medications added yet",
|
||||
"emptyTitle": "No medications yet",
|
||||
"emptyDescription": "Add medications, dosages, and reminder windows to track compliance.",
|
||||
"loadFailed": "Could not load medications",
|
||||
"retryLoad": "Spróbuj ponownie",
|
||||
"name": "Nazwa",
|
||||
"dose": "Dawka",
|
||||
"doseAmount": "Amount",
|
||||
"doseUnit": "Unit",
|
||||
"category": "Category",
|
||||
"schedule": "Schedule",
|
||||
"scheduleFrom": "Od",
|
||||
"scheduleTo": "Do",
|
||||
"scheduleLabel": "Label",
|
||||
"scheduleDays": "Days",
|
||||
"scheduleDaily": "Daily",
|
||||
"active": "Aktywne",
|
||||
"inactive": "Paused",
|
||||
"intakeHistory": "Intake history",
|
||||
"showIntakeHistory": "Show intake history",
|
||||
"hideIntakeHistory": "Hide intake history",
|
||||
"markTaken": "Przyjęte",
|
||||
"markSkipped": "Pominięte",
|
||||
"deleteConfirm": "Delete medication?",
|
||||
"deleteDescription": "The medication and all intake records will be permanently deleted.",
|
||||
"noMedications": "No medications found.",
|
||||
"compliance": "Przestrzeganie zaleceń",
|
||||
"import": "Importuj",
|
||||
"importIntakes": "Import intakes",
|
||||
"importDescription": "Paste a JSON array with intake data. Expected format:",
|
||||
"importUploadFile": "Upload JSON file",
|
||||
@@ -477,7 +412,6 @@
|
||||
"importInvalidSkipped": "{count} invalid entries skipped",
|
||||
"importFailed": "Import failed",
|
||||
"importInvalidFormat": "Invalid JSON format",
|
||||
"apiAccess": "API access",
|
||||
"apiEndpointTitle": "API Endpoint: {name}",
|
||||
"apiEndpointDescription": "Use this endpoint to record intakes via API (e.g., iPhone Shortcut or cron job).",
|
||||
"apiEndpointActive": "API endpoint active",
|
||||
@@ -492,8 +426,6 @@
|
||||
"statusLoadFailed": "Could not load status",
|
||||
"changeFailed": "Change failed",
|
||||
"categoryBloodPressure": "Ciśnienie krwi",
|
||||
"categoryCholesterol": "Cholesterol",
|
||||
"categoryDiabetes": "Diabetes",
|
||||
"categoryVitamin": "Vitamins",
|
||||
"categoryThyroid": "Thyroid",
|
||||
"categoryHormone": "Hormones",
|
||||
@@ -524,7 +456,6 @@
|
||||
"intakeDeleteConfirm": "Delete intake record?",
|
||||
"intakeDeleteDescription": "This intake record will be permanently deleted.",
|
||||
"intakeCount": "{count} intakes",
|
||||
"viewHistory": "Historia",
|
||||
"today": "Dzisiaj",
|
||||
"yesterday": "Wczoraj",
|
||||
"tomorrow": "Jutro",
|
||||
@@ -568,10 +499,8 @@
|
||||
"glp1DosesPerUnit": "Doses per pen / vial",
|
||||
"glp1DosesPerUnitPlaceholder": "e.g. 4 for a Mounjaro KwikPen",
|
||||
"glp1DosesPerUnitHelp": "Optional — set to enable the low-stock dashboard caption. Mounjaro KwikPen = 4, Ozempic 0.25/0.5 mg = 4, Wegovy single-dose pen = 1. Leave blank to disable inventory tracking.",
|
||||
"glp1Headline": "{name} · {dose}",
|
||||
"glp1LastInjection": "Last: {label}",
|
||||
"glp1LastInjectionWithSite": "Last: {label} · {site}",
|
||||
"glp1NextInjection": "Dalej:{label}",
|
||||
"glp1NextInjectionDays": "Dalej:{label} (in {days} days)",
|
||||
"glp1NextInjectionToday": "Next: today",
|
||||
"glp1NextInjectionTomorrow": "Next: tomorrow",
|
||||
@@ -738,7 +667,6 @@
|
||||
"siteThighRight": "Right thigh",
|
||||
"siteUpperArmLeft": "Left upper arm",
|
||||
"siteUpperArmRight": "Right upper arm",
|
||||
"sideEffectTagsLabel": "Common GLP-1 side effects",
|
||||
"sideEffectTagsHelp": "Tap a chip to add it to your mood-entry tags.",
|
||||
"sideEffectTagNausea": "nausea",
|
||||
"sideEffectTagConstipation": "constipation",
|
||||
@@ -774,12 +702,10 @@
|
||||
"purgeError": "Error deleting records",
|
||||
"invalidTimestamp": "Please select a valid time.",
|
||||
"noIntakesYet": "No intakes recorded yet",
|
||||
"noIntakesForMedication": "No intakes yet for",
|
||||
"deleteIntakeAriaLabel": "Delete intake",
|
||||
"actions": "Akcje",
|
||||
"pageInfo": "Page {page} z{total}",
|
||||
"loginRequiredIntakes": "Please sign in to view intakes.",
|
||||
"clear": "Clear",
|
||||
"phaseConfig": "Reminder phases",
|
||||
"phaseConfigDescription": "Configure timing for reminders.",
|
||||
"phaseGreen": "Green",
|
||||
@@ -872,24 +798,13 @@
|
||||
}
|
||||
},
|
||||
"charts": {
|
||||
"title": "Historia",
|
||||
"subtitle": "Visualization of your health data",
|
||||
"timeRange": "Time range",
|
||||
"days7": "7 days",
|
||||
"days30": "30 days",
|
||||
"days90": "90 days",
|
||||
"days365": "1 year",
|
||||
"daysAll": "Wszystko",
|
||||
"weight": "Waga",
|
||||
"bloodPressure": "Ciśnienie krwi",
|
||||
"pulse": "Tętno",
|
||||
"bodyFat": "Tkanka tłuszczowa",
|
||||
"sleep": "Sen",
|
||||
"steps": "Kroki",
|
||||
"compliance": "Przestrzeganie zaleceń",
|
||||
"noData": "No data in selected time range",
|
||||
"movingAverage": "Moving average",
|
||||
"target": "Target range",
|
||||
"bucketWeekly": "Weekly avg",
|
||||
"bucketMonthly": "Monthly avg",
|
||||
"points7Label": "7 pts",
|
||||
@@ -911,7 +826,6 @@
|
||||
"avgAllTimeShort": "All-time",
|
||||
"trend7dShort": "7-day trend",
|
||||
"trend": "Trend",
|
||||
"targetRanges": "Target ranges",
|
||||
"perWeek": "/week",
|
||||
"totalDelta": "Łącznie",
|
||||
"selectMedication": "Select medication",
|
||||
@@ -923,7 +837,6 @@
|
||||
"colorRed": "Red:",
|
||||
"mood": "Nastrój",
|
||||
"moodScore": "Mood Score",
|
||||
"moodMA": "7-day trend",
|
||||
"moodLabel1": "Okropnie",
|
||||
"moodLabel2": "Źle",
|
||||
"moodLabel3": "Okay",
|
||||
@@ -961,7 +874,6 @@
|
||||
"personalBaseline": "Your normal",
|
||||
"deltaVsBaseline": "{delta} vs. your normal",
|
||||
"deltaUnchanged": "matches your normal",
|
||||
"targetWeight": "Target",
|
||||
"deltaVsTarget": "{delta} vs. target"
|
||||
},
|
||||
"chart": {
|
||||
@@ -989,25 +901,15 @@
|
||||
},
|
||||
"captionLastMonth": "vs. last month",
|
||||
"captionLastYear": "vs. last year",
|
||||
"delta": {
|
||||
"improved": "{delta} improved",
|
||||
"worsened": "{delta} worsened",
|
||||
"stable": "unchanged"
|
||||
},
|
||||
"deltaVs": {
|
||||
"lastMonth": "{delta} vs. last month",
|
||||
"lastYear": "{delta} vs. last year"
|
||||
},
|
||||
"tooltipPrior": "Prior period",
|
||||
"tooltipDelta": "Δ {delta}",
|
||||
"unavailable": {
|
||||
"lastMonth": "Comparison unavailable — no data from last month yet",
|
||||
"lastYear": "Comparison unavailable — no data from last year yet"
|
||||
},
|
||||
"insightsCallout": {
|
||||
"lastMonth": "Tracking against last month",
|
||||
"lastYear": "Tracking against last year"
|
||||
},
|
||||
"notAvailableForCompliance": "Comparison N/A for compliance"
|
||||
},
|
||||
"insights": {
|
||||
@@ -1447,10 +1349,7 @@
|
||||
"generatePrompt": "Click \"Generate\" for AI-powered insights about your health data."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Personal thresholds",
|
||||
"subtitle": "Override the computed target range for any metric. Defaults stay in effect until you set a value here.",
|
||||
"defaultLabel": "Default",
|
||||
"overrideLabel": "Your override",
|
||||
"autoModeLabel": "Auto",
|
||||
"overrideModeLabel": "Override",
|
||||
"resetAction": "Reset to default",
|
||||
@@ -1478,32 +1377,11 @@
|
||||
"metricBodyWater": "Body water",
|
||||
"metricBoneMass": "Bone mass",
|
||||
"metricOxygenSaturation": "Oxygen saturation (SpO₂)",
|
||||
"unsetExplanation": "No override — using computed default.",
|
||||
"loadError": "Could not load thresholds"
|
||||
"unsetExplanation": "No override — using computed default."
|
||||
},
|
||||
"onboarding": {
|
||||
"setupDescription": "Set up your profile to get started. You can change this later in Settings.",
|
||||
"completeSetup": "Complete setup",
|
||||
"skip": "Pomiń",
|
||||
"medicationsTitle": "Do you take medications?",
|
||||
"medicationsDescription": "Add your medications to enable reminders and compliance tracking.",
|
||||
"medNamePlaceholder": "Nazwa",
|
||||
"medDosePlaceholder": "Dawka",
|
||||
"notificationsTitle": "Reminders",
|
||||
"notificationsDescription": "HealthLog can remind you about your medications. Configure this later in Settings.",
|
||||
"telegramHint": "Reminders via Telegram bot with snooze buttons",
|
||||
"webPushHint": "Browser notifications directly to your device",
|
||||
"notificationsLater": "You can set this up anytime in Settings.",
|
||||
"targetsTitle": "Target Values",
|
||||
"targetsDescription": "Set optional target values for blood pressure and weight.",
|
||||
"targetSys": "Systolic (mmHg)",
|
||||
"targetDia": "Diastolic (mmHg)",
|
||||
"targetWeight": "Target weight (kg)",
|
||||
"errorProfile": "Could not save your profile. Please try again.",
|
||||
"errorMedication": "Could not add the medication \"{name}\". Please try again or add it later in Medications.",
|
||||
"errorTargets": "Could not save your target values. Please try again.",
|
||||
"errorGeneric": "Something went wrong while finishing setup. Please try again.",
|
||||
"medScheduleHint": "We'll add a default reminder window (08:00–09:00 daily). You can adjust it anytime in Medications.",
|
||||
"v2": {
|
||||
"title": "Welcome to HealthLog",
|
||||
"subtitle": "Three quick steps. You can finish anything later from Settings.",
|
||||
@@ -1582,27 +1460,6 @@
|
||||
"step3of4": "Krok 3 z 4",
|
||||
"step4of4": "Krok 4 z 4"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Witaj w HealthLog",
|
||||
"carouselLabel": "Powitanie — trzy slajdy",
|
||||
"slideOf": "Slajd {current} z {total}",
|
||||
"gotoSlide": "Przejdź do slajdu {index}",
|
||||
"prevSlide": "Poprzedni slajd",
|
||||
"nextSlide": "Następny slajd",
|
||||
"slide1": {
|
||||
"title": "Twoje dane zdrowotne należą do Ciebie",
|
||||
"body": "HealthLog przechowuje każdy pomiar na Twojej infrastrukturze. Bez reklam, bez udostępniania osobom trzecim, bez przywiązywania do konta."
|
||||
},
|
||||
"slide2": {
|
||||
"title": "Jeden widok dla wszystkich źródeł",
|
||||
"body": "Apple Health, Withings i wpisy ręczne łączą się w spójną historię — z priorytetem źródła dla każdej metryki, który ustalasz sam."
|
||||
},
|
||||
"slide3": {
|
||||
"title": "Coach i Insights z treścią",
|
||||
"body": "Analiza oparta wyłącznie na Twoich liczbach, każde stwierdzenie jest weryfikowalne. Bring-your-own-key: Twoje dane nie służą do trenowania."
|
||||
},
|
||||
"cta": "Zaczynamy"
|
||||
},
|
||||
"goals": {
|
||||
"title": "Co chcesz śledzić?",
|
||||
"body": "Wybierz obszary, które są dla Ciebie ważne. Pulpit i przypomnienia dostosują się do Twojego wyboru.",
|
||||
@@ -1669,10 +1526,8 @@
|
||||
"title": "Getting started",
|
||||
"subtitle": "Quick wins to get the most out of HealthLog.",
|
||||
"progress": "{done} z{total} Gotowe",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissAll": "Hide checklist",
|
||||
"dismissTooltip": "Hide this item",
|
||||
"restoreHint": "You can restore the checklist from Settings.",
|
||||
"items": {
|
||||
"profileTitle": "Set your profile",
|
||||
"profileDescription": "Height, date of birth and gender unlock personalised targets.",
|
||||
@@ -1697,8 +1552,6 @@
|
||||
"remainingMany": "{count} more readings to go."
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ustawienia",
|
||||
"subtitle": "Profile, Security & Connections",
|
||||
"researchMode": {
|
||||
"sectionTitle": "Tryb Badawczy",
|
||||
"subtitle": "Opcjonalne wyświetlanie szacowanej krzywej poziomu leku GLP-1, wyprowadzonej z farmakokinetyki populacyjnej opublikowanej przez EMA. Tylko do odczytu — nigdy pomiar ani porada medyczna.",
|
||||
@@ -1841,18 +1694,9 @@
|
||||
"coming_soon": "Moving here with the next release update."
|
||||
}
|
||||
},
|
||||
"sectionsTitle": "Ustawienia",
|
||||
"categoryGeneral": "General",
|
||||
"categoryNotifications": "Powiadomienia",
|
||||
"categoryAi": "AI",
|
||||
"categoryPersonalization": "Personalization",
|
||||
"categoryIntegration": "Integration",
|
||||
"categoryApi": "API",
|
||||
"profile": "Profil",
|
||||
"security": "Bezpieczeństwo",
|
||||
"language": "Język",
|
||||
"languageDescription": "Choose the display language of the application.",
|
||||
"languageSystem": "System (automatic)",
|
||||
"username": "Nazwa użytkownika",
|
||||
"height": "Height (cm)",
|
||||
"dateOfBirth": "Data urodzenia",
|
||||
@@ -1930,16 +1774,6 @@
|
||||
"webPushActive": "Aktywne",
|
||||
"kiInsights": "AI Insights (OpenAI)",
|
||||
"kiInsightsDescription": "Optional: Save your OpenAI key for daily, automatic AI evaluations in Insights.",
|
||||
"kiInsightsBenefitsTitle": "Benefits with OpenAI key",
|
||||
"kiInsightsBenefit1": "Daily summaries for general status, blood pressure, weight, pulse, BMI, and medication compliance.",
|
||||
"kiInsightsBenefit2": "Better trend and correlation interpretation based on your latest 30 daily measurement points per area.",
|
||||
"kiInsightsBenefit3": "Automatic background refresh so the Insights page always shows up-to-date assessments.",
|
||||
"createApiKeyHint": "Create your API key at:",
|
||||
"createApiKeyLinkLabel": "platform.openai.com/api-keys",
|
||||
"apiKey": "API Key",
|
||||
"apiKeyStored": "Key stored — enter new one to replace",
|
||||
"apiKeySaved": "API key saved",
|
||||
"apiKeyRemoved": "API key removed",
|
||||
"codexConnected": "ChatGPT connected successfully! AI insights are now active.",
|
||||
"codexDisconnected": "ChatGPT connection removed.",
|
||||
"codexConnectionFailed": "ChatGPT connection failed. Please try again.",
|
||||
@@ -1952,18 +1786,10 @@
|
||||
"regenerateRateLimit": "Please wait — you've hit the hourly limit for analyses.",
|
||||
"lastGeneratedAt": "Last generated",
|
||||
"ai": {
|
||||
"title": "AI Insights",
|
||||
"description": "Provider, model, key.",
|
||||
"chatgptConnectedBadge": "ChatGPT connected",
|
||||
"adminAiActiveBadge": "Admin AI active",
|
||||
"connectionExpiredBadge": "Connection expired",
|
||||
"chatgptConnectedHeading": "ChatGPT connected",
|
||||
"chatgptConnectedBody": "Insights are generated through your ChatGPT subscription — no extra cost.",
|
||||
"connectedSince": "Connected since {when}.",
|
||||
"disconnect": "Disconnect",
|
||||
"connectChatgptHeading": "Connect with ChatGPT",
|
||||
"connectChatgptBody": "Link your ChatGPT Pro/Max account to get AI-powered health analyses based on current medical guidelines. No additional API costs.",
|
||||
"connectChatgptCta": "Connect with ChatGPT",
|
||||
"deviceCodeHeading": "Finish connecting on chatgpt.com",
|
||||
"deviceCodeStep1": "Open this link on any device:",
|
||||
"deviceCodeStep2": "Enter this one-time code:",
|
||||
@@ -1972,42 +1798,20 @@
|
||||
"deviceCodeWaiting": "Waiting for approval…",
|
||||
"deviceCodeCancel": "Anuluj",
|
||||
"oauthNotConfigured": "ChatGPT OAuth is not configured on this instance — use your own API key below instead.",
|
||||
"adminFallback": "Alternatively, HealthLog will use the AI provider configured by the administrator.",
|
||||
"personalProviderHeading": "AI provider (personal)",
|
||||
"personalProviderBody": "Your own AI provider overrides the admin setting. Leave blank for the default. For ChatGPT Pro/Max OAuth use the connect button above.",
|
||||
"providerLabel": "Provider",
|
||||
"providerOptionDefault": "— Default (Admin/Codex) —",
|
||||
"providerOptionOpenai": "OpenAI (API key)",
|
||||
"providerOptionAnthropic": "Anthropic (Claude)",
|
||||
"providerOptionLocal": "Local (OpenAI-compatible)",
|
||||
"modelLabel": "Model",
|
||||
"modelOptionDefault": "— Default —",
|
||||
"modelOptionCustom": "Custom…",
|
||||
"customModelLabel": "Custom model name",
|
||||
"openaiKeyLabel": "OpenAI API key",
|
||||
"openaiKeyHelp": "Your own key — not connected to your ChatGPT subscription. For the subscription use the connect button above.",
|
||||
"anthropicKeyLabel": "Anthropic API key",
|
||||
"baseUrlLabel": "Base URL",
|
||||
"localKeyLabel": "API key (optional)",
|
||||
"savedPreview": "(saved {preview})",
|
||||
"savedShort": "(saved)",
|
||||
"saveCta": "Zapisz",
|
||||
"testCta": "Test connection",
|
||||
"removeKeyCta": "Remove saved key",
|
||||
"keyRemoved": "Saved key removed",
|
||||
"removeKeyConfirmTitle": "Remove saved API key?",
|
||||
"removeKeyConfirmBody": "Insights for this provider will fall back to the admin/Codex provider until you save a new key.",
|
||||
"saved": "Zapisano",
|
||||
"saveFailed": "Save failed",
|
||||
"testFailed": "Test failed",
|
||||
"errorGeneric": "Błąd",
|
||||
"providerChain": {
|
||||
"heading": "AI provider fallback chain",
|
||||
"activeLine": "Active provider: {provider}",
|
||||
"cachedSuffix": "(cached: {provider})",
|
||||
"chainLine": "Configured chain: {chain}",
|
||||
"managementHint": "Reordering and on/off toggles arrive in the next release.",
|
||||
"none": "none configured",
|
||||
"types": {
|
||||
"codex": "ChatGPT (Codex)",
|
||||
"openai": "OpenAI (your key)",
|
||||
@@ -2081,10 +1885,7 @@
|
||||
"withingsCredentialsSavedPlaceholder": "Saved — enter new to replace",
|
||||
"withingsCredentialsSavedPlaceholderSecret": "Saved — enter new to replace",
|
||||
"withingsSaveCredentials": "Save credentials",
|
||||
"withingsConnected": "Connected",
|
||||
"configured": "Configured",
|
||||
"withingsTokenExpired": "Token expired",
|
||||
"withingsLastSync": "Last sync",
|
||||
"withingsSync": "Sync now",
|
||||
"withingsFullSync": "Sync all data",
|
||||
"withingsFullSyncTitle": "Full synchronization?",
|
||||
@@ -2109,15 +1910,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"integrationStatus": {
|
||||
"stateConnected": "Connected",
|
||||
"stateError": "Błąd",
|
||||
"stateReauthRequired": "Reconnect required",
|
||||
"stateDisconnected": "Disconnected",
|
||||
"consecutiveFailures": "{count}/{threshold} consecutive failures",
|
||||
"lastSuccess": "Last successful sync",
|
||||
"lastAttempt": "Last attempt"
|
||||
},
|
||||
"integrationPill": {
|
||||
"connected": "Connected",
|
||||
"errorReconnect": "Error — reconnect",
|
||||
@@ -2130,7 +1922,6 @@
|
||||
},
|
||||
"apiTokens": "API Tokens",
|
||||
"apiTokensDescription": "Create API tokens for external medication intake (e.g., Shortcuts, automations).",
|
||||
"tokenName": "Token name",
|
||||
"tokenNamePlaceholder": "Token name (e.g., iPhone Shortcut)",
|
||||
"tokenCreated": "Token created — copy it now! It won't be shown again.",
|
||||
"tokenRevoke": "Revoke token?",
|
||||
@@ -2148,62 +1939,14 @@
|
||||
"tokenTableActions": "Akcje",
|
||||
"noActiveTokens": "No active tokens available.",
|
||||
"tokenNeverUsed": "Never",
|
||||
"tokenLastUsed": "Last used:",
|
||||
"tokenCreatedAt": "Created:",
|
||||
"apiEndpoint": "API endpoint for medication intake:",
|
||||
"apiEndpointsTitle": "API endpoints",
|
||||
"apiEndpointsDescription": "Overview of currently available external endpoint(s) for token-based ingestion.",
|
||||
"apiEndpointMethod": "Method",
|
||||
"apiEndpointPath": "Path",
|
||||
"apiEndpointAuth": "Authentication",
|
||||
"apiEndpointExample": "Body example",
|
||||
"export": "Data Export",
|
||||
"exportDescription": "Export all your health data.",
|
||||
"exportJson": "JSON Export",
|
||||
"exportCsv": "CSV Export",
|
||||
"doctorReport": "Doctor Report (PDF)",
|
||||
"auditLog": "Activity Log",
|
||||
"auditLogHidden": "Log hidden.",
|
||||
"auditLogShowing": "Showing last {count} z{total} entries",
|
||||
"auditNoActivities": "No activities found.",
|
||||
"auditAction": "Action",
|
||||
"auditCategory": "Category",
|
||||
"auditIp": "IP",
|
||||
"auditLocation": "Location",
|
||||
"auditTimestamp": "Czas",
|
||||
"auditOther": "Other",
|
||||
"auditCategoryAuth": "Auth",
|
||||
"auditCategoryData": "Dane",
|
||||
"auditCategoryIntegration": "Integration",
|
||||
"auditCategoryAI": "AI",
|
||||
"auditCategoryAdmin": "Admin",
|
||||
"auditActionAuthRegister": "Registration",
|
||||
"auditActionAuthLogin": "Zaloguj",
|
||||
"auditActionAuthLoginPasskey": "Passkey login",
|
||||
"auditActionAuthLoginPassword": "Password login",
|
||||
"auditActionAuthLoginFailed": "Failed login",
|
||||
"auditActionAuthLogout": "Wyloguj",
|
||||
"auditActionAuthPasskeyRegister": "Passkey added",
|
||||
"auditActionAuthPasskeyDelete": "Passkey deleted",
|
||||
"auditActionAuthPasswordChange": "Password changed",
|
||||
"auditActionMeasurementCreate": "Measurement created",
|
||||
"auditActionMeasurementUpdate": "Measurement updated",
|
||||
"auditActionMeasurementDelete": "Measurement deleted",
|
||||
"auditActionMedicationCreate": "Medication created",
|
||||
"auditActionMedicationUpdate": "Medication updated",
|
||||
"auditActionMedicationDelete": "Medication deleted",
|
||||
"auditActionMedicationIntake": "Intake recorded",
|
||||
"auditActionMedicationIngestExternal": "External intake",
|
||||
"auditActionWithingsConnect": "Withings connected",
|
||||
"auditActionWithingsDisconnect": "Withings disconnected",
|
||||
"auditActionExportDownload": "Export downloaded",
|
||||
"auditActionInsightsGenerate": "AI insight generated",
|
||||
"auditActionAdminUserUpdate": "Admin: User updated",
|
||||
"auditActionAdminUserResetPassword": "Admin: Password reset",
|
||||
"auditActionAdminSettingsUpdate": "Admin: Settings changed",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"dangerZoneTitle": "Danger Zone",
|
||||
"dangerZone": "Delete All Data",
|
||||
"dangerZoneDescription": "Deletes all your health data and integrations. Your user account will be preserved.",
|
||||
"dangerZoneConfirm": "Delete all data?",
|
||||
@@ -2213,9 +1956,6 @@
|
||||
"finalDelete": "Delete permanently",
|
||||
"saved": "Zapisano",
|
||||
"savingError": "Error saving",
|
||||
"adminAreaTitle": "Admin area",
|
||||
"adminAreaDescription": "System-wide settings and user management are available in the admin console.",
|
||||
"openAdminConsole": "Open admin console",
|
||||
"moodLogTitle": "moodLog",
|
||||
"moodLogDescription": "Import mood data from moodLog",
|
||||
"moodLogUrl": "moodLog URL",
|
||||
@@ -2231,7 +1971,6 @@
|
||||
"moodLogDisconnect": "Disconnect",
|
||||
"moodLogDisconnectTitle": "Disconnect moodLog?",
|
||||
"moodLogDisconnectDescription": "The connection will be removed and all imported mood data will be deleted.",
|
||||
"moodLogLastSync": "Last sync",
|
||||
"moodLogEntries": "Entries",
|
||||
"moodLogSyncResult": "{count} entries synchronized",
|
||||
"moodLogSyncFailed": "Sync failed",
|
||||
@@ -2298,14 +2037,10 @@
|
||||
"title": "Administration",
|
||||
"subtitle": "System status, users, and settings",
|
||||
"settingsSaveError": "Failed to save settings",
|
||||
"settingsSaveValidationError": "Please check the highlighted fields",
|
||||
"sectionsTitle": "Admin",
|
||||
"systemStatus": "System Status",
|
||||
"version": "Version",
|
||||
"database": "Database",
|
||||
"databaseConnected": "Connected",
|
||||
"databaseError": "Błąd",
|
||||
"gitCommit": "Git Commit",
|
||||
"startedAt": "Started",
|
||||
"users": "Users",
|
||||
"measurementsCount": "Measurements",
|
||||
@@ -2320,8 +2055,6 @@
|
||||
"load1": "Load (1m)",
|
||||
"memUsedPercent": "Memory",
|
||||
"diskBusyPercent": "Disk I/O",
|
||||
"diskReadBps": "Disk read",
|
||||
"diskWriteBps": "Disk write",
|
||||
"last2hours": "Last 2 hours",
|
||||
"empty": "Sampling started — data appears in 1–2 minutes.",
|
||||
"loadError": "Failed to load host metrics. Try refreshing the page."
|
||||
@@ -2376,18 +2109,11 @@
|
||||
"integrationWebPush": "Web Push",
|
||||
"integrationBugReport": "Bug Report",
|
||||
"apiGlobal": "Allow API endpoints and API tokens.",
|
||||
"moodLogGlobal": "Allow the moodLog integration.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionIntegrations": "Integracje",
|
||||
"sectionMedication": "Leki",
|
||||
"sectionManagement": "Management",
|
||||
"umamiTitle": "Umami",
|
||||
"umamiDescription": "Web analytics with Umami",
|
||||
"glitchtipTitle": "GlitchTip",
|
||||
"glitchtipDescription": "Error tracking with GlitchTip",
|
||||
"webPushVapidTitle": "Web Push VAPID",
|
||||
"monitoring": "Monitoring (Umami/GlitchTip)",
|
||||
"monitoringDescription": "Configuration for website analytics and error tracking.",
|
||||
"umamiEnabled": "Enable Umami tracking.",
|
||||
"umamiScriptUrl": "Umami script URL",
|
||||
"umamiScriptUrlPlaceholder": "https://analytics.example.com/script.js",
|
||||
@@ -2398,7 +2124,6 @@
|
||||
"glitchtipDsnPlaceholder": "https://<public-key>@glitchtip.example.com/<project-id>",
|
||||
"glitchtipEnvironment": "GlitchTip environment",
|
||||
"glitchtipEnvironmentPlaceholder": "production",
|
||||
"webPushVapid": "Web Push (VAPID)",
|
||||
"webPushVapidDescription": "Configure VAPID keys and subject here so browser push works without environment variables.",
|
||||
"webPushVapidPublicKey": "VAPID public key",
|
||||
"webPushVapidPublicKeyPlaceholder": "BElx... (Base64URL)",
|
||||
@@ -2407,12 +2132,8 @@
|
||||
"webPushVapidSubject": "VAPID subject",
|
||||
"webPushVapidSubjectPlaceholder": "mailto:you@example.com",
|
||||
"configured": "Configured",
|
||||
"notConfigured": "Not configured",
|
||||
"monitoringTestUmami": "Send Umami test",
|
||||
"monitoringTestGlitchTip": "Send GlitchTip test",
|
||||
"monitoringTestSuccess": "Test event sent",
|
||||
"monitoringTestFailed": "Monitoring test failed",
|
||||
"monitoringSave": "Save monitoring",
|
||||
"bugReportGithub": "Bug report (GitHub Issues)",
|
||||
"bugReportGithubDescription": "Configure GitHub issue token and repository for incoming bug reports.",
|
||||
"bugReportEnabledLabel": "Bug reports enabled",
|
||||
@@ -2421,9 +2142,6 @@
|
||||
"bugReportRepoPlaceholder": "owner/repo",
|
||||
"bugReportToken": "Issue token",
|
||||
"bugReportTokenPlaceholder": "ghp_...",
|
||||
"bugReportConfigured": "Bug report is configured.",
|
||||
"bugReportNotConfigured": "Bug report is not fully configured yet.",
|
||||
"bugReportSave": "Save bug report settings",
|
||||
"userManagement": "User Management",
|
||||
"userName": "Nazwa",
|
||||
"userEmail": "E-mail",
|
||||
@@ -2438,7 +2156,6 @@
|
||||
"toUser": "Make user",
|
||||
"toAdmin": "Make admin",
|
||||
"ownRoleUnchangeable": "Cannot change own role",
|
||||
"lastAdminError": "Cannot demote the last admin",
|
||||
"resetPassword": "Reset password",
|
||||
"resetPasswordTitle": "Reset password: {name}",
|
||||
"newPassword": "New password",
|
||||
@@ -2456,14 +2173,11 @@
|
||||
"tokenLastUsed": "Last used",
|
||||
"tokenCreated": "Created",
|
||||
"tokenNeverUsed": "Never",
|
||||
"noTokens": "No API tokens found.",
|
||||
"tokensEmptyTitle": "No API tokens yet",
|
||||
"tokensEmptyDescription": "Tokens are issued when a native client signs in or via Settings → Account.",
|
||||
"loginOverview": "Login Overview",
|
||||
"allAuthEvents": "All auth events",
|
||||
"failedOnly": "Failed only",
|
||||
"noEntries": "No entries found.",
|
||||
"loginEmptyTitle": "No authentication events yet",
|
||||
"loginEmptyDescription": "Sign-ins, sign-outs, and passkey changes will show up here.",
|
||||
"loginEmptyFailedTitle": "No failed sign-in attempts",
|
||||
"loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.",
|
||||
@@ -2484,7 +2198,6 @@
|
||||
"outcomeSuccess": "Sukces",
|
||||
"outcomeFailed": "Failed",
|
||||
"auditDetails": "Details",
|
||||
"dangerZone": "Danger Zone",
|
||||
"deleteAllData": "Delete all data globally",
|
||||
"deleteAllDescription": "Deletes all measurement, medication, integration, and log data for all users. User accounts will be preserved.",
|
||||
"deleteAllConfirm": "Really delete all data?",
|
||||
@@ -2509,8 +2222,6 @@
|
||||
"reminderLateMinutesDescription": "Minutes after window end until the badge changes from yellow to orange.",
|
||||
"reminderMissedMinutes": "Missed threshold (minutes)",
|
||||
"reminderMissedMinutesDescription": "Minutes after window end until the intake is considered missed.",
|
||||
"reminderThresholdsSave": "Save thresholds",
|
||||
"notificationTest": "Test Notifications",
|
||||
"notificationTestSend": "Send test",
|
||||
"notificationTestSuccess": "Test notification sent",
|
||||
"notificationTestFailed": "Failed to send test notification",
|
||||
@@ -2523,8 +2234,6 @@
|
||||
"reminderCheckEventsToday": "Events today",
|
||||
"reminderCheckNotifSent": "Sent",
|
||||
"feedback": {
|
||||
"title": "Feedback Inbox",
|
||||
"description": "User-submitted feedback, bug reports, and feature requests.",
|
||||
"tabOpen": "Open",
|
||||
"tabAcknowledged": "Acknowledged",
|
||||
"tabResolved": "Resolved",
|
||||
@@ -2535,7 +2244,6 @@
|
||||
"createdAt": "Submitted",
|
||||
"actions": "Akcje",
|
||||
"details": "Details",
|
||||
"noEntries": "No feedback in this category.",
|
||||
"emptyTitle": "All caught up",
|
||||
"emptyDescription": "No user feedback in this status. Submitted bugs, questions, and feature requests will appear here.",
|
||||
"loading": "Loading feedback...",
|
||||
@@ -2544,11 +2252,6 @@
|
||||
"categoryFeature": "Feature",
|
||||
"categoryQuestion": "Question",
|
||||
"categoryOther": "Other",
|
||||
"statusOpen": "Open",
|
||||
"statusAcknowledged": "Acknowledged",
|
||||
"statusResolved": "Resolved",
|
||||
"statusArchived": "Archived",
|
||||
"dialogTitle": "Feedback details",
|
||||
"metadataHeading": "Metadata",
|
||||
"metaUrl": "URL",
|
||||
"metaLocale": "Locale",
|
||||
@@ -2569,8 +2272,7 @@
|
||||
"publishFailed": "GitHub publish failed",
|
||||
"updateFailed": "Update failed",
|
||||
"archiveConfirm": "Archive this feedback entry?",
|
||||
"submittedBy": "Submitted by",
|
||||
"sectionTitle": "Feedback"
|
||||
"submittedBy": "Submitted by"
|
||||
},
|
||||
"shell": {
|
||||
"overview": "Przegląd",
|
||||
@@ -2654,12 +2356,10 @@
|
||||
"subtitle": "Audit trail of authentication and admin events."
|
||||
},
|
||||
"auditLog": {
|
||||
"title": "Audit log",
|
||||
"filterActor": "Actor (user id or username)",
|
||||
"filterAction": "Action",
|
||||
"filterActionAll": "All actions",
|
||||
"filterTarget": "Target (id or path)",
|
||||
"filterSeverity": "Severity",
|
||||
"filterDate": "Date range",
|
||||
"range24h": "Last 24 hours",
|
||||
"range7d": "Ostatnie 7 dni",
|
||||
@@ -2706,7 +2406,6 @@
|
||||
"runFailed": "Failed to enqueue backup",
|
||||
"loading": "Loading backups...",
|
||||
"loadError": "Failed to load backups.",
|
||||
"empty": "No backups recorded yet.",
|
||||
"emptyTitle": "No backups yet",
|
||||
"emptyDescription": "Backups run automatically every Sunday at 03:00 — or trigger one now to create the first snapshot.",
|
||||
"colUser": "User",
|
||||
@@ -2753,10 +2452,7 @@
|
||||
"nextGoal": "Next goal",
|
||||
"allCompleted": "All achievements unlocked!",
|
||||
"completed": "Completed",
|
||||
"inProgress": "In progress",
|
||||
"progress": "Progress",
|
||||
"goalReached": "Goal reached",
|
||||
"remaining": "{count} remaining",
|
||||
"remainingUnlocks": "{count} still unlockable",
|
||||
"noneUnlockedYet": "No achievements unlocked yet.",
|
||||
"pointsValue": "{points} points",
|
||||
@@ -3020,8 +2716,7 @@
|
||||
"ariaLabel": "Hidden locked achievement"
|
||||
},
|
||||
"hiddenUnlockToast": {
|
||||
"title": "You unlocked a hidden achievement!",
|
||||
"description": "Tap to see the surprise."
|
||||
"title": "You unlocked a hidden achievement!"
|
||||
},
|
||||
"dashboardCard": {
|
||||
"title": "Recent unlocks",
|
||||
@@ -3035,20 +2730,9 @@
|
||||
"loginRequired": "Please sign in to report a bug.",
|
||||
"bugTitle": "Title",
|
||||
"description": "Opis",
|
||||
"descriptionPlaceholder": "Describe the bug in detail. What did you do? What happened? What did you expect?",
|
||||
"screenshot": "Screenshot (optional)",
|
||||
"screenshotPreview": "Screenshot preview",
|
||||
"attachScreenshot": "Attach screenshot",
|
||||
"imageOnly": "Only image files allowed",
|
||||
"tooLarge": "Screenshot is too large (max 5 MB)",
|
||||
"submit": "Send",
|
||||
"success": "Thank you! Your bug report has been submitted successfully.",
|
||||
"viewOnGithub": "View on GitHub",
|
||||
"errorCreating": "Error creating report",
|
||||
"notConfiguredTitle": "Bug reports not available yet",
|
||||
"notConfiguredUser": "Bug reporting is disabled on this server. Please contact your administrator.",
|
||||
"notConfiguredAdmin": "Bug reporting requires a GitHub integration (issue token + repository). Configure it in the admin panel under Settings → Bug reports.",
|
||||
"openAdminSettings": "Open admin settings",
|
||||
"category": "Typ",
|
||||
"categoryBug": "Bug report",
|
||||
"categoryFeature": "Feature request",
|
||||
@@ -3058,8 +2742,7 @@
|
||||
"githubEscalationNote": "Your feedback is stored locally. If the admin enables GitHub integration, it can be promoted to a public issue on request.",
|
||||
"internalOnlyNote": "Your feedback is stored locally and only visible to the administrator of this server.",
|
||||
"disabledTitle": "Bug reports are turned off",
|
||||
"disabledBody": "The administrator has disabled bug reports on this server.",
|
||||
"disabledError": "Bug reports are disabled by the administrator."
|
||||
"disabledBody": "The administrator has disabled bug reports on this server."
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Powiadomienia",
|
||||
@@ -3069,24 +2752,9 @@
|
||||
"noChannels": "Configure a notification channel in Settings first.",
|
||||
"goToSettings": "Go to Settings",
|
||||
"channelDisabled": "Wyłączone",
|
||||
"eventMedicationReminder": "Medication Reminder",
|
||||
"eventMedicationReminderDesc": "Reminder when an intake is due.",
|
||||
"eventMeasurementAnomaly": "Anomalous Measurement",
|
||||
"eventMeasurementAnomalyDesc": "Warning for unusual measurements (e.g., high blood pressure).",
|
||||
"eventComplianceLow": "Low Compliance",
|
||||
"eventComplianceLowDesc": "Notification when medication compliance drops below a threshold.",
|
||||
"eventWithingsSyncFailed": "Withings Sync Failed",
|
||||
"eventWithingsSyncFailedDesc": "Alert when the automatic Withings data sync fails.",
|
||||
"eventSystemAlert": "Alert systemowy",
|
||||
"eventSystemAlertDesc": "Ważne komunikaty systemowe i powiadomienia administracyjne.",
|
||||
"eventPersonalRecord": "Rekord osobisty",
|
||||
"eventPersonalRecordDesc": "Powiadomienie po osiągnięciu nowego rekordu w metryce lub treningu. Domyślnie wyłączone."
|
||||
},
|
||||
"format": {
|
||||
"dateShort": "{month}/{day}/{year}",
|
||||
"timeShort": "{hours}:{minutes}",
|
||||
"dateTime": "{month}/{day}/{year}, {hours}:{minutes}"
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
"notice": "Ta wersja językowa jest opracowana przez AI, w tym instrukcje krytyczne dla bezpieczeństwa Coacha. Walidacja automatyczna działa w CI; proszę zgłaszać wszelkie regresje Coacha AI na GitHubie.",
|
||||
@@ -3094,108 +2762,10 @@
|
||||
"dismiss": "Zamknij"
|
||||
}
|
||||
},
|
||||
"classifications": {
|
||||
"bmi": {
|
||||
"Underweight": "Underweight",
|
||||
"Normal": "Normal",
|
||||
"Overweight": "Overweight",
|
||||
"ObesityGradeI": "Obesity Grade I",
|
||||
"ObesityGradeII": "Obesity Grade II",
|
||||
"ObesityGradeIII": "Obesity Grade III"
|
||||
},
|
||||
"bp": {
|
||||
"Optimal": "Optimal",
|
||||
"Normal": "Normal",
|
||||
"HighNormal": "High-normal",
|
||||
"HypertensionGrade1": "Hypertension Grade 1",
|
||||
"HypertensionGrade2": "Hypertension Grade 2",
|
||||
"HypertensionGrade3": "Hypertension Grade 3"
|
||||
},
|
||||
"pulse": {
|
||||
"Bradycardia": "Bradycardia",
|
||||
"Normal": "Normal",
|
||||
"Elevated": "Elevated",
|
||||
"Tachycardia": "Tachycardia"
|
||||
},
|
||||
"pulseTarget": {
|
||||
"SignificantlyLow": "Significantly low",
|
||||
"SlightlyLow": "Slightly low",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyElevated": "Slightly elevated",
|
||||
"SignificantlyElevated": "Significantly elevated"
|
||||
},
|
||||
"sleep": {
|
||||
"FarTooShort": "Far too short",
|
||||
"TooShort": "Too short",
|
||||
"OnTarget": "On target",
|
||||
"SlightlyLong": "Slightly long",
|
||||
"FarTooLong": "Far too long"
|
||||
},
|
||||
"bodyFat": {
|
||||
"Essential": "Essential",
|
||||
"Athletic": "Athletic",
|
||||
"Fitness": "Fitness",
|
||||
"Average": "Średnia",
|
||||
"Obese": "Obese"
|
||||
},
|
||||
"steps": {
|
||||
"VeryLow": "Very low",
|
||||
"LowActive": "Low active",
|
||||
"ModeratelyActive": "Moderately active",
|
||||
"Active": "Aktywne",
|
||||
"VeryActive": "Very active"
|
||||
},
|
||||
"general": {
|
||||
"Good": "Dobrze",
|
||||
"Moderate": "Moderate",
|
||||
"Low": "Low",
|
||||
"VeryGood": "Very good",
|
||||
"VeryStable": "Very stable",
|
||||
"Stable": "Stable",
|
||||
"Fluctuating": "Fluctuating"
|
||||
},
|
||||
"alerts": {
|
||||
"bmiBelowNormalTitle": "BMI below normal range",
|
||||
"bmiBelowNormalMessage": "Your BMI of {bmi} is below the normal range (18.5–24.9).",
|
||||
"bmiOverweightTitle": "BMI in overweight range",
|
||||
"bmiOverweightMessage": "Your BMI of {bmi} is in the overweight range. Regular exercise and a balanced diet can help.",
|
||||
"bmiObesityTitle": "BMI in obesity range",
|
||||
"bmiObesityMessage": "Your BMI of {bmi} is in the obesity range.",
|
||||
"bmiNormalTitle": "BMI in normal range",
|
||||
"bmiNormalMessage": "Your BMI of {bmi} is in the healthy range.",
|
||||
"bpDangerTitle": "Blood pressure significantly elevated",
|
||||
"bpDangerMessage": "Your average blood pressure ({sys}/{dia}) is classified as \"{category}\".",
|
||||
"bpWarningTitle": "Blood pressure slightly elevated",
|
||||
"bpWarningMessage": "Your average blood pressure ({sys}/{dia}) is in the \"{category}\" range.",
|
||||
"bpTargetGoodTitle": "Good blood pressure target adherence",
|
||||
"bpTargetGoodMessage": "{pct}% of your readings are within the target range.",
|
||||
"bpTargetBadTitle": "Blood pressure often outside target range",
|
||||
"bpTargetBadMessage": "Only {pct}% of your readings are within the target range.",
|
||||
"weightIncreasingTitle": "Weight increasing",
|
||||
"weightIncreasingMessage": "Your weight is increasing by approx. {change} kg per week over the last 30 days.",
|
||||
"weightDecreasingTitle": "Weight decreasing",
|
||||
"weightDecreasingMessage": "Your weight is decreasing by approx. {change} kg per week over the last 30 days.",
|
||||
"pulseOutliersTitle": "Pulse outliers detected",
|
||||
"pulseOutliersMessage": "{count} unusual pulse readings in the last 30 days.",
|
||||
"complianceLowTitle": "Low compliance: {name}",
|
||||
"complianceLowMessage": "Your 7-day compliance for {name} is only {pct}%. Regular intake is important.",
|
||||
"complianceGoodTitle": "Excellent compliance: {name}",
|
||||
"complianceGoodMessage": "{pct}% compliance over the last 7 days. Keep it up!"
|
||||
}
|
||||
},
|
||||
"targets": {
|
||||
"title": "Targets",
|
||||
"introText": "Your current values compared to recommended target ranges. Guideline sources are linked on each card.",
|
||||
"weight": "Waga",
|
||||
"bloodPressure": "Ciśnienie krwi",
|
||||
"bloodPressureOnTarget": "Blood pressure on target",
|
||||
"restingPulse": "Resting pulse",
|
||||
"sleepDuration": "Sleep duration",
|
||||
"bmi": "BMI",
|
||||
"bodyFat": "Tkanka tłuszczowa",
|
||||
"stepsPerDay": "Steps/day",
|
||||
"medicationCompliance": "Medication compliance",
|
||||
"steps": "Kroki",
|
||||
"average30d": "30-day average:",
|
||||
"consistency": {
|
||||
"ariaLabel": "Last 7 days, in-range status per day",
|
||||
|
||||
@@ -241,10 +241,6 @@ describe("i18n locale file integrity", () => {
|
||||
// See `docs/audit/v1415-i18n-coverage.md` §Legitimate EN==DE==key cases.
|
||||
const PLACEHOLDER_ALLOWLIST = new Set<string>([
|
||||
"settings.ntfy",
|
||||
"classifications.bp.Optimal",
|
||||
"classifications.bp.Normal",
|
||||
"classifications.pulse.Normal",
|
||||
"classifications.bodyFat.Fitness",
|
||||
// v1.4.19 phase A7 — "BMI" is the same acronym in EN and DE,
|
||||
// and the medical / fitness "Optimal", "Fitness", "Normal"
|
||||
// categories are technical terms that German clinics also use
|
||||
|
||||
Reference in new issue
Block a user