diff --git a/messages/de.json b/messages/de.json index 13fe46be9..c4e0a4ea5 100644 --- a/messages/de.json +++ b/messages/de.json @@ -228,7 +228,7 @@ "logout": "Abmelden", "login": "Anmelden", "notifications": "Benachrichtigungen", - "theme": "Darstellung", + "theme": "Design", "themeSystem": "System", "themeDark": "Dunkel", "themeLight": "Hell", @@ -605,6 +605,7 @@ "mood": { "title": "Stimmung", "subtitle": "Stimmungsverlauf und Einträge", + "mentalWellbeingLink": "Check-in zum seelischen Wohlbefinden machen", "addEntry": "Hinzufügen", "editEntry": "Eintrag bearbeiten", "moodLevel": "Stimmung", @@ -2894,7 +2895,7 @@ "sleep": { "title": "Noch keine Schlafwerte", "description": "Sobald Schlafdaten vorliegen (manuell oder via Withings / Apple Health), erscheint hier der nächtliche Stadien-Verlauf.", - "cta": "Withings verbinden" + "cta": "Quelle verbinden" } }, "navWorkouts": "Workouts", @@ -3262,6 +3263,8 @@ }, "navWalkingSpeed": "Gehgeschwindigkeit", "mood": { + "logLink": "Stimmung eintragen", + "mentalWellbeingLink": "Check-in zum seelischen Wohlbefinden machen", "heatmapTitle": "Stimmungskalender", "heatmapNoEntry": "Kein Eintrag", "legendGreat": "Super", @@ -3550,7 +3553,8 @@ "sectionSubtitle": "Zusammengesetzte Werte für Erholung, Stress und Belastung aus deinen verbundenen Geräten", "loadError": "Deine Wellness-Werte konnten gerade nicht geladen werden.", "loadingLabel": "Deine Gesundheitswerte werden geladen", - "recovery": "Erholung", + "recovery": "Erholungs-Score", + "recoveryCrossLink": "Erholungs- und Belastungsdaten deines Wearables ansehen", "stress": "Stress", "strain": "Belastung" }, @@ -3721,6 +3725,7 @@ "recovery": { "title": "Erholung", "description": "Wie gut sich dein Körper erholt hat – die Erholungs-, Belastungs- und Load-Signale, die dein Wearable über Nacht aufzeichnet.", + "scoreCrossLink": "Den zusammengesetzten Erholungs-Score ansehen", "emptyTitle": "Noch keine Erholungsdaten", "empty": "Noch keine Erholungsdaten. Verbinde ein WHOOP-, Polar- oder Oura-Konto, dann füllen sich diese Werte, sobald dein Gerät synchronisiert.", "block": { @@ -4009,7 +4014,7 @@ }, "wrapUp": { "title": "Das war die Tour", - "body": "Du kannst jedes Modul jederzeit einzeln erneut ansehen („Diese Tour zeigen“ auf jeder Seite) oder die komplette Tour unter Einstellungen → Erweitert neu starten." + "body": "Diese Führung läuft einmalig – sie öffnet sich nicht von selbst erneut. Alles Gezeigte bleibt erhalten, und du kannst Funktionen jederzeit unter Einstellungen → Module ein- oder ausschalten." } } }, @@ -4084,7 +4089,8 @@ "learning": "Manche Einblicke – Glukose, Schlafrhythmus, Blutdrucktrends, Zyklus – schärfen sich in den ersten ein bis zwei Wochen, sobald sich deine Daten ansammeln. Leere Kacheln heißen jetzt nur, dass wir deine Basislinie noch lernen.", "connectCta": "Gerät verbinden", "logCta": "Ersten Wert eintragen", - "importCta": "Bestehende Daten importieren" + "importCta": "Bestehende Daten importieren", + "modulesCta": "Module auswählen" }, "welcomeBack": { "title": "Willkommen zurück", @@ -4549,7 +4555,7 @@ "description": "Strukturierte Datensätze zu Allergien und Familienanamnese." }, "environment": { - "title": "Umwelt", + "title": "Standort & Wetter", "subtitle": "Wetter, Tageslicht und Standort-Kontext.", "disabledHint": "Aktiviere das Umwelt-Modul, um einen Heimatort festzulegen und tägliches Wetter und Tageslicht abzurufen.", "searchPlaceholder": "Stadt suchen", @@ -7959,6 +7965,7 @@ "mentalHealth": { "pageTitle": "Seelisches Wohlbefinden", "pageDescription": "Vier validierte, freiwillige Selbsttests — PHQ-9 (Stimmung), GAD-7 (Sorgen), WHO-5 (Wohlbefinden) und SCI (Schlaf) — ergänzend zu deinem Stimmungstagebuch. Aussagekräftig ist der Verlauf über die Zeit, nicht ein einzelner Wert.", + "moodLink": "Deinen Stimmungsverlauf ansehen", "attributionLabel": "Quelle", "attributionShow": "Quelle und Lizenz für {instrument}", "choosePrompt": "Check-in auswählen", @@ -8404,7 +8411,8 @@ "noConditions": "Mit keiner Erkrankung verknüpft", "previewUnavailable": "Keine Inline-Vorschau für diesen Dateityp", "uploadedMeta": "Hinzugefügt am {date} · {size}", - "share": "Teilen" + "share": "Teilen", + "labValuesLink": "{count} Laborwerte ansehen" }, "dropOverlay": { "title": "Zum Hochladen ablegen", @@ -8666,7 +8674,9 @@ "coachCheckin": { "title": "Zeit, einen Plan anzuschauen", "body": "Es ist etwa eine Woche her, seit du diesen Plan gesetzt hast — behalte ihn, passe ihn an oder lass ihn los. Ganz ohne Druck.", - "bodyPlan": "Vor etwa einer Woche hast du dir vorgenommen: „{plan}“. Behalte es, passe es an oder lass es los — ganz ohne Druck." + "bodyPlan": "Vor etwa einer Woche hast du dir vorgenommen: „{plan}“. Behalte es, passe es an oder lass es los — ganz ohne Druck.", + "adjustPrompt": "Ich möchte meinen Check-in-Plan anpassen.", + "adjustPromptPlan": "Ich möchte diesen Plan anpassen: „{plan}“" }, "tensionWindow": { "title": "Vielleicht eine angespannte Phase", diff --git a/messages/en.json b/messages/en.json index 82501a4bb..f6bc18f83 100644 --- a/messages/en.json +++ b/messages/en.json @@ -228,7 +228,7 @@ "logout": "Sign out", "login": "Sign in", "notifications": "Notifications", - "theme": "Appearance", + "theme": "Theme", "themeSystem": "System", "themeDark": "Dark", "themeLight": "Light", @@ -605,6 +605,7 @@ "mood": { "title": "Mood", "subtitle": "Mood tracker and entries", + "mentalWellbeingLink": "Take a mental-wellbeing check-in", "addEntry": "Add", "editEntry": "Edit entry", "moodLevel": "Mood", @@ -2894,7 +2895,7 @@ "sleep": { "title": "No sleep entries yet", "description": "Once sleep data lands (manual or via Withings / Apple Health), the per-night stage breakdown will appear here.", - "cta": "Connect Withings" + "cta": "Connect a source" } }, "navWorkouts": "Workouts", @@ -3262,6 +3263,8 @@ }, "navWalkingSpeed": "Walking Speed", "mood": { + "logLink": "Log a mood entry", + "mentalWellbeingLink": "Take a mental-wellbeing check-in", "heatmapTitle": "Mood calendar", "heatmapNoEntry": "No entry", "legendGreat": "Great", @@ -3550,7 +3553,8 @@ "sectionSubtitle": "Composite recovery, stress and strain read from your connected devices", "loadError": "Could not load your wellness scores right now.", "loadingLabel": "Loading your health scores", - "recovery": "Recovery", + "recovery": "Recovery score", + "recoveryCrossLink": "See your wearable's recovery & strain data", "stress": "Stress", "strain": "Strain" }, @@ -3721,6 +3725,7 @@ "recovery": { "title": "Recovery", "description": "How well your body has bounced back — the recovery, strain and load signals your wearable records overnight.", + "scoreCrossLink": "See the composite recovery score", "emptyTitle": "No recovery data yet", "empty": "No recovery data yet. Connect a WHOOP, Polar or Oura account and these scores fill in once your device syncs.", "block": { @@ -4009,7 +4014,7 @@ }, "wrapUp": { "title": "That’s the tour", - "body": "You can revisit any module on its own at any time (“Show this tour” on every page) or restart the whole tour under Settings → Advanced." + "body": "This walkthrough runs once — it won't reopen on its own. Everything it covered stays put, and you can turn features on or off any time under Settings → Modules." } } }, @@ -4084,7 +4089,8 @@ "learning": "Some insights — glucose, sleep rhythm, blood-pressure trends, cycle — sharpen over the first week or two as your data builds up. Empty tiles now just mean we're still learning your baseline.", "connectCta": "Connect a device", "logCta": "Log your first measurement", - "importCta": "Import existing history" + "importCta": "Import existing history", + "modulesCta": "Choose your modules" }, "welcomeBack": { "title": "Welcome back", @@ -4549,7 +4555,7 @@ "description": "Structured allergies and family history records." }, "environment": { - "title": "Environment", + "title": "Location & weather", "subtitle": "Weather, daylight, and location context.", "disabledHint": "Turn on the Environment module to set a home location and pull in daily weather and daylight.", "searchPlaceholder": "Search for a city", @@ -7959,6 +7965,7 @@ "mentalHealth": { "pageTitle": "Mental wellbeing", "pageDescription": "Validated, opt-in self-checks — PHQ-9 (mood), GAD-7 (worry), WHO-5 (well-being) and SCI (sleep) — that sit beside your mood tracking. The value is the trend over time, not any single number.", + "moodLink": "View your mood history", "attributionLabel": "Attribution", "attributionShow": "Source and licence for {instrument}", "choosePrompt": "Choose a check-in", @@ -8404,7 +8411,8 @@ "noConditions": "Not linked to a condition", "previewUnavailable": "No inline preview for this file type", "uploadedMeta": "Added {date} · {size}", - "share": "Share" + "share": "Share", + "labValuesLink": "View {count} lab values" }, "dropOverlay": { "title": "Drop files to upload", @@ -8666,7 +8674,9 @@ "coachCheckin": { "title": "Time to check in on a plan", "body": "It's been about a week since you set this plan — keep it, adjust it, or let it go. No pressure either way.", - "bodyPlan": "About a week ago you set: “{plan}”. Keep it, adjust it, or let it go — no pressure either way." + "bodyPlan": "About a week ago you set: “{plan}”. Keep it, adjust it, or let it go — no pressure either way.", + "adjustPrompt": "I'd like to adjust my check-in plan.", + "adjustPromptPlan": "I'd like to adjust this plan: “{plan}”" }, "tensionWindow": { "title": "Possible tension today", diff --git a/messages/es.json b/messages/es.json index fc6cbd9c5..8d741a5b9 100644 --- a/messages/es.json +++ b/messages/es.json @@ -228,7 +228,7 @@ "logout": "Cerrar sesión", "login": "Iniciar sesión", "notifications": "Notificaciones", - "theme": "Apariencia", + "theme": "Tema", "themeSystem": "Sistema", "themeDark": "Oscuro", "themeLight": "Claro", @@ -605,6 +605,7 @@ "mood": { "title": "Estado de ánimo", "subtitle": "Tendencia y registros de estado de ánimo", + "mentalWellbeingLink": "Hacer un chequeo de bienestar mental", "addEntry": "Añadir", "editEntry": "Editar entrada", "moodLevel": "Estado de ánimo", @@ -2894,7 +2895,7 @@ "sleep": { "title": "Aún no hay registros de sueño", "description": "Una vez disponibles los datos de sueño (manual o vía Withings / Apple Health), aquí aparecerá el desglose por fases.", - "cta": "Conectar Withings" + "cta": "Conectar una fuente" } }, "navWorkouts": "Entrenamientos", @@ -3262,6 +3263,8 @@ }, "navWalkingSpeed": "Velocidad al andar", "mood": { + "logLink": "Registrar un estado de ánimo", + "mentalWellbeingLink": "Hacer un chequeo de bienestar mental", "heatmapTitle": "Calendario de ánimo", "heatmapNoEntry": "Sin registro", "legendGreat": "Genial", @@ -3550,7 +3553,8 @@ "sectionSubtitle": "Valores combinados de recuperación, estrés y esfuerzo leídos de tus dispositivos conectados", "loadError": "No se pudieron cargar tus puntuaciones de bienestar en este momento.", "loadingLabel": "Cargando tus indicadores de salud", - "recovery": "Recuperación", + "recovery": "Puntuación de recuperación", + "recoveryCrossLink": "Ver los datos de recuperación y esfuerzo de tu wearable", "stress": "Estrés", "strain": "Esfuerzo" }, @@ -3721,6 +3725,7 @@ "recovery": { "title": "Recuperación", "description": "Cómo se ha recuperado tu cuerpo: las señales de recuperación, esfuerzo y carga que tu wearable registra durante la noche.", + "scoreCrossLink": "Ver la puntuación de recuperación combinada", "emptyTitle": "Aún no hay datos de recuperación", "empty": "Aún no hay datos de recuperación. Conecta una cuenta de WHOOP, Polar u Oura y estas puntuaciones se completarán cuando tu dispositivo sincronice.", "block": { @@ -4009,7 +4014,7 @@ }, "wrapUp": { "title": "Esto es la visita", - "body": "Puedes volver a ver cualquier módulo por separado cuando quieras («Mostrar esta visita» en cada página) o reiniciar la visita completa en Ajustes → Avanzado." + "body": "Esta visita guiada se muestra una sola vez, no volverá a abrirse por sí sola. Todo lo que has visto sigue disponible, y puedes activar o desactivar funciones cuando quieras en Ajustes → Módulos." } } }, @@ -4084,7 +4089,8 @@ "learning": "Algunas conclusiones —glucosa, ritmo de sueño, tendencias de presión arterial, ciclo— se afinan durante la primera semana o dos a medida que se acumulan tus datos. Las casillas vacías ahora solo significan que aún estamos aprendiendo tu línea base.", "connectCta": "Conectar un dispositivo", "logCta": "Registra tu primera medición", - "importCta": "Importar historial existente" + "importCta": "Importar historial existente", + "modulesCta": "Elige tus módulos" }, "welcomeBack": { "title": "Bienvenido de nuevo", @@ -4549,7 +4555,7 @@ "description": "Registros estructurados de alergias y antecedentes familiares." }, "environment": { - "title": "Entorno", + "title": "Ubicación y clima", "subtitle": "Contexto de tiempo, luz diurna y ubicación.", "disabledHint": "Activa el módulo Entorno para definir una ubicación principal e incorporar el tiempo y las horas de luz diarias.", "searchPlaceholder": "Buscar una ciudad", @@ -7959,6 +7965,7 @@ "mentalHealth": { "pageTitle": "Bienestar mental", "pageDescription": "Cuatro autoevaluaciones validadas y opcionales — PHQ-9 (estado de ánimo), GAD-7 (preocupación), WHO-5 (bienestar) y SCI (sueño) — junto a tu registro de ánimo. Lo valioso es la tendencia en el tiempo, no un único número.", + "moodLink": "Ver tu historial de estado de ánimo", "attributionLabel": "Fuente", "attributionShow": "Fuente y licencia de {instrument}", "choosePrompt": "Elige una revisión", @@ -8404,7 +8411,8 @@ "noConditions": "Sin vincular a una afección", "previewUnavailable": "Sin vista previa integrada para este tipo de archivo", "uploadedMeta": "Añadido el {date} · {size}", - "share": "Compartir" + "share": "Compartir", + "labValuesLink": "Ver {count} valores de laboratorio" }, "dropOverlay": { "title": "Suelta los archivos para subirlos", @@ -8666,7 +8674,9 @@ "coachCheckin": { "title": "Es buen momento para revisar un plan", "body": "Ha pasado alrededor de una semana desde que definiste este plan: consérvalo, ajústalo o déjalo ir. Sin presión.", - "bodyPlan": "Hace aproximadamente una semana te propusiste: «{plan}». Consérvalo, ajústalo o déjalo ir, sin presión." + "bodyPlan": "Hace aproximadamente una semana te propusiste: «{plan}». Consérvalo, ajústalo o déjalo ir, sin presión.", + "adjustPrompt": "Me gustaría ajustar mi plan de seguimiento.", + "adjustPromptPlan": "Me gustaría ajustar este plan: «{plan}»" }, "tensionWindow": { "title": "Quizá algo de tensión hoy", diff --git a/messages/fr.json b/messages/fr.json index e5839646e..1de8e7e72 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -228,7 +228,7 @@ "logout": "Se déconnecter", "login": "Se connecter", "notifications": "Notifications", - "theme": "Apparence", + "theme": "Thème", "themeSystem": "Système", "themeDark": "Sombre", "themeLight": "Clair", @@ -605,6 +605,7 @@ "mood": { "title": "Humeur", "subtitle": "Tendance et entrées d’humeur", + "mentalWellbeingLink": "Faire un bilan de bien-être mental", "addEntry": "Ajouter", "editEntry": "Modifier l’entrée", "moodLevel": "Humeur", @@ -2894,7 +2895,7 @@ "sleep": { "title": "Aucune donnée de sommeil", "description": "Dès que des données de sommeil sont disponibles (manuel ou via Withings / Apple Health), la répartition par stade apparaîtra ici.", - "cta": "Connecter Withings" + "cta": "Connecter une source" } }, "navWorkouts": "Entraînements", @@ -3262,6 +3263,8 @@ }, "navWalkingSpeed": "Vitesse de marche", "mood": { + "logLink": "Enregistrer une humeur", + "mentalWellbeingLink": "Faire un bilan de bien-être mental", "heatmapTitle": "Calendrier d'humeur", "heatmapNoEntry": "Aucune entrée", "legendGreat": "Excellent", @@ -3550,7 +3553,8 @@ "sectionSubtitle": "Valeurs combinées de récupération, de stress et d'effort issues de tes appareils connectés", "loadError": "Impossible de charger vos scores de bien-être pour le moment.", "loadingLabel": "Chargement de tes indicateurs de santé", - "recovery": "Récupération", + "recovery": "Score de récupération", + "recoveryCrossLink": "Voir les données de récupération et d'effort de votre wearable", "stress": "Stress", "strain": "Effort" }, @@ -3721,6 +3725,7 @@ "recovery": { "title": "Récupération", "description": "À quel point votre corps a récupéré : les signaux de récupération, de charge et d'effort que votre wearable enregistre la nuit.", + "scoreCrossLink": "Voir le score de récupération composite", "emptyTitle": "Pas encore de données de récupération", "empty": "Pas encore de données de récupération. Connectez un compte WHOOP, Polar ou Oura et ces scores se rempliront dès que votre appareil se synchronise.", "block": { @@ -4009,7 +4014,7 @@ }, "wrapUp": { "title": "C’est la fin de la visite", - "body": "Vous pouvez revoir chaque module séparément à tout moment (« Afficher cette visite » sur chaque page) ou relancer la visite complète dans Réglages → Avancé." + "body": "Cette visite guidée ne s'affiche qu'une fois — elle ne se rouvrira pas d'elle-même. Tout ce qu'elle a montré reste en place, et vous pouvez activer ou désactiver des fonctionnalités à tout moment dans Réglages → Modules." } } }, @@ -4084,7 +4089,8 @@ "learning": "Certaines analyses — glycémie, rythme de sommeil, tendances de tension, cycle — s'affinent au cours de la première semaine ou deux à mesure que vos données s'accumulent. Des tuiles vides signifient simplement que nous apprenons encore votre référence.", "connectCta": "Connecter un appareil", "logCta": "Enregistrez votre première mesure", - "importCta": "Importer un historique existant" + "importCta": "Importer un historique existant", + "modulesCta": "Choisir vos modules" }, "welcomeBack": { "title": "Bon retour", @@ -4549,7 +4555,7 @@ "description": "Dossiers structurés des allergies et des antécédents familiaux." }, "environment": { - "title": "Environnement", + "title": "Localisation et météo", "subtitle": "Contexte météo, lumière du jour et lieu.", "disabledHint": "Activez le module Environnement pour définir un lieu de référence et intégrer la météo et la durée du jour quotidiennes.", "searchPlaceholder": "Rechercher une ville", @@ -7959,6 +7965,7 @@ "mentalHealth": { "pageTitle": "Bien-être mental", "pageDescription": "Quatre auto-évaluations validées et facultatives — PHQ-9 (humeur), GAD-7 (inquiétude), WHO-5 (bien-être) et SCI (sommeil) — en complément de ton suivi de l'humeur. Ce qui compte, c'est la tendance dans le temps, pas un chiffre isolé.", + "moodLink": "Voir ton historique d'humeur", "attributionLabel": "Source", "attributionShow": "Source et licence pour {instrument}", "choosePrompt": "Choisis un bilan", @@ -8404,7 +8411,8 @@ "noConditions": "Lié à aucune affection", "previewUnavailable": "Pas d'aperçu intégré pour ce type de fichier", "uploadedMeta": "Ajouté le {date} · {size}", - "share": "Partager" + "share": "Partager", + "labValuesLink": "Voir {count} valeurs de laboratoire" }, "dropOverlay": { "title": "Déposez les fichiers pour les téléverser", @@ -8666,7 +8674,9 @@ "coachCheckin": { "title": "Il est temps de revoir un plan", "body": "Cela fait environ une semaine que vous avez défini ce plan : gardez-le, ajustez-le ou laissez-le. Sans pression.", - "bodyPlan": "Il y a environ une semaine, vous vous étiez fixé : « {plan} ». Gardez-le, ajustez-le ou laissez-le, sans pression." + "bodyPlan": "Il y a environ une semaine, vous vous étiez fixé : « {plan} ». Gardez-le, ajustez-le ou laissez-le, sans pression.", + "adjustPrompt": "J'aimerais ajuster mon plan de suivi.", + "adjustPromptPlan": "J'aimerais ajuster ce plan : « {plan} »" }, "tensionWindow": { "title": "Peut-être un peu de tension", diff --git a/messages/it.json b/messages/it.json index 744b0e761..870fc1256 100644 --- a/messages/it.json +++ b/messages/it.json @@ -228,7 +228,7 @@ "logout": "Esci", "login": "Accedi", "notifications": "Notifiche", - "theme": "Aspetto", + "theme": "Tema", "themeSystem": "Sistema", "themeDark": "Scuro", "themeLight": "Chiaro", @@ -605,6 +605,7 @@ "mood": { "title": "Umore", "subtitle": "Andamento e voci dell’umore", + "mentalWellbeingLink": "Fai un check-in sul benessere mentale", "addEntry": "Aggiungi", "editEntry": "Modifica voce", "moodLevel": "Umore", @@ -2894,7 +2895,7 @@ "sleep": { "title": "Nessuna voce di sonno", "description": "Quando saranno disponibili dati sul sonno (manuale o tramite Withings / Apple Health), qui apparirà la suddivisione per fase.", - "cta": "Collega Withings" + "cta": "Collega una fonte" } }, "navWorkouts": "Allenamenti", @@ -3262,6 +3263,8 @@ }, "navWalkingSpeed": "Velocità di cammino", "mood": { + "logLink": "Registra un umore", + "mentalWellbeingLink": "Fai un check-in sul benessere mentale", "heatmapTitle": "Calendario dell'umore", "heatmapNoEntry": "Nessun dato", "legendGreat": "Ottimo", @@ -3550,7 +3553,8 @@ "sectionSubtitle": "Valori combinati di recupero, stress e sforzo letti dai tuoi dispositivi connessi", "loadError": "Al momento non è stato possibile caricare i tuoi punteggi di benessere.", "loadingLabel": "Caricamento dei tuoi indicatori di salute", - "recovery": "Recupero", + "recovery": "Punteggio di recupero", + "recoveryCrossLink": "Vedi i dati di recupero e sforzo del tuo wearable", "stress": "Stress", "strain": "Sforzo" }, @@ -3721,6 +3725,7 @@ "recovery": { "title": "Recupero", "description": "Quanto bene il tuo corpo si è ripreso: i segnali di recupero, sforzo e carico che il tuo wearable registra durante la notte.", + "scoreCrossLink": "Vedi il punteggio di recupero composito", "emptyTitle": "Ancora nessun dato di recupero", "empty": "Ancora nessun dato di recupero. Collega un account WHOOP, Polar o Oura e questi punteggi si popoleranno appena il dispositivo si sincronizza.", "block": { @@ -4009,7 +4014,7 @@ }, "wrapUp": { "title": "Questa è la visita guidata", - "body": "Puoi rivedere ogni modulo singolarmente in qualsiasi momento («Mostra questa visita» su ogni pagina) o riavviare l’intera visita da Impostazioni → Avanzate." + "body": "Questa visita guidata viene mostrata una sola volta: non si riaprirà da sola. Tutto ciò che hai visto resta al suo posto e puoi attivare o disattivare le funzioni quando vuoi da Impostazioni → Moduli." } } }, @@ -4084,7 +4089,8 @@ "learning": "Alcune analisi — glicemia, ritmo del sonno, tendenze della pressione, ciclo — si affinano nella prima settimana o due man mano che i tuoi dati si accumulano. Le caselle vuote ora indicano solo che stiamo ancora imparando il tuo riferimento.", "connectCta": "Collega un dispositivo", "logCta": "Registra la tua prima misurazione", - "importCta": "Importa la cronologia esistente" + "importCta": "Importa la cronologia esistente", + "modulesCta": "Scegli i tuoi moduli" }, "welcomeBack": { "title": "Bentornato", @@ -4549,7 +4555,7 @@ "description": "Record strutturati di allergie e anamnesi familiare." }, "environment": { - "title": "Ambiente", + "title": "Posizione e meteo", "subtitle": "Contesto meteo, luce del giorno e posizione.", "disabledHint": "Attiva il modulo Ambiente per impostare una posizione principale e integrare il meteo e le ore di luce giornaliere.", "searchPlaceholder": "Cerca una città", @@ -7959,6 +7965,7 @@ "mentalHealth": { "pageTitle": "Benessere mentale", "pageDescription": "Quattro autovalutazioni validate e facoltative — PHQ-9 (umore), GAD-7 (preoccupazione), WHO-5 (benessere) e SCI (sonno) — accanto al tuo diario dell'umore. Ciò che conta è l'andamento nel tempo, non un singolo numero.", + "moodLink": "Vedi il tuo andamento dell'umore", "attributionLabel": "Fonte", "attributionShow": "Fonte e licenza di {instrument}", "choosePrompt": "Scegli un check-in", @@ -8404,7 +8411,8 @@ "noConditions": "Non collegato a una patologia", "previewUnavailable": "Nessuna anteprima integrata per questo tipo di file", "uploadedMeta": "Aggiunto il {date} · {size}", - "share": "Condividi" + "share": "Condividi", + "labValuesLink": "Vedi {count} valori di laboratorio" }, "dropOverlay": { "title": "Rilascia i file per caricarli", @@ -8666,7 +8674,9 @@ "coachCheckin": { "title": "È il momento di rivedere un piano", "body": "È passata circa una settimana da quando hai definito questo piano: mantienilo, modificalo o lascialo andare. Senza pressioni.", - "bodyPlan": "Circa una settimana fa ti eri proposto: «{plan}». Mantienilo, modificalo o lascialo andare, senza pressioni." + "bodyPlan": "Circa una settimana fa ti eri proposto: «{plan}». Mantienilo, modificalo o lascialo andare, senza pressioni.", + "adjustPrompt": "Vorrei modificare il mio piano di controllo.", + "adjustPromptPlan": "Vorrei modificare questo piano: «{plan}»" }, "tensionWindow": { "title": "Forse un po' di tensione oggi", diff --git a/messages/pl.json b/messages/pl.json index 5e5e0bb6c..a7899e3b1 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -228,7 +228,7 @@ "logout": "Wyloguj", "login": "Zaloguj", "notifications": "Powiadomienia", - "theme": "Wygląd", + "theme": "Motyw", "themeSystem": "Systemowy", "themeDark": "Ciemny", "themeLight": "Jasny", @@ -605,6 +605,7 @@ "mood": { "title": "Nastrój", "subtitle": "Trend i wpisy nastroju", + "mentalWellbeingLink": "Wykonaj sprawdzian dobrostanu psychicznego", "addEntry": "Dodaj", "editEntry": "Edytuj wpis", "moodLevel": "Nastrój", @@ -2894,7 +2895,7 @@ "sleep": { "title": "Brak danych o śnie", "description": "Gdy pojawią się dane o śnie (ręcznie lub przez Withings / Apple Health), wyświetli się tu rozkład faz na noc.", - "cta": "Połącz Withings" + "cta": "Połącz źródło" } }, "navWorkouts": "Treningi", @@ -3262,6 +3263,8 @@ }, "navWalkingSpeed": "Prędkość chodu", "mood": { + "logLink": "Zapisz nastrój", + "mentalWellbeingLink": "Wykonaj sprawdzian dobrostanu psychicznego", "heatmapTitle": "Kalendarz nastroju", "heatmapNoEntry": "Brak wpisu", "legendGreat": "Świetnie", @@ -3550,7 +3553,8 @@ "sectionSubtitle": "Złożone wartości regeneracji, stresu i obciążenia odczytane z Twoich połączonych urządzeń", "loadError": "Nie udało się teraz wczytać Twoich wyników dobrostanu.", "loadingLabel": "Wczytywanie Twoich wskaźników zdrowia", - "recovery": "Regeneracja", + "recovery": "Wynik regeneracji", + "recoveryCrossLink": "Zobacz dane regeneracji i obciążenia z Twojego urządzenia", "stress": "Stres", "strain": "Obciążenie" }, @@ -3721,6 +3725,7 @@ "recovery": { "title": "Regeneracja", "description": "Jak dobrze Twój organizm się zregenerował – sygnały regeneracji, obciążenia i load, które Twoje urządzenie rejestruje w nocy.", + "scoreCrossLink": "Zobacz łączny wynik regeneracji", "emptyTitle": "Brak danych o regeneracji", "empty": "Brak danych o regeneracji. Połącz konto WHOOP, Polar lub Oura, a te wyniki uzupełnią się po synchronizacji urządzenia.", "block": { @@ -4009,7 +4014,7 @@ }, "wrapUp": { "title": "To koniec przewodnika", - "body": "Każdy moduł możesz obejrzeć osobno w dowolnej chwili („Pokaż ten przewodnik” na każdej stronie) lub uruchomić cały przewodnik ponownie w Ustawienia → Zaawansowane." + "body": "Ten przewodnik pokazuje się tylko raz — nie otworzy się ponownie sam. Wszystko, co pokazał, zostaje na miejscu, a funkcje możesz włączać i wyłączać w dowolnym momencie w Ustawienia → Moduły." } } }, @@ -4084,7 +4089,8 @@ "learning": "Niektóre wnioski — glukoza, rytm snu, trendy ciśnienia, cykl — wyostrzają się w ciągu pierwszego tygodnia lub dwóch, w miarę gromadzenia danych. Puste kafelki oznaczają teraz tylko, że wciąż poznajemy Twój punkt odniesienia.", "connectCta": "Połącz urządzenie", "logCta": "Zapisz pierwszy pomiar", - "importCta": "Importuj istniejącą historię" + "importCta": "Importuj istniejącą historię", + "modulesCta": "Wybierz swoje moduły" }, "welcomeBack": { "title": "Witaj ponownie", @@ -4549,7 +4555,7 @@ "description": "Ustrukturyzowane rekordy alergii i wywiadu rodzinnego." }, "environment": { - "title": "Środowisko", + "title": "Lokalizacja i pogoda", "subtitle": "Kontekst pogody, światła dziennego i lokalizacji.", "disabledHint": "Włącz moduł Środowisko, aby ustawić lokalizację domową i pobierać dzienną pogodę oraz długość dnia.", "searchPlaceholder": "Szukaj miasta", @@ -7959,6 +7965,7 @@ "mentalHealth": { "pageTitle": "Dobrostan psychiczny", "pageDescription": "Cztery zwalidowane, dobrowolne testy — PHQ-9 (nastrój), GAD-7 (lęk), WHO-5 (samopoczucie) i SCI (sen) — obok Twojego dziennika nastroju. Liczy się trend w czasie, a nie pojedynczy wynik.", + "moodLink": "Zobacz historię swojego nastroju", "attributionLabel": "Źródło", "attributionShow": "Źródło i licencja: {instrument}", "choosePrompt": "Wybierz sprawdzenie", @@ -8404,7 +8411,8 @@ "noConditions": "Niepowiązany ze schorzeniem", "previewUnavailable": "Brak podglądu dla tego typu pliku", "uploadedMeta": "Dodano {date} · {size}", - "share": "Udostępnij" + "share": "Udostępnij", + "labValuesLink": "Zobacz {count} wyników laboratoryjnych" }, "dropOverlay": { "title": "Upuść pliki, aby je przesłać", @@ -8666,7 +8674,9 @@ "coachCheckin": { "title": "Czas przyjrzeć się planowi", "body": "Minął mniej więcej tydzień, odkąd ustaliłeś ten plan — zachowaj go, dostosuj lub odpuść. Bez presji.", - "bodyPlan": "Około tygodnia temu postanowiłeś: „{plan}”. Zachowaj to, dostosuj lub odpuść — bez presji." + "bodyPlan": "Około tygodnia temu postanowiłeś: „{plan}”. Zachowaj to, dostosuj lub odpuść — bez presji.", + "adjustPrompt": "Chciałbym dostosować mój plan kontrolny.", + "adjustPromptPlan": "Chciałbym dostosować ten plan: „{plan}”" }, "tensionWindow": { "title": "Może chwila napięcia dzisiaj", diff --git a/src/app/coach/page.tsx b/src/app/coach/page.tsx index 96c077437..4e6b1c169 100644 --- a/src/app/coach/page.tsx +++ b/src/app/coach/page.tsx @@ -6,11 +6,13 @@ import { useQuery } from "@tanstack/react-query"; import { CoachConversation } from "@/components/insights/coach-panel/coach-conversation"; import type { CoachNudgeStatus } from "@/components/insights/layout-coach-fab"; +import type { CoachLaunchScope } from "@/lib/insights/coach-launch-context"; import { useCoachLaunch } from "@/lib/insights/coach-launch-context"; import { useFeatureFlags } from "@/hooks/use-feature-flags"; import { useDisableCoach } from "@/hooks/use-disable-coach"; import { queryKeys } from "@/lib/query-keys"; import { apiGet } from "@/lib/api/api-fetch"; +import { coachScopeSourceSchema } from "@/lib/ai/coach/types"; /** * v1.12.0 (Coach v2 #6) — full-page Coach conversation. @@ -57,6 +59,23 @@ import { apiGet } from "@/lib/api/api-fetch"; * most-recent thread so the user lands on what the Coach said. * The search-param read sits in a Suspense child so the client-bailout * never de-opts the route. + * + * 2026-07-17 UX-flows audit — the route understood only `?c=` / `?doc=`, so + * every other cross-surface hand-off (a metric card's "ask about this", the + * Today check-in's "Adjust", a workout detail's coach button) dropped its + * context at the URL boundary and landed on a blank composer (F1-2 / F4-1 / + * F6-1). Two additive params close that gap, both seeding the SAME props + * `` already exposes for the drawer's suggested-prompt + * chips — no new plumbing inside the conversation surface itself: + * - `?scope=` — narrows the snapshot the FIRST turn of a + * fresh conversation reads (validated against the closed enum; an + * unrecognised value is silently dropped rather than reaching the chat + * route with a free-form string). + * - `?ask=` — seeds the composer prefill (mirrors `prefill` on the + * in-app `askCoach()` launch call). The user still reviews/sends it — + * this is a prefill, not an auto-send. + * Both are ignored once `?c=` or `?doc=` pin an existing/scoped thread — scope + * only ever applies to a fresh conversation's first turn. */ function CoachPageBody() { const searchParams = useSearchParams(); @@ -71,13 +90,30 @@ function CoachPageBody() { const rawDoc = searchParams.get("doc"); const seedDocumentId = deepLinkedId === null && rawDoc ? rawDoc : null; + // A fresh conversation only — an existing thread (`?c=`) or a doc-scoped + // chat (`?doc=`) keeps its own established scope. + const freshChat = deepLinkedId === null && seedDocumentId === null; + const rawScope = freshChat ? searchParams.get("scope") : null; + const scopeResult = rawScope + ? coachScopeSourceSchema.safeParse(rawScope) + : null; + const launchScope: CoachLaunchScope | null = scopeResult?.success + ? { metric: scopeResult.data } + : null; + const seedPrefill = freshChat ? searchParams.get("ask") : null; + // C1 exception — an unread coach-initiated message opens the most-recent // conversation (which holds that proactive turn). Only consulted when the // entry did not pin a specific thread or ask for a fresh chat. // A `?doc=` open is an explicit fresh doc-scoped chat — never override it by - // resuming the most-recent thread on an unread nudge. + // resuming the most-recent thread on an unread nudge. A `?scope=`/`?ask=` + // hand-off is likewise an explicit fresh-chat request. const exceptionEligible = - deepLinkedId === null && rawC !== "new" && seedDocumentId === null; + deepLinkedId === null && + rawC !== "new" && + seedDocumentId === null && + launchScope === null && + !seedPrefill; const { data: nudge } = useQuery({ queryKey: queryKeys.coachNudgeStatus(), queryFn: async (): Promise => @@ -95,6 +131,10 @@ function CoachPageBody() { // v1.28.51 — seed the document scope for a `?doc=` open so the first // turn is created + sent through the hardened fenced document endpoint. initialDocumentId={seedDocumentId} + // 2026-07-17 UX-flows audit F1-2/F4-1/F6-1 — seed the scope/prefill a + // cross-surface hand-off carried in the URL. + launchScope={launchScope} + prefill={seedPrefill} // Default is the new-chat hero; only resume most-recent for the // unread coach-initiated exception. autoOpenMostRecent={hasUnreadCoachMessage} diff --git a/src/app/insights/mood/page.tsx b/src/app/insights/mood/page.tsx index 2f9223886..6573fff92 100644 --- a/src/app/insights/mood/page.tsx +++ b/src/app/insights/mood/page.tsx @@ -3,7 +3,7 @@ import { useQuery } from "@tanstack/react-query"; import dynamic from "next/dynamic"; import Link from "next/link"; -import { Smile } from "lucide-react"; +import { ArrowRight, Smile } from "lucide-react"; import { useAuth } from "@/hooks/use-auth"; import { queryKeys } from "@/lib/query-keys"; @@ -41,7 +41,7 @@ interface ComprehensiveMoodData { } export default function InsightsStimmungPage() { - const { isAuthenticated } = useAuth(); + const { user, isAuthenticated } = useAuth(); const { t } = useTranslations(); const { compareBaseline } = useInsightsLayoutPrefs(isAuthenticated); @@ -101,6 +101,32 @@ export default function InsightsStimmungPage() { The heatmap and the assessment are lifted out of `MoodInsightsSections` into their own regions so they land in this exact order; all three regions share one `moodInsights` query (TanStack dedups the fetch). */} + + {/* 2026-07-17 UX/IA audit M9 — mood, the mental-wellbeing screeners, and + this insights page form one mental-health domain; this cross-links + into the other two so the trend a user reads here can lead + somewhere. */} +
+ + {t("insights.mood.logLink")} +
+ {/* No `` here: mood is event-driven, not a diff --git a/src/app/insights/recovery/page.tsx b/src/app/insights/recovery/page.tsx index 7db6abea0..9cd494b8e 100644 --- a/src/app/insights/recovery/page.tsx +++ b/src/app/insights/recovery/page.tsx @@ -1,6 +1,7 @@ "use client"; -import { Loader2 } from "lucide-react"; +import Link from "next/link"; +import { ArrowRight, Loader2 } from "lucide-react"; import { useTranslations } from "@/lib/i18n/context"; import { useModulePageGuard } from "@/hooks/use-module-page-guard"; @@ -46,6 +47,20 @@ export default function InsightsRecoveryPage() { explainerMetric="recoveryPage" coachLaunch > + {/* 2026-07-17 UX/IA audit M4 — reverse direction of the cross-link added + to the score-anatomy page: this composite wearable page shares the + "Recovery" nav label with the RECOVERY_SCORE anatomy view at + `/insights/scores/recovery`, so a user who arrived here looking for + the score ring / contributor breakdown gets a pointer instead of a + dead end. */} + + {t("insights.recovery.scoreCrossLink")} +