diff --git a/messages/de.json b/messages/de.json
index a9c1f83c5..421fcb35c 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "Noch keine Mikronährstoffdaten synchronisiert",
"loadError": "Deine Nährstoffdaten konnten nicht geladen werden",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "Über der tolerierbaren Höchstmenge von {value} {unit} pro Tag ({source}).",
- "aboveUpperLimitSupplemental": "Der Anteil aus Präparaten liegt über der tolerierbaren Höchstmenge von {value} {unit} pro Tag für Präparate ({source})."
+ "aboveUpperLimit": "Über der tolerierbaren Höchstmenge für Erwachsene von {value} {unit} pro Tag ({source}).",
+ "aboveUpperLimitSupplemental": "Der Anteil aus Präparaten liegt über der tolerierbaren Höchstmenge für Erwachsene von {value} {unit} pro Tag für Präparate ({source}).",
+ "upperLimitForm": {
+ "retinol": "Die Höchstmenge gilt nur für vorgeformtes Vitamin A (Retinol): Stammt die Menge aus Beta-Carotin, gilt sie nicht.",
+ "folic_acid": "Die Höchstmenge gilt für Folsäure aus Präparaten und angereicherten Lebensmitteln, nicht für das Folat in gewöhnlicher Nahrung.",
+ "magnesium_salts": "Die Höchstmenge gilt für leicht lösliche Magnesiumsalze in Präparaten, nicht für das Magnesium aus der Nahrung.",
+ "alpha_tocopherol": "Die Höchstmenge ist für Alpha-Tocopherol festgelegt."
+ }
},
"sparseNote": "Ein niedriger Wert bedeutet hier meist lückenhafte Erfassung, keinen Mangel. Die Tagessummen aus Apple Health spiegeln wider, was deine Apps erfasst haben, nicht die gesamte Nahrungsaufnahme.",
"units": {
diff --git a/messages/en.json b/messages/en.json
index ca6175a86..b80e0a938 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "No micronutrient data synced yet",
"loadError": "Your nutrient data could not be loaded",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "Above the tolerable upper intake level of {value} {unit} a day ({source}).",
- "aboveUpperLimitSupplemental": "The supplement share is above the tolerable upper intake level of {value} {unit} a day for supplements ({source})."
+ "aboveUpperLimit": "Above the tolerable upper intake level for adults of {value} {unit} a day ({source}).",
+ "aboveUpperLimitSupplemental": "The supplement share is above the tolerable upper intake level for adults of {value} {unit} a day for supplements ({source}).",
+ "upperLimitForm": {
+ "retinol": "The level covers preformed vitamin A (retinol) only: if the amount comes from beta-carotene, it does not apply.",
+ "folic_acid": "The level covers folic acid from supplements and fortified foods, not the folate in ordinary food.",
+ "magnesium_salts": "The level covers readily dissociable magnesium salts in supplements, not the magnesium in food.",
+ "alpha_tocopherol": "The level is set for alpha-tocopherol."
+ }
},
"sparseNote": "A low number here usually means sparse logging, not a deficiency. Apple Health day totals reflect what your apps logged, not total dietary intake.",
"units": {
diff --git a/messages/es.json b/messages/es.json
index 8b39b0e3f..bb81a534a 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "Aún no hay datos de micronutrientes sincronizados",
"loadError": "No se pudieron cargar tus datos de nutrientes",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "Por encima del nivel máximo tolerable de {value} {unit} al día ({source}).",
- "aboveUpperLimitSupplemental": "La parte de los suplementos supera el nivel máximo tolerable de {value} {unit} al día para suplementos ({source})."
+ "aboveUpperLimit": "Por encima del nivel máximo tolerable para adultos de {value} {unit} al día ({source}).",
+ "aboveUpperLimitSupplemental": "La parte de los suplementos supera el nivel máximo tolerable para adultos de {value} {unit} al día para suplementos ({source}).",
+ "upperLimitForm": {
+ "retinol": "El nivel solo se aplica a la vitamina A preformada (retinol): si la cantidad procede de betacaroteno, no se aplica.",
+ "folic_acid": "El nivel se aplica al ácido fólico de suplementos y alimentos enriquecidos, no al folato de los alimentos habituales.",
+ "magnesium_salts": "El nivel se aplica a las sales de magnesio fácilmente disociables de los suplementos, no al magnesio de los alimentos.",
+ "alpha_tocopherol": "El nivel está fijado para el alfa-tocoferol."
+ }
},
"sparseNote": "Un valor bajo aquí suele significar un registro escaso, no una deficiencia: los totales diarios de Apple Health reflejan lo que registraron tus apps, no la ingesta dietética total.",
"units": {
diff --git a/messages/fr.json b/messages/fr.json
index 92e11b7cd..96777e4a8 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "Aucune donnée de micronutriments synchronisée pour l'instant",
"loadError": "Tes données de nutriments n'ont pas pu être chargées",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "Au-dessus de la limite supérieure de sécurité de {value} {unit} par jour ({source}).",
- "aboveUpperLimitSupplemental": "La part des compléments dépasse la limite supérieure de sécurité de {value} {unit} par jour pour les compléments ({source})."
+ "aboveUpperLimit": "Au-dessus de la limite supérieure de sécurité pour les adultes de {value} {unit} par jour ({source}).",
+ "aboveUpperLimitSupplemental": "La part des compléments dépasse la limite supérieure de sécurité pour les adultes de {value} {unit} par jour pour les compléments ({source}).",
+ "upperLimitForm": {
+ "retinol": "La limite ne concerne que la vitamine A préformée (rétinol) : si la quantité provient du bêta-carotène, elle ne s'applique pas.",
+ "folic_acid": "La limite concerne l'acide folique des compléments et des aliments enrichis, pas les folates de l'alimentation courante.",
+ "magnesium_salts": "La limite concerne les sels de magnésium facilement dissociables des compléments, pas le magnésium des aliments.",
+ "alpha_tocopherol": "La limite est fixée pour l'alpha-tocophérol."
+ }
},
"sparseNote": "Une valeur basse ici signifie généralement un suivi partiel, pas une carence : les totaux journaliers Apple Health reflètent ce que vos applis ont enregistré, pas l'apport alimentaire total.",
"units": {
diff --git a/messages/it.json b/messages/it.json
index c25858eae..4acd04e2f 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "Nessun dato sui micronutrienti ancora sincronizzato",
"loadError": "Non è stato possibile caricare i tuoi dati sui nutrienti",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "Sopra il livello massimo tollerabile di {value} {unit} al giorno ({source}).",
- "aboveUpperLimitSupplemental": "La quota degli integratori supera il livello massimo tollerabile di {value} {unit} al giorno per gli integratori ({source})."
+ "aboveUpperLimit": "Sopra il livello massimo tollerabile per gli adulti di {value} {unit} al giorno ({source}).",
+ "aboveUpperLimitSupplemental": "La quota degli integratori supera il livello massimo tollerabile per gli adulti di {value} {unit} al giorno per gli integratori ({source}).",
+ "upperLimitForm": {
+ "retinol": "Il livello vale solo per la vitamina A preformata (retinolo): se la quantità proviene dal beta-carotene, non si applica.",
+ "folic_acid": "Il livello vale per l'acido folico da integratori e alimenti arricchiti, non per i folati del cibo comune.",
+ "magnesium_salts": "Il livello vale per i sali di magnesio facilmente dissociabili negli integratori, non per il magnesio degli alimenti.",
+ "alpha_tocopherol": "Il livello è fissato per l'alfa-tocoferolo."
+ }
},
"sparseNote": "Un valore basso qui di solito indica una registrazione poco frequente, non una carenza: i totali giornalieri di Apple Health riflettono ciò che le tue app hanno registrato, non l'apporto alimentare totale.",
"units": {
diff --git a/messages/ko.json b/messages/ko.json
index 56230ec63..1bfd80398 100644
--- a/messages/ko.json
+++ b/messages/ko.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "아직 동기화된 미량영양소 데이터가 없어요",
"loadError": "영양소 데이터를 불러오지 못했어요",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "하루 상한 섭취량 {value} {unit}을(를) 넘었어요 ({source}).",
- "aboveUpperLimitSupplemental": "보충제로 섭취한 양이 보충제 기준 하루 상한 섭취량 {value} {unit}을(를) 넘었어요 ({source})."
+ "aboveUpperLimit": "성인 하루 상한 섭취량 {value} {unit}을(를) 넘었어요 ({source}).",
+ "aboveUpperLimitSupplemental": "보충제로 섭취한 양이 성인 보충제 기준 하루 상한 섭취량 {value} {unit}을(를) 넘었어요 ({source}).",
+ "upperLimitForm": {
+ "retinol": "이 상한은 기성 비타민 A(레티놀)에만 적용돼요. 베타카로틴에서 온 양이라면 적용되지 않아요.",
+ "folic_acid": "이 상한은 보충제와 강화식품의 엽산에 적용되며, 일반 음식의 엽산염에는 적용되지 않아요.",
+ "magnesium_salts": "이 상한은 보충제의 쉽게 해리되는 마그네슘염에 적용되며, 음식의 마그네슘에는 적용되지 않아요.",
+ "alpha_tocopherol": "이 상한은 알파토코페롤 기준이에요."
+ }
},
"sparseNote": "여기 수치가 낮은 건 보통 결핍이 아니라 기록이 드물다는 뜻이에요. Apple Health의 하루 합계는 앱이 기록한 양만 반영하고, 전체 식이 섭취량은 아니에요.",
"units": {
diff --git a/messages/pl.json b/messages/pl.json
index 0a5590b85..8f35637a7 100644
--- a/messages/pl.json
+++ b/messages/pl.json
@@ -11873,8 +11873,14 @@
"emptyTitle": "Brak jeszcze zsynchronizowanych danych o mikroskładnikach",
"loadError": "Nie udało się wczytać danych o składnikach odżywczych",
"sourcePart": "{source} {value} {unit}",
- "aboveUpperLimit": "Powyżej tolerowanego górnego poziomu spożycia {value} {unit} dziennie ({source}).",
- "aboveUpperLimitSupplemental": "Część z suplementów przekracza tolerowany górny poziom {value} {unit} dziennie dla suplementów ({source})."
+ "aboveUpperLimit": "Powyżej tolerowanego górnego poziomu spożycia dla dorosłych {value} {unit} dziennie ({source}).",
+ "aboveUpperLimitSupplemental": "Część z suplementów przekracza tolerowany górny poziom dla dorosłych {value} {unit} dziennie dla suplementów ({source}).",
+ "upperLimitForm": {
+ "retinol": "Poziom dotyczy tylko gotowej witaminy A (retinolu): jeśli ilość pochodzi z beta-karotenu, nie ma zastosowania.",
+ "folic_acid": "Poziom dotyczy kwasu foliowego z suplementów i żywności wzbogacanej, nie folianów ze zwykłego jedzenia.",
+ "magnesium_salts": "Poziom dotyczy łatwo dysocjujących soli magnezu w suplementach, nie magnezu z jedzenia.",
+ "alpha_tocopherol": "Poziom ustalono dla alfa-tokoferolu."
+ }
},
"sparseNote": "Niska wartość zwykle oznacza tu rzadkie zapisywanie, a nie niedobór. Dzienne sumy z Apple Health odzwierciedlają to, co zapisały twoje aplikacje, a nie całkowite spożycie w diecie.",
"units": {
diff --git a/src/components/insights/nutrients/__tests__/micronutrients-upper-limit.test.tsx b/src/components/insights/nutrients/__tests__/micronutrients-upper-limit.test.tsx
new file mode 100644
index 000000000..53e25e3cb
--- /dev/null
+++ b/src/components/insights/nutrients/__tests__/micronutrients-upper-limit.test.tsx
@@ -0,0 +1,74 @@
+import { describe, expect, it, vi } from "vitest";
+import { renderToStaticMarkup } from "react-dom/server";
+
+import { I18nProvider } from "@/lib/i18n/context";
+import { NUTRIENT_CATALOG } from "@/lib/nutrients/catalog";
+
+import type { NutrientOverviewRow } from "../types";
+
+const state = vi.hoisted(() => ({ rows: [] as NutrientOverviewRow[] }));
+
+vi.mock("@tanstack/react-query", () => ({
+ useQuery: () => ({
+ data: { nutrients: state.rows },
+ isLoading: false,
+ isError: false,
+ refetch: () => undefined,
+ }),
+}));
+
+vi.mock("@/hooks/use-auth", () => ({
+ useAuth: () => ({ user: { gender: "MALE" } }),
+}));
+
+import { MicronutrientsCard } from "../micronutrients-card";
+
+function render(rows: NutrientOverviewRow[], locale: "en" | "de" = "en") {
+ state.rows = rows;
+ return renderToStaticMarkup(
+