mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 05:12:14 +00:00
Name every capture sheet by what it logs, in one order
The measurement and mood sheets were titled with the bare 'Add', the medication one with the noun alone. Every capture sheet now carries the verb phrase the dashboard's add menu shows, and the add menu lists its entries in the capture picker's order. Normalise 'z.B.' to 'z. B.' in the German catalogue and drop the register page's subtitle, which repeated its title.
This commit is contained in:
1 parent
7493ec48e4
commit
0b881fe5b7
13 files changed
+38
-55
No files matched your search
+4
-7
@@ -463,7 +463,6 @@
|
||||
"signOut": "Abmelden und Einladung annehmen"
|
||||
},
|
||||
"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",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "Lebensereignis erfassen",
|
||||
"customizeDashboard": "Dashboard anpassen",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "Medikamenteneinnahme erfassen",
|
||||
"sheetDescription": "Dosis, Zeitpunkt und Medikament in wenigen Tipps protokollieren.",
|
||||
"medicationLabel": "Medikament",
|
||||
"medicationPlaceholder": "Medikament auswählen",
|
||||
@@ -764,7 +762,7 @@
|
||||
"valueWithUnit": "Wert ({unit})",
|
||||
"timestamp": "Zeitpunkt",
|
||||
"timestampBackdateHint": "Datum und Uhrzeit anpassen, um einen vergangenen Wert zu erfassen.",
|
||||
"notesPlaceholder": "z.B. nach dem Essen",
|
||||
"notesPlaceholder": "z. B. nach dem Essen",
|
||||
"formReset": "Formular zurücksetzen",
|
||||
"saveError": "Fehler beim Speichern",
|
||||
"duplicateTimestamp": "Zum gewählten Zeitpunkt existiert bereits ein Messwert dieses Typs.",
|
||||
@@ -895,7 +893,7 @@
|
||||
"factorNo": "Nein",
|
||||
"factorRatingOption": "{label}: {value} von {max}",
|
||||
"tags": "Tags",
|
||||
"tagsPlaceholder": "z.B. Sport, Arbeit, Familie",
|
||||
"tagsPlaceholder": "z. B. Sport, Arbeit, Familie",
|
||||
"tagsHelp": "Kommagetrennt eingeben",
|
||||
"timestamp": "Zeitpunkt",
|
||||
"date": "Datum",
|
||||
@@ -6554,7 +6552,7 @@
|
||||
"createFailed": "Das Token konnte nicht erstellt werden. Bitte versuche es erneut."
|
||||
},
|
||||
"tokenMintMovedDescription": "Tokens werden dort ausgestellt, wo sie gelten: oben für Messwerte und Dokumente, oder im API-Endpoint eines Medikaments für genau dieses Medikament.",
|
||||
"tokenNamePlaceholder": "Token-Name (z.B. iPhone Shortcut)",
|
||||
"tokenNamePlaceholder": "Token-Name (z. B. iPhone Shortcut)",
|
||||
"tokenCreated": "Token erstellt — kopiere ihn jetzt! Er wird nicht erneut angezeigt.",
|
||||
"tokenCopy": "Token kopieren",
|
||||
"tokenCopied": "Token in die Zwischenablage kopiert",
|
||||
@@ -8588,7 +8586,7 @@
|
||||
"noActiveMedications": "Keine aktiven Medikamente gefunden.",
|
||||
"whichMedication": "<b>Welches Medikament eingenommen?</b>",
|
||||
"cancelButton": "Abbrechen",
|
||||
"askMedicationName": "Bitte Medikament angeben, z.B. <b>genommen Ramipril</b>.",
|
||||
"askMedicationName": "Bitte Medikament angeben, z. B. <b>genommen Ramipril</b>.",
|
||||
"medicationNotFoundExact": "Medikament nicht gefunden. Bitte Namen exakt wie in HealthLog senden.",
|
||||
"helpHeader": "<b>Verfügbare Befehle:</b>",
|
||||
"helpBody": "/help — Diese Hilfe anzeigen\n/add — Einnahme erfassen\n/start — Bot starten\n\n<b>Textbefehle:</b>\ngenommen <Name> — Einnahme bestätigen\n\n<b>Über die Buttons in Erinnerungen:</b>\n• Genommen — Einnahme bestätigen\n• 🕐 1h / 🕐 3h — Erinnerung verschieben\n• ⏭ Überspringen — Einnahme überspringen\n• ✓ Bestätigen — Verpasste Einnahme bestätigen",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "Unlesbares Symptom",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "Symptom erfassen",
|
||||
"sheetDescription": "Eines deiner eigenen Symptome, wie stark und wann.",
|
||||
"symptom": "Symptom",
|
||||
"symptomRequired": "Wähle ein Symptom.",
|
||||
|
||||
@@ -463,7 +463,6 @@
|
||||
"signOut": "Sign out and accept the invitation"
|
||||
},
|
||||
"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",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "Log life event",
|
||||
"customizeDashboard": "Customize dashboard",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "Log medication intake",
|
||||
"sheetDescription": "Record dose, time, and medication in a few taps.",
|
||||
"medicationLabel": "Medication",
|
||||
"medicationPlaceholder": "Select a medication",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "Unreadable symptom",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "Log symptom",
|
||||
"sheetDescription": "One of your own symptoms, how strong and when.",
|
||||
"symptom": "Symptom",
|
||||
"symptomRequired": "Choose a symptom.",
|
||||
|
||||
@@ -463,7 +463,6 @@
|
||||
"signOut": "Cerrar sesión y aceptar la invitación"
|
||||
},
|
||||
"createAccount": "Crear cuenta",
|
||||
"newAccount": "Crear cuenta nueva",
|
||||
"backToPasskey": "Volver a passkey",
|
||||
"passkeySetupLater": "Puedes configurar passkeys más tarde en los ajustes.",
|
||||
"passwordMinLength": "Mín. 12 caracteres",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "Registrar acontecimiento vital",
|
||||
"customizeDashboard": "Personalizar panel",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "Registrar toma de medicación",
|
||||
"sheetDescription": "Registra dosis, hora y medicamento en unos pocos toques.",
|
||||
"medicationLabel": "Medicamento",
|
||||
"medicationPlaceholder": "Selecciona un medicamento",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "Síntoma ilegible",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "Registrar síntoma",
|
||||
"sheetDescription": "Uno de tus propios síntomas, su intensidad y cuándo.",
|
||||
"symptom": "Síntoma",
|
||||
"symptomRequired": "Elige un síntoma.",
|
||||
|
||||
@@ -463,7 +463,6 @@
|
||||
"signOut": "Se déconnecter et accepter l'invitation"
|
||||
},
|
||||
"createAccount": "Créer un compte",
|
||||
"newAccount": "Créer un nouveau compte",
|
||||
"backToPasskey": "Revenir à la passkey",
|
||||
"passkeySetupLater": "Tu peux configurer les passkeys plus tard dans les paramètres.",
|
||||
"passwordMinLength": "Min. 12 caractères",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "Enregistrer un événement de vie",
|
||||
"customizeDashboard": "Personnaliser le tableau de bord",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "Saisir une prise de médicament",
|
||||
"sheetDescription": "Enregistre la dose, l’heure et le médicament en quelques touches.",
|
||||
"medicationLabel": "Médicament",
|
||||
"medicationPlaceholder": "Sélectionner un médicament",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "Symptôme illisible",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "Noter un symptôme",
|
||||
"sheetDescription": "L'un de tes propres symptômes, son intensité et quand.",
|
||||
"symptom": "Symptôme",
|
||||
"symptomRequired": "Choisis un symptôme.",
|
||||
|
||||
@@ -463,7 +463,6 @@
|
||||
"signOut": "Esci e accetta l'invito"
|
||||
},
|
||||
"createAccount": "Crea account",
|
||||
"newAccount": "Crea un nuovo account",
|
||||
"backToPasskey": "Torna a passkey",
|
||||
"passkeySetupLater": "Puoi configurare le passkey più tardi dalle impostazioni.",
|
||||
"passwordMinLength": "Min. 12 caratteri",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "Registra evento di vita",
|
||||
"customizeDashboard": "Personalizza dashboard",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "Registra assunzione del farmaco",
|
||||
"sheetDescription": "Registra dose, orario e farmaco con pochi tap.",
|
||||
"medicationLabel": "Farmaco",
|
||||
"medicationPlaceholder": "Seleziona un farmaco",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "Sintomo illeggibile",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "Registra sintomo",
|
||||
"sheetDescription": "Uno dei tuoi sintomi, quanto forte e quando.",
|
||||
"symptom": "Sintomo",
|
||||
"symptomRequired": "Scegli un sintomo.",
|
||||
|
||||
@@ -463,7 +463,6 @@
|
||||
"signOut": "로그아웃하고 초대 수락하기"
|
||||
},
|
||||
"createAccount": "계정 만들기",
|
||||
"newAccount": "새 계정 만들기",
|
||||
"backToPasskey": "패스키로 돌아가기",
|
||||
"passkeySetupLater": "패스키는 설정에서 언제든 등록할 수 있어요.",
|
||||
"passwordMinLength": "최소 12자",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "삶의 사건 기록",
|
||||
"customizeDashboard": "대시보드 맞춤 설정",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "복용 기록",
|
||||
"sheetDescription": "몇 번의 탭으로 약과 용량, 시각을 기록해요.",
|
||||
"medicationLabel": "약",
|
||||
"medicationPlaceholder": "약 선택",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "읽을 수 없는 증상",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "증상 기록",
|
||||
"sheetDescription": "직접 정한 증상과 강도, 시각을 기록합니다.",
|
||||
"symptom": "증상",
|
||||
"symptomRequired": "증상을 선택하세요.",
|
||||
|
||||
@@ -463,7 +463,6 @@
|
||||
"signOut": "Wyloguj się i przyjmij zaproszenie"
|
||||
},
|
||||
"createAccount": "Utwórz konto",
|
||||
"newAccount": "Utwórz nowe konto",
|
||||
"backToPasskey": "Wróć do passkey",
|
||||
"passkeySetupLater": "Passkey możesz skonfigurować później w ustawieniach.",
|
||||
"passwordMinLength": "Min. 12 znaków",
|
||||
@@ -583,7 +582,6 @@
|
||||
"quickAddLifeEvent": "Zapisz wydarzenie życiowe",
|
||||
"customizeDashboard": "Dostosuj pulpit",
|
||||
"medicationIntakeQuickAdd": {
|
||||
"sheetTitle": "Zarejestruj przyjęcie leku",
|
||||
"sheetDescription": "Zapisz dawkę, godzinę i lek w kilku stuknięciach.",
|
||||
"medicationLabel": "Lek",
|
||||
"medicationPlaceholder": "Wybierz lek",
|
||||
@@ -12118,7 +12116,6 @@
|
||||
"unreadableLabel": "Nieczytelny objaw",
|
||||
"intensityPill": "{value}/10",
|
||||
"entry": {
|
||||
"sheetTitle": "Zapisz objaw",
|
||||
"sheetDescription": "Jeden z twoich objawów, jak silny i kiedy.",
|
||||
"symptom": "Objaw",
|
||||
"symptomRequired": "Wybierz objaw.",
|
||||
|
||||
@@ -175,14 +175,11 @@ export default function RegisterPage() {
|
||||
<div className="bg-primary/10 flex h-12 w-12 items-center justify-center rounded-lg">
|
||||
<Logo className="text-primary" size={28} />
|
||||
</div>
|
||||
<div>
|
||||
<h1 className="text-xl font-bold tracking-tight">
|
||||
{t("auth.createAccount")}
|
||||
</h1>
|
||||
<p className="text-muted-foreground mt-1 text-sm">
|
||||
{t("auth.newAccount")}
|
||||
</p>
|
||||
</div>
|
||||
{/* The title says it; a subtitle repeating "new account" said it
|
||||
twice. */}
|
||||
<h1 className="text-xl font-bold tracking-tight">
|
||||
{t("auth.createAccount")}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
{inviteToken && (
|
||||
|
||||
@@ -182,7 +182,7 @@ export default function MeasurementsPage() {
|
||||
setReturnTo(null);
|
||||
}
|
||||
}}
|
||||
title={t("measurements.addMeasurement")}
|
||||
title={t("dashboard.quickAddMeasurement")}
|
||||
footer={<div ref={setFooterEl} className="flex w-full" />}
|
||||
>
|
||||
<MeasurementForm
|
||||
|
||||
@@ -183,6 +183,10 @@ describe("<DashboardHeader> — every entry follows its module, as the capture p
|
||||
`${kind} ${JSON.stringify(modules)}`,
|
||||
).toBe(picker.includes(kind));
|
||||
}
|
||||
// Same order as the picker, so the two ways in never disagree on
|
||||
// where an entry sits.
|
||||
const positions = picker.map((kind) => html.indexOf(label[kind]));
|
||||
expect(positions).toEqual([...positions].sort((x, y) => x - y));
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -190,12 +190,6 @@ export function DashboardHeader({
|
||||
{t("dashboard.quickAddMeasurement")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canAddMood && (
|
||||
<DropdownMenuItem onClick={() => onQuickEntry("mood")}>
|
||||
<Waves className="mr-2 h-4 w-4" aria-hidden="true" />
|
||||
{t("dashboard.quickAddMood")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{/* v1.4.37 W7b — third quick-add row: medication intake.
|
||||
Same Sheet-on-mobile / Dialog-on-desktop primitive as
|
||||
the other two; the menu label is a self-contained
|
||||
@@ -209,6 +203,12 @@ export function DashboardHeader({
|
||||
{t("dashboard.quickAddMedicationIntake")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canAddMood && (
|
||||
<DropdownMenuItem onClick={() => onQuickEntry("mood")}>
|
||||
<Waves className="mr-2 h-4 w-4" aria-hidden="true" />
|
||||
{t("dashboard.quickAddMood")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{canAddSymptom && (
|
||||
<DropdownMenuItem onClick={() => onQuickEntry("symptom")}>
|
||||
<Stethoscope className="mr-2 h-4 w-4" aria-hidden="true" />
|
||||
|
||||
@@ -203,7 +203,7 @@ export function QuickEntrySheets({
|
||||
<ResponsiveSheet
|
||||
open={openSheet === "measurement"}
|
||||
onOpenChange={handleQuickEntryOpenChange}
|
||||
title={t("measurements.addMeasurement")}
|
||||
title={t("dashboard.quickAddMeasurement")}
|
||||
footer={<div ref={setMeasurementFooterEl} className="flex w-full" />}
|
||||
>
|
||||
<MeasurementForm
|
||||
@@ -215,7 +215,7 @@ export function QuickEntrySheets({
|
||||
<ResponsiveSheet
|
||||
open={openSheet === "mood"}
|
||||
onOpenChange={handleQuickEntryOpenChange}
|
||||
title={t("mood.addEntry")}
|
||||
title={t("dashboard.quickAddMood")}
|
||||
footer={<div ref={setMoodFooterEl} className="flex w-full" />}
|
||||
>
|
||||
<MoodForm
|
||||
@@ -231,7 +231,7 @@ export function QuickEntrySheets({
|
||||
<ResponsiveSheet
|
||||
open={openSheet === "medicationIntake"}
|
||||
onOpenChange={handleQuickEntryOpenChange}
|
||||
title={t("dashboard.medicationIntakeQuickAdd.sheetTitle")}
|
||||
title={t("dashboard.quickAddMedicationIntake")}
|
||||
description={t("dashboard.medicationIntakeQuickAdd.sheetDescription")}
|
||||
footer={
|
||||
<div ref={setMedicationIntakeFooterEl} className="flex w-full" />
|
||||
@@ -249,7 +249,7 @@ export function QuickEntrySheets({
|
||||
<ResponsiveSheet
|
||||
open={openSheet === "symptom"}
|
||||
onOpenChange={handleQuickEntryOpenChange}
|
||||
title={t("symptoms.entry.sheetTitle")}
|
||||
title={t("dashboard.quickAddSymptom")}
|
||||
description={t("symptoms.entry.sheetDescription")}
|
||||
footer={<div ref={setSymptomFooterEl} className="flex w-full" />}
|
||||
>
|
||||
@@ -267,7 +267,7 @@ export function QuickEntrySheets({
|
||||
<ResponsiveSheet
|
||||
open={openSheet === "workout"}
|
||||
onOpenChange={handleQuickEntryOpenChange}
|
||||
title={t("insights.workouts.manual.sheetTitle")}
|
||||
title={t("dashboard.quickAddWorkout")}
|
||||
description={t("insights.workouts.manual.sheetDescription")}
|
||||
footer={<div ref={setWorkoutFooterEl} className="flex w-full" />}
|
||||
>
|
||||
@@ -285,7 +285,7 @@ export function QuickEntrySheets({
|
||||
<ResponsiveSheet
|
||||
open={openSheet === "lifeEvent"}
|
||||
onOpenChange={handleQuickEntryOpenChange}
|
||||
title={t("lifeEvents.title")}
|
||||
title={t("dashboard.quickAddLifeEvent")}
|
||||
description={t("lifeEvents.subtitle")}
|
||||
footer={<div ref={setLifeEventFooterEl} className="flex w-full" />}
|
||||
>
|
||||
|
||||
@@ -263,18 +263,21 @@ export function CapturePicker({
|
||||
];
|
||||
const options = allOptions.filter((opt) => offered.includes(opt.kind));
|
||||
|
||||
// One title per kind, the same verb phrase the dashboard's add menu
|
||||
// shows, so the sheet names what is being logged wherever it opens from.
|
||||
const formTitleByKind: Record<CaptureKind, string> = {
|
||||
measurement: t("measurements.addMeasurement"),
|
||||
medication: t("nav.capture.medication"),
|
||||
mood: t("mood.addEntry"),
|
||||
symptom: t("symptoms.entry.sheetTitle"),
|
||||
workout: t("insights.workouts.manual.sheetTitle"),
|
||||
lifeEvent: t("lifeEvents.title"),
|
||||
measurement: t("dashboard.quickAddMeasurement"),
|
||||
medication: t("dashboard.quickAddMedicationIntake"),
|
||||
mood: t("dashboard.quickAddMood"),
|
||||
symptom: t("dashboard.quickAddSymptom"),
|
||||
workout: t("dashboard.quickAddWorkout"),
|
||||
lifeEvent: t("dashboard.quickAddLifeEvent"),
|
||||
};
|
||||
// `openKind === null` keeps the form sheet closed (the title is unread
|
||||
// then); the mood label is the harmless default, matching the prior
|
||||
// ternary's else branch.
|
||||
const formTitle = openKind ? formTitleByKind[openKind] : t("mood.addEntry");
|
||||
// then); the mood label is the harmless default.
|
||||
const formTitle = openKind
|
||||
? formTitleByKind[openKind]
|
||||
: t("dashboard.quickAddMood");
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
Reference in new issue
Block a user