mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-13 14:32:03 +00:00
Merge w11b/notifpolish into release/v1.19.0
This commit is contained in:
commit
6206f24774
7 files changed
+43
-61
No files matched your search
+7
-3
@@ -5688,8 +5688,6 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Benachrichtigungen",
|
||||
"breadcrumbInbox": "Benachrichtigungen",
|
||||
"breadcrumbChannels": "Benachrichtigungs-Kanäle",
|
||||
"eventColumn": "Ereignis",
|
||||
"subtitle": "Wähle aus, welche Benachrichtigungen du über welchen Kanal erhalten möchtest.",
|
||||
"loadError": "Benachrichtigungseinstellungen konnten nicht geladen werden.",
|
||||
@@ -5786,7 +5784,13 @@
|
||||
"eventCycleFertileSoon": "Fruchtbares Fenster steht bevor",
|
||||
"eventCycleFertileSoonDesc": "Wird einige Tage vor deinem geschätzten fruchtbaren Fenster gesendet, wenn dein Ziel die Empfängnis ist.",
|
||||
"eventMedicationLowStock": "Medikamentenvorrat niedrig",
|
||||
"eventMedicationLowStockDesc": "Wenn ein erfasster Vorrat weniger Tage abdeckt als deine Vorratsschwelle"
|
||||
"eventMedicationLowStockDesc": "Wenn ein erfasster Vorrat weniger Tage abdeckt als deine Vorratsschwelle",
|
||||
"eventCoachNudge": "Coach-Hinweis",
|
||||
"eventCoachNudgeDesc": "Gelegentlicher Hinweis deines Coaches, wenn deine jüngsten Verläufe einen Check-in nahelegen.",
|
||||
"eventMeasurementReminder": "Mess-Erinnerung",
|
||||
"eventMeasurementReminderDesc": "Wird gesendet, wenn eine erfasste Messung fällig ist.",
|
||||
"eventMedicationIntakeSync": "Einnahme-Synchronisierung",
|
||||
"eventMedicationIntakeSyncDesc": "Geräteübergreifende Aktualisierung, wenn eine Dosis protokolliert, eingenommen oder übersprungen wird."
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
|
||||
+7
-3
@@ -5688,8 +5688,6 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
"breadcrumbInbox": "Notifications",
|
||||
"breadcrumbChannels": "Notification channels",
|
||||
"eventColumn": "Event",
|
||||
"subtitle": "Choose which notifications you want to receive through which channel.",
|
||||
"loadError": "Notification preferences could not be loaded.",
|
||||
@@ -5786,7 +5784,13 @@
|
||||
"eventCycleFertileSoon": "Fertile window coming up",
|
||||
"eventCycleFertileSoonDesc": "Sent a few days before your estimated fertile window when your goal is trying to conceive.",
|
||||
"eventMedicationLowStock": "Medication stock low",
|
||||
"eventMedicationLowStockDesc": "When a tracked medication supply covers fewer days than your low-stock threshold"
|
||||
"eventMedicationLowStockDesc": "When a tracked medication supply covers fewer days than your low-stock threshold",
|
||||
"eventCoachNudge": "Coach nudge",
|
||||
"eventCoachNudgeDesc": "Occasional prompt from your Coach when your recent trends warrant a check-in.",
|
||||
"eventMeasurementReminder": "Measurement reminder",
|
||||
"eventMeasurementReminderDesc": "Sent when a tracked measurement is due.",
|
||||
"eventMedicationIntakeSync": "Medication intake sync",
|
||||
"eventMedicationIntakeSyncDesc": "Cross-device update when a dose is logged, taken or skipped."
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
|
||||
+7
-3
@@ -5688,8 +5688,6 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notificaciones",
|
||||
"breadcrumbInbox": "Notificaciones",
|
||||
"breadcrumbChannels": "Canales de notificación",
|
||||
"eventColumn": "Evento",
|
||||
"subtitle": "Elige qué notificaciones recibes y por qué canal.",
|
||||
"loadError": "No se han podido cargar los ajustes de notificación.",
|
||||
@@ -5786,7 +5784,13 @@
|
||||
"eventCycleFertileSoon": "Ventana fértil próxima",
|
||||
"eventCycleFertileSoonDesc": "Se envía unos días antes de tu ventana fértil estimada cuando tu objetivo es concebir.",
|
||||
"eventMedicationLowStock": "Existencias de medicación bajas",
|
||||
"eventMedicationLowStockDesc": "Cuando unas existencias registradas cubren menos días que tu umbral de existencias"
|
||||
"eventMedicationLowStockDesc": "Cuando unas existencias registradas cubren menos días que tu umbral de existencias",
|
||||
"eventCoachNudge": "Aviso del Coach",
|
||||
"eventCoachNudgeDesc": "Aviso ocasional de tu Coach cuando tus tendencias recientes justifican una revisión.",
|
||||
"eventMeasurementReminder": "Recordatorio de medición",
|
||||
"eventMeasurementReminderDesc": "Se envía cuando una medición registrada está pendiente.",
|
||||
"eventMedicationIntakeSync": "Sincronización de tomas",
|
||||
"eventMedicationIntakeSyncDesc": "Actualización entre dispositivos cuando se registra, toma u omite una dosis."
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
|
||||
+7
-3
@@ -5688,8 +5688,6 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
"breadcrumbInbox": "Notifications",
|
||||
"breadcrumbChannels": "Canaux de notification",
|
||||
"eventColumn": "Événement",
|
||||
"subtitle": "Choisis quelles notifications tu reçois et par quel canal.",
|
||||
"loadError": "Impossible de charger les paramètres de notification.",
|
||||
@@ -5786,7 +5784,13 @@
|
||||
"eventCycleFertileSoon": "Fenêtre fertile à venir",
|
||||
"eventCycleFertileSoonDesc": "Envoyé quelques jours avant votre fenêtre fertile estimée lorsque votre objectif est de concevoir.",
|
||||
"eventMedicationLowStock": "Stock de médicament faible",
|
||||
"eventMedicationLowStockDesc": "Quand un stock suivi couvre moins de jours que votre seuil de stock"
|
||||
"eventMedicationLowStockDesc": "Quand un stock suivi couvre moins de jours que votre seuil de stock",
|
||||
"eventCoachNudge": "Rappel du Coach",
|
||||
"eventCoachNudgeDesc": "Message ponctuel de votre Coach quand vos tendances récentes justifient un point.",
|
||||
"eventMeasurementReminder": "Rappel de mesure",
|
||||
"eventMeasurementReminderDesc": "Envoyé lorsqu'une mesure suivie est due.",
|
||||
"eventMedicationIntakeSync": "Synchronisation des prises",
|
||||
"eventMedicationIntakeSyncDesc": "Mise à jour entre appareils quand une dose est enregistrée, prise ou ignorée."
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
|
||||
+7
-3
@@ -5688,8 +5688,6 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifiche",
|
||||
"breadcrumbInbox": "Notifiche",
|
||||
"breadcrumbChannels": "Canali di notifica",
|
||||
"eventColumn": "Evento",
|
||||
"subtitle": "Scegli quali notifiche ricevere e su quale canale.",
|
||||
"loadError": "Impossibile caricare le impostazioni di notifica.",
|
||||
@@ -5786,7 +5784,13 @@
|
||||
"eventCycleFertileSoon": "Finestra fertile in arrivo",
|
||||
"eventCycleFertileSoonDesc": "Inviato alcuni giorni prima della finestra fertile stimata quando il tuo obiettivo è il concepimento.",
|
||||
"eventMedicationLowStock": "Scorte di farmaco in esaurimento",
|
||||
"eventMedicationLowStockDesc": "Quando una scorta tracciata copre meno giorni della tua soglia di scorte"
|
||||
"eventMedicationLowStockDesc": "Quando una scorta tracciata copre meno giorni della tua soglia di scorte",
|
||||
"eventCoachNudge": "Suggerimento del Coach",
|
||||
"eventCoachNudgeDesc": "Messaggio occasionale del tuo Coach quando gli andamenti recenti richiedono una verifica.",
|
||||
"eventMeasurementReminder": "Promemoria misurazione",
|
||||
"eventMeasurementReminderDesc": "Inviato quando una misurazione tracciata è in scadenza.",
|
||||
"eventMedicationIntakeSync": "Sincronizzazione assunzioni",
|
||||
"eventMedicationIntakeSyncDesc": "Aggiornamento tra dispositivi quando una dose viene registrata, assunta o saltata."
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
|
||||
+7
-3
@@ -5688,8 +5688,6 @@
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Powiadomienia",
|
||||
"breadcrumbInbox": "Powiadomienia",
|
||||
"breadcrumbChannels": "Kanały powiadomień",
|
||||
"eventColumn": "Zdarzenie",
|
||||
"subtitle": "Wybierz, które powiadomienia chcesz otrzymywać i którym kanałem.",
|
||||
"loadError": "Nie udało się załadować ustawień powiadomień.",
|
||||
@@ -5786,7 +5784,13 @@
|
||||
"eventCycleFertileSoon": "Zbliża się okno płodności",
|
||||
"eventCycleFertileSoonDesc": "Wysyłane kilka dni przed szacowanym oknem płodności, gdy Twoim celem jest poczęcie.",
|
||||
"eventMedicationLowStock": "Niski zapas leku",
|
||||
"eventMedicationLowStockDesc": "Gdy śledzony zapas leku wystarcza na mniej dni niż twój próg zapasu"
|
||||
"eventMedicationLowStockDesc": "Gdy śledzony zapas leku wystarcza na mniej dni niż twój próg zapasu",
|
||||
"eventCoachNudge": "Wskazówka Coacha",
|
||||
"eventCoachNudgeDesc": "Okazjonalna wskazówka od Coacha, gdy twoje ostatnie trendy wymagają sprawdzenia.",
|
||||
"eventMeasurementReminder": "Przypomnienie o pomiarze",
|
||||
"eventMeasurementReminderDesc": "Wysyłane, gdy śledzony pomiar jest wymagany.",
|
||||
"eventMedicationIntakeSync": "Synchronizacja przyjęć leku",
|
||||
"eventMedicationIntakeSyncDesc": "Aktualizacja między urządzeniami, gdy dawka zostanie zapisana, przyjęta lub pominięta."
|
||||
},
|
||||
"i18n": {
|
||||
"maintainershipBanner": {
|
||||
|
||||
@@ -7,13 +7,7 @@ import { Switch } from "@/components/ui/switch";
|
||||
import { Label } from "@/components/ui/label";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import Link from "next/link";
|
||||
import {
|
||||
Bell,
|
||||
ChevronRight,
|
||||
Loader2,
|
||||
Settings,
|
||||
AlertCircle,
|
||||
} from "lucide-react";
|
||||
import { Bell, Loader2, Settings, AlertCircle } from "lucide-react";
|
||||
import {
|
||||
EVENT_DEFAULT_ENABLED,
|
||||
type EventType,
|
||||
@@ -41,38 +35,6 @@ interface PreferencesData {
|
||||
eventTypes: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Breadcrumb strip for the notification surfaces. v1.4.33 IW7 introduced
|
||||
* this so the inbox (`/notifications`) and the channel-config section
|
||||
* (`/settings/notifications`) never read as the same page — the two names
|
||||
* used to collide as plain "Notifications" in both nav labels. The crumb
|
||||
* sits above the h1 on every render branch of this page (loading,
|
||||
* unauthenticated, error, empty, populated) so the user always sees the
|
||||
* disambiguation, even when the body content is a fallback state.
|
||||
*/
|
||||
function NotificationsBreadcrumb({ t }: { t: (key: string) => string }) {
|
||||
return (
|
||||
<nav aria-label="Breadcrumb" className="text-muted-foreground text-xs">
|
||||
<ol className="flex items-center gap-1">
|
||||
<li className="text-foreground font-medium">
|
||||
{t("notifications.breadcrumbInbox")}
|
||||
</li>
|
||||
<li aria-hidden="true">
|
||||
<ChevronRight className="h-3 w-3" />
|
||||
</li>
|
||||
<li>
|
||||
<Link
|
||||
href="/settings/notifications"
|
||||
className="hover:text-foreground underline-offset-2 hover:underline"
|
||||
>
|
||||
{t("notifications.breadcrumbChannels")}
|
||||
</Link>
|
||||
</li>
|
||||
</ol>
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
|
||||
/** Maps SCREAMING_SNAKE event type to translation key, e.g. MEDICATION_REMINDER → eventMedicationReminder */
|
||||
function eventTranslationKey(eventType: string): string {
|
||||
return (
|
||||
@@ -167,7 +129,6 @@ export default function NotificationsPage() {
|
||||
if (!isAuthenticated) {
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<NotificationsBreadcrumb t={t} />
|
||||
<h1 className="text-2xl font-bold tracking-tight">
|
||||
{t("notifications.title")}
|
||||
</h1>
|
||||
@@ -185,7 +146,6 @@ export default function NotificationsPage() {
|
||||
if (isError) {
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<NotificationsBreadcrumb t={t} />
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold tracking-tight">
|
||||
{t("notifications.title")}
|
||||
@@ -208,7 +168,6 @@ export default function NotificationsPage() {
|
||||
if (activeChannels.length === 0) {
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<NotificationsBreadcrumb t={t} />
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold tracking-tight">
|
||||
{t("notifications.title")}
|
||||
@@ -237,7 +196,6 @@ export default function NotificationsPage() {
|
||||
|
||||
return (
|
||||
<div className="space-y-6">
|
||||
<NotificationsBreadcrumb t={t} />
|
||||
<div>
|
||||
<h1 className="text-2xl font-bold tracking-tight">
|
||||
{t("notifications.title")}
|
||||
|
||||
Reference in new issue
Block a user