chore(meds): correct kebab comment + drop orphaned scheduling i18n keys

The medication-card kebab menu comment implied the GLP-1 "Log side
effect" item is reachable from the card. It is not wired on the
medications list page — both card variants there receive only the
edit / history / advanced handlers, so the item never renders. Side-
effect logging lives on the detail page's SideEffectsSection. Correct
the comment to match.

Remove the scheduling i18n key subtrees orphaned when the schedule
section and cadence-summary row left the card: section, loading,
loadFailed, editCta, reminders, cadenceViz, compliance, oneShot,
legacyWindow, plus detail.cadence.title. Dropped in lockstep across all
six locales; the still-live naturalLanguage / cadence / timesOfDay /
courseWindow keys stay.
This commit is contained in:
Marc-André Bombeck committed 2026-05-31 20:01:29 +02:00
1 parent 3a5e157d41
commit 039d402c9b
7 files changed
+9 -291

No files matched your search

-48
View File
@@ -642,45 +642,6 @@
}
},
"scheduling": {
"section": "Zeitplan",
"loading": "Lade Zeitplan-Daten",
"loadFailed": "Zeitplan-Daten konnten nicht geladen werden.",
"editCta": "Bearbeiten",
"reminders": {
"on": "Erinnerungen an",
"off": "Erinnerungen aus"
},
"cadenceViz": {
"title": "Letzte 30 Tage",
"ariaTimeline": "Dosis-Zeitstrahl der letzten 30 Tage",
"emptyState": "Im Zeitfenster sind keine Dosen geplant.",
"nextDoseLabel": "Nächste Dosis:",
"noNextDose": "Keine kommende Dosis geplant.",
"status": {
"taken": "Genommen",
"skipped": "Ausgelassen",
"missed": "Verpasst",
"upcoming": "Geplant"
}
},
"compliance": {
"title": "Adhärenz",
"noData": "Keine Daten",
"adherenceRate": "Adhärenz",
"currentStreak": "Aktuelle Serie",
"longestStreak": "Längste Serie",
"missedLast30": "Verpasst (30 T.)",
"unit": {
"days": "T.",
"doses": "Dosen"
},
"chips": {
"adherenceTooltip": "Anteil genommener Dosen im 30-Tage-Fenster (ausgelassene Dosen werden ausgenommen).",
"streakTooltip": "Aufeinanderfolgende Tage bis heute, an denen alle geplanten Dosen genommen oder bewusst ausgelassen wurden.",
"longestTooltip": "Längste durchgehende Serie im 30-Tage-Fenster.",
"missedTooltip": "Anzahl verpasster Dosen in den letzten 30 Tagen."
}
},
"naturalLanguage": {
"title": "Medikament beschreiben",
"description": "Beschreibe das Medikament in eigenen Worten — das Formular wird automatisch vorausgefüllt.",
@@ -786,14 +747,6 @@
"noEndDate": "Kein Enddatum",
"oneShotCaption": "(einmalige Dosis)",
"invalidRange": "Das Enddatum muss am oder nach dem Startdatum liegen."
},
"oneShot": {
"section": "Einmaldosis",
"collapseWarning": "Einmaldosis aktiv — alle weiteren Pläne wurden auf den ersten zusammengeführt."
},
"legacyWindow": {
"section": "Erinnerungsfenster (alt)",
"help": "Ältere Pläne nutzen noch ein Zeitfenster-Paar. Neue Pläne nutzen die Uhrzeiten oben — das Fenster bleibt aus Kompatibilitätsgründen erhalten und entfällt in einer späteren Version."
}
},
"wizard": {
@@ -1153,7 +1106,6 @@
"error": "Dosis konnte nicht erfasst werden."
},
"cadence": {
"title": "Rhythmus",
"oneShotOn": "Einmalige Dosis am {date}.",
"oneShotPending": "Einmalige Dosis ausstehend."
},
-48
View File
@@ -642,45 +642,6 @@
}
},
"scheduling": {
"section": "Schedule",
"loading": "Loading schedule data",
"loadFailed": "Schedule data failed to load.",
"editCta": "Edit",
"reminders": {
"on": "Reminders on",
"off": "Reminders off"
},
"cadenceViz": {
"title": "Last 30 days",
"ariaTimeline": "Dose timeline for the last 30 days",
"emptyState": "No doses scheduled in this window.",
"nextDoseLabel": "Next dose:",
"noNextDose": "No upcoming dose scheduled.",
"status": {
"taken": "Taken",
"skipped": "Skipped",
"missed": "Missed",
"upcoming": "Upcoming"
}
},
"compliance": {
"title": "Adherence",
"noData": "No data",
"adherenceRate": "Adherence",
"currentStreak": "Current streak",
"longestStreak": "Longest streak",
"missedLast30": "Missed (30 d.)",
"unit": {
"days": "d.",
"doses": "doses"
},
"chips": {
"adherenceTooltip": "Share of doses taken across the last 30 days (skipped doses are excluded from the denominator).",
"streakTooltip": "Consecutive days up to today on which every scheduled dose was taken or deliberately skipped.",
"longestTooltip": "Longest unbroken streak within the 30-day window.",
"missedTooltip": "Count of doses missed in the last 30 days."
}
},
"naturalLanguage": {
"title": "Describe your medication",
"description": "Write the medication in your own words and we will pre-fill the form for you.",
@@ -786,14 +747,6 @@
"noEndDate": "No end date",
"oneShotCaption": "(one-time dose)",
"invalidRange": "End date must be on or after the start date."
},
"oneShot": {
"section": "Single dose",
"collapseWarning": "Single dose enabled — every other schedule was merged into the first."
},
"legacyWindow": {
"section": "Reminder window (legacy)",
"help": "Older schedules still use a window pair. New schedules use times of day above — the window stays for backwards compatibility and is dropped in a future release."
}
},
"wizard": {
@@ -1153,7 +1106,6 @@
"error": "Could not log the dose."
},
"cadence": {
"title": "Cadence",
"oneShotOn": "One-time dose on {date}.",
"oneShotPending": "One-time dose pending."
},
-48
View File
@@ -642,45 +642,6 @@
}
},
"scheduling": {
"section": "Programa",
"loading": "Cargando datos del programa",
"loadFailed": "No se han podido cargar los datos del programa.",
"editCta": "Editar",
"reminders": {
"on": "Recordatorios activos",
"off": "Recordatorios desactivados"
},
"cadenceViz": {
"title": "Últimos 30 días",
"ariaTimeline": "Línea temporal de dosis de los últimos 30 días",
"emptyState": "No hay dosis programadas en este intervalo.",
"nextDoseLabel": "Próxima dosis:",
"noNextDose": "No hay ninguna dosis próxima programada.",
"status": {
"taken": "Tomada",
"skipped": "Omitida",
"missed": "Olvidada",
"upcoming": "Pendiente"
}
},
"compliance": {
"title": "Adherencia",
"noData": "Sin datos",
"adherenceRate": "Adherencia",
"currentStreak": "Racha actual",
"longestStreak": "Racha más larga",
"missedLast30": "Olvidadas (30 d.)",
"unit": {
"days": "d.",
"doses": "dosis"
},
"chips": {
"adherenceTooltip": "Proporción de dosis tomadas en los últimos 30 días (las dosis omitidas se excluyen del denominador).",
"streakTooltip": "Días consecutivos hasta hoy en los que se ha tomado o se ha omitido deliberadamente cada dosis programada.",
"longestTooltip": "Racha continua más larga dentro de la ventana de 30 días.",
"missedTooltip": "Número de dosis olvidadas en los últimos 30 días."
}
},
"naturalLanguage": {
"title": "Describe tu medicación",
"description": "Describe la medicación con tus propias palabras y completaremos el formulario por ti.",
@@ -786,14 +747,6 @@
"noEndDate": "No end date",
"oneShotCaption": "(one-time dose)",
"invalidRange": "End date must be on or after the start date."
},
"oneShot": {
"section": "Single dose",
"collapseWarning": "Single dose enabled — every other schedule was merged into the first."
},
"legacyWindow": {
"section": "Reminder window (legacy)",
"help": "Older schedules still use a window pair. New schedules use times of day above — the window stays for backwards compatibility and is dropped in a future release."
}
},
"wizard": {
@@ -1153,7 +1106,6 @@
"error": "Could not log the dose."
},
"cadence": {
"title": "Cadence",
"oneShotOn": "One-time dose on {date}.",
"oneShotPending": "One-time dose pending."
},
-48
View File
@@ -642,45 +642,6 @@
}
},
"scheduling": {
"section": "Calendrier",
"loading": "Chargement des données du calendrier",
"loadFailed": "Échec du chargement des données du calendrier.",
"editCta": "Modifier",
"reminders": {
"on": "Rappels activés",
"off": "Rappels désactivés"
},
"cadenceViz": {
"title": "30 derniers jours",
"ariaTimeline": "Chronologie des doses des 30 derniers jours",
"emptyState": "Aucune dose prévue sur cette période.",
"nextDoseLabel": "Prochaine dose :",
"noNextDose": "Aucune dose à venir programmée.",
"status": {
"taken": "Prise",
"skipped": "Sautée",
"missed": "Manquée",
"upcoming": "À venir"
}
},
"compliance": {
"title": "Observance",
"noData": "Aucune donnée",
"adherenceRate": "Observance",
"currentStreak": "Série en cours",
"longestStreak": "Série la plus longue",
"missedLast30": "Manquées (30 j.)",
"unit": {
"days": "j.",
"doses": "doses"
},
"chips": {
"adherenceTooltip": "Part des doses prises sur les 30 derniers jours (les doses sautées sont exclues du dénominateur).",
"streakTooltip": "Jours consécutifs jusqu'à aujourd'hui où chaque dose prévue a été prise ou volontairement sautée.",
"longestTooltip": "Série continue la plus longue sur la fenêtre de 30 jours.",
"missedTooltip": "Nombre de doses manquées au cours des 30 derniers jours."
}
},
"naturalLanguage": {
"title": "Décris ton médicament",
"description": "Décris le médicament avec tes propres mots et le formulaire sera pré-rempli pour toi.",
@@ -786,14 +747,6 @@
"noEndDate": "No end date",
"oneShotCaption": "(one-time dose)",
"invalidRange": "End date must be on or after the start date."
},
"oneShot": {
"section": "Single dose",
"collapseWarning": "Single dose enabled — every other schedule was merged into the first."
},
"legacyWindow": {
"section": "Reminder window (legacy)",
"help": "Older schedules still use a window pair. New schedules use times of day above — the window stays for backwards compatibility and is dropped in a future release."
}
},
"wizard": {
@@ -1153,7 +1106,6 @@
"error": "Could not log the dose."
},
"cadence": {
"title": "Cadence",
"oneShotOn": "One-time dose on {date}.",
"oneShotPending": "One-time dose pending."
},
-48
View File
@@ -642,45 +642,6 @@
}
},
"scheduling": {
"section": "Programma",
"loading": "Caricamento dei dati del programma",
"loadFailed": "Impossibile caricare i dati del programma.",
"editCta": "Modifica",
"reminders": {
"on": "Promemoria attivi",
"off": "Promemoria disattivati"
},
"cadenceViz": {
"title": "Ultimi 30 giorni",
"ariaTimeline": "Cronologia delle dosi degli ultimi 30 giorni",
"emptyState": "Nessuna dose programmata in questo intervallo.",
"nextDoseLabel": "Prossima dose:",
"noNextDose": "Nessuna dose programmata in arrivo.",
"status": {
"taken": "Assunta",
"skipped": "Saltata",
"missed": "Mancata",
"upcoming": "In arrivo"
}
},
"compliance": {
"title": "Aderenza",
"noData": "Nessun dato",
"adherenceRate": "Aderenza",
"currentStreak": "Serie attuale",
"longestStreak": "Serie più lunga",
"missedLast30": "Mancate (30 g.)",
"unit": {
"days": "gg.",
"doses": "dosi"
},
"chips": {
"adherenceTooltip": "Quota di dosi assunte negli ultimi 30 giorni (le dosi saltate sono escluse dal denominatore).",
"streakTooltip": "Giorni consecutivi fino a oggi in cui ogni dose programmata è stata assunta o deliberatamente saltata.",
"longestTooltip": "Serie continua più lunga nella finestra di 30 giorni.",
"missedTooltip": "Numero di dosi mancate negli ultimi 30 giorni."
}
},
"naturalLanguage": {
"title": "Descrivi il farmaco",
"description": "Descrivi il farmaco con parole tue e il modulo verrà precompilato per te.",
@@ -786,14 +747,6 @@
"noEndDate": "No end date",
"oneShotCaption": "(one-time dose)",
"invalidRange": "End date must be on or after the start date."
},
"oneShot": {
"section": "Single dose",
"collapseWarning": "Single dose enabled — every other schedule was merged into the first."
},
"legacyWindow": {
"section": "Reminder window (legacy)",
"help": "Older schedules still use a window pair. New schedules use times of day above — the window stays for backwards compatibility and is dropped in a future release."
}
},
"wizard": {
@@ -1153,7 +1106,6 @@
"error": "Could not log the dose."
},
"cadence": {
"title": "Cadence",
"oneShotOn": "One-time dose on {date}.",
"oneShotPending": "One-time dose pending."
},
-48
View File
@@ -642,45 +642,6 @@
}
},
"scheduling": {
"section": "Harmonogram",
"loading": "Wczytywanie danych harmonogramu",
"loadFailed": "Nie udało się wczytać danych harmonogramu.",
"editCta": "Edytuj",
"reminders": {
"on": "Przypomnienia włączone",
"off": "Przypomnienia wyłączone"
},
"cadenceViz": {
"title": "Ostatnie 30 dni",
"ariaTimeline": "Oś czasu dawek z ostatnich 30 dni",
"emptyState": "Brak zaplanowanych dawek w tym oknie.",
"nextDoseLabel": "Następna dawka:",
"noNextDose": "Brak zaplanowanej nadchodzącej dawki.",
"status": {
"taken": "Przyjęta",
"skipped": "Pominięta",
"missed": "Niepodjęta",
"upcoming": "Nadchodząca"
}
},
"compliance": {
"title": "Adherencja",
"noData": "Brak danych",
"adherenceRate": "Adherencja",
"currentStreak": "Bieżąca seria",
"longestStreak": "Najdłuższa seria",
"missedLast30": "Pominięte (30 d.)",
"unit": {
"days": "d.",
"doses": "dawek"
},
"chips": {
"adherenceTooltip": "Udział dawek przyjętych w ostatnich 30 dniach (pominięte dawki są wyłączone z mianownika).",
"streakTooltip": "Kolejne dni do dziś, w których każda zaplanowana dawka została przyjęta lub świadomie pominięta.",
"longestTooltip": "Najdłuższa nieprzerwana seria w 30-dniowym oknie.",
"missedTooltip": "Liczba dawek pominiętych w ostatnich 30 dniach."
}
},
"naturalLanguage": {
"title": "Opisz lek",
"description": "Opisz lek własnymi słowami, a my wstępnie wypełnimy formularz za Ciebie.",
@@ -786,14 +747,6 @@
"noEndDate": "No end date",
"oneShotCaption": "(one-time dose)",
"invalidRange": "End date must be on or after the start date."
},
"oneShot": {
"section": "Single dose",
"collapseWarning": "Single dose enabled — every other schedule was merged into the first."
},
"legacyWindow": {
"section": "Reminder window (legacy)",
"help": "Older schedules still use a window pair. New schedules use times of day above — the window stays for backwards compatibility and is dropped in a future release."
}
},
"wizard": {
@@ -1153,7 +1106,6 @@
"error": "Could not log the dose."
},
"cadence": {
"title": "Cadence",
"oneShotOn": "One-time dose on {date}.",
"oneShotPending": "One-time dose pending."
},
@@ -8,9 +8,15 @@
* / advanced) into a single overflow kebab so the card header carries one
* affordance instead of a cluster. The card body itself navigates to the
* detail page (the former chevron target); this menu owns the edit /
* history / advanced actions. The GLP-1 card folds its "Log side effect"
* item into the SAME menu via the optional `onLogSideEffect` slot so the
* two card variants stay byte-symmetric in the header.
* history / advanced actions.
*
* The optional `onLogSideEffect` slot exists for the GLP-1 card to fold a
* "Log side effect" item into the SAME menu, but it is NOT wired on the
* medications list page — both card variants there receive only the
* edit / history / advanced handlers, so the item never renders. Side-
* effect logging lives on the detail page's `<SideEffectsSection>`. When
* the slot is left undefined the two card variants stay byte-symmetric in
* the header (one kebab, identical items).
*
* The trigger is a 44px ghost icon-button (WCAG 2.5.5); every
* `DropdownMenuItem` already carries `min-h-11` from the shadcn