diff --git a/messages/de.json b/messages/de.json index 14a6a40ca..b3bd516ea 100644 --- a/messages/de.json +++ b/messages/de.json @@ -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://@glitchtip.example.com/", "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", diff --git a/messages/en.json b/messages/en.json index 1c0fce910..eee305e86 100644 --- a/messages/en.json +++ b/messages/en.json @@ -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://@glitchtip.example.com/", "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", diff --git a/messages/es.json b/messages/es.json index 7bbd3ed9c..67b71303e 100644 --- a/messages/es.json +++ b/messages/es.json @@ -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://@glitchtip.example.com/", "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", diff --git a/messages/fr.json b/messages/fr.json index 551e1b1c0..b920432d4 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -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://@glitchtip.example.com/", "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", diff --git a/messages/it.json b/messages/it.json index 6baae33cb..8f108bbd6 100644 --- a/messages/it.json +++ b/messages/it.json @@ -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://@glitchtip.example.com/", "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", diff --git a/messages/pl.json b/messages/pl.json index b0ca9f137..a6375aeea 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -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://@glitchtip.example.com/", "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", diff --git a/src/lib/__tests__/i18n-locale-integrity.test.ts b/src/lib/__tests__/i18n-locale-integrity.test.ts index 3bc69ad35..a73a8181f 100644 --- a/src/lib/__tests__/i18n-locale-integrity.test.ts +++ b/src/lib/__tests__/i18n-locale-integrity.test.ts @@ -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([ "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