i18n(meds): localise the modal-wizard surface

Populates messages/{de,en}.json with every key the new dialog reads
under medications.wizard.*, plus categoryDiabetes and
categoryAntibiotic on the cards' badge namespace; the other four
locales ship the English fallback per project convention. The
retired medications.create.wizard.* namespace is removed from all
six files so the locale-integrity guard surfaces every dangling key
the moment the old surface stops being reachable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marc-André BombeckandClaude Opus 4.7 committed 2026-05-28 19:33:11 +02:00
1 parent b1f9a4bf8f
commit e686083bae
7 files changed
+827 -587

No files matched your search

+137 -97
View File
@@ -477,6 +477,8 @@
"categoryDigestive": "Magen/Darm",
"categorySkin": "Hautpflege",
"categorySleepAid": "Schlafmittel",
"categoryDiabetes": "Diabetes",
"categoryAntibiotic": "Antibiotikum",
"categoryOther": "Sonstiges",
"daysSun": "So",
"daysMon": "Mo",
@@ -748,119 +750,157 @@
"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."
}
},
"create": {
"wizard": {
"page": {
"backToList": "Zurück zu den Medikamenten"
},
"header": {
"stepOf": "Schritt {current} von {total}",
"title": {
"step1": "Wie heißt das Medikament und was ist eine Einzeldosis?",
"step2": "Ist das eine einmalige Dosis oder nimmst du es regelmäßig?",
"step3": "Wie oft?",
"step4": "Etwas Besonderes zu den Tagen?",
"step5": "Zu welcher Uhrzeit?",
"step6": "Wann beginnt der Plan? Wann endet er (falls überhaupt)?",
"step7": "Erinnerungen und Übersicht"
}
},
"wizard": {
"header": {
"stepOf": "Schritt {current} von {total}",
"createTitle": "Neues Medikament",
"editTitle": "{name} bearbeiten"
},
"nav": {
"back": "Zurück",
"next": "Weiter",
"save": "Speichern",
"saveEdit": "Änderungen speichern"
},
"nl": {
"button": "Beschreiben"
},
"steps": {
"step1": {
"name": {
"label": "Name",
"placeholder": "z. B. Mounjaro, Ibuprofen, Vitamin D"
},
"dose": {
"amount": {
"label": "Dosis",
"placeholder": "z. B. 5"
},
"unit": {
"label": "Einheit",
"mg": "mg",
"g": "g",
"ml": "ml",
"iu": "I.E.",
"tablets": "Tabletten",
"drops": "Tropfen",
"puffs": "Hübe",
"sprays": "Sprühstöße",
"capsules": "Kapseln",
"pieces": "Stück",
"other": "andere"
}
},
"naturalLanguage": {
"button": "✨ Beschreiben",
"placeholderCopy": "Beschreibe das Medikament in eigenen Worten — der Assistent füllt die Schritte für dich aus."
}
"title": "Wie heißt das Medikament?",
"subline": "Genau so wie es auf der Packung steht.",
"label": "Name",
"placeholder": "z. B. Ramipril"
},
"step2": {
"oneShot": {
"title": "Einmaldosis",
"description": "Ein einzelner Termin — Grippeimpfung, Spritze, die letzte Dosis einer Kur."
},
"recurring": {
"title": "Wiederkehrend",
"description": "Ein Medikament, das du nach einem Plan nimmst — täglich oder anders."
}
"title": "Was für ein Medikament ist das?",
"subline": "Wir nutzen das für passende Vorlagen und Auswertungen."
},
"step3": {
"helper": "Wähle das Muster, das zu deiner Einnahme passt. Unteroptionen erscheinen, sobald du eines auswählst."
"title": "Wie hoch ist die Dosis?",
"subline": "Eine Tablette, ein Hub, ein Tropfen — je nach Form.",
"amountLabel": "Menge",
"amountPlaceholder": "z. B. 5",
"unitLabel": "Einheit",
"unit": {
"mg": "mg",
"ml": "ml",
"iu": "I.E.",
"mcg": "µg",
"g": "g",
"tablets": "Tablette(n)",
"capsules": "Kapsel(n)",
"drops": "Tropfen",
"puffs": "Hub",
"sprays": "Sprühstoß",
"pieces": "Stück",
"other": "Sonstige"
}
},
"step4": {
"recap": "Das hast du gewählt. Tippe auf Zurück, wenn etwas nicht passt.",
"oneShotSkipped": "(übersprungen — Einmaldosis)"
"title": "Über welchen Zeitraum nimmst du es?",
"subline": "Heute reicht ein Startdatum. Ein Ende kannst du später setzen."
},
"step5": {
"helper": "Füge eine oder mehrere Uhrzeiten hinzu. Zu jeder Uhrzeit wird eine Erinnerung gesendet.",
"oneShotDate": {
"label": "Datum der Einmaldosis",
"helper": "Wir verwenden dieses Datum für die Erinnerung und für die Einnahmehistorie."
}
"title": "Wie oft nimmst du es?",
"subline": "Wähle die Regelmäßigkeit — die Details kommen im nächsten Schritt."
},
"step6": {
"helper": "Der Plan läuft ab dem Startdatum. Lass das Enddatum offen, wenn du es dauerhaft nimmst."
},
"step7": {
"reminders": {
"label": "Erinnerungen an",
"description": "Sendet eine Push-Benachrichtigung an deine konfigurierten Kanäle zu jeder geplanten Uhrzeit."
"title": "Wie sieht das im Detail aus?",
"subline": "Trage Wochentage, Intervalle oder den Tag im Monat ein.",
"intervalWeeks": {
"label": "Alle",
"suffix": "Wochen"
},
"summary": {
"title": "Übersicht",
"cadence": {
"daily": "Jeden Tag",
"weekdays": "An ausgewählten Wochentagen",
"weekly": "Einmal pro Woche",
"biweekly": "Alle zwei Wochen",
"monthly": "Monatlich",
"quarterly": "Alle drei Monate",
"yearly": "Einmal im Jahr",
"rolling": "Alle {n} Tage seit der letzten Einnahme",
"oneShot": "Eine Einmaldosis",
"everyNWeeks": "Alle {n} Wochen",
"everyNMonths": "Alle {n} Monate"
},
"weekdaysDetail": ", an {days}",
"dayOfMonthDetail": ", am {day}.",
"everyNMonthsDetail": ", alle {months} Monate am {day}.",
"yearlyDetail": ", am {date}.",
"times": "um {times}",
"startsOn": "Beginn: {date}",
"endsOn": "Ende: {date}",
"noEndDate": "Kein Enddatum"
"dayOfMonth": {
"label": "Am",
"suffix": "Tag des Monats"
},
"rollingDays": {
"label": "Alle",
"suffix": "Tage ab der letzten Einnahme"
}
},
"nav": {
"back": "Zurück",
"next": "Weiter",
"create": "Medikament anlegen"
"step7": {
"title": "Wann nimmst du es?",
"subline": "Eine oder mehrere Uhrzeiten — die Erinnerungen richten sich danach.",
"presetsLabel": "Tagespresets",
"presets": {
"morning": "Morgens",
"noon": "Mittags",
"evening": "Abends",
"night": "Nachts"
}
},
"errors": {
"submitFailed": "Medikament konnte nicht angelegt werden — bitte erneut versuchen.",
"fieldRequired": "Pflichtfeld"
"step8": {
"title": "Fertig — soll HealthLog dich erinnern?",
"subline": "Du kannst alles unten nochmal prüfen, bevor du speicherst.",
"remindersLabel": "Erinnerungen aktiv",
"remindersDescription": "Push, Telegram oder ntfy — je nach deinen Einstellungen.",
"multiScheduleNote": "Dieses Medikament hat mehrere Zeitpläne. Den Detail-Editor öffnen wir in einer späteren Version."
}
},
"classRow": {
"bloodPressure": "Blutdruck",
"diabetes": "Diabetes",
"hormone": "Hormone",
"glp1": "GLP-1-Injektion",
"painRelief": "Schmerz",
"allergy": "Allergie",
"vitamin": "Vitamine",
"supplement": "Nahrungsergänzung",
"antibiotic": "Antibiotikum",
"other": "Sonstiges"
},
"cadence": {
"daily": {
"label": "Täglich",
"description": "Jeden Tag, immer zur gleichen Uhrzeit."
},
"weekdays": {
"label": "Bestimmte Wochentage",
"description": "Z. B. Montag, Mittwoch, Freitag."
},
"everyNWeeks": {
"label": "Alle X Wochen",
"description": "Z. B. alle 2 Wochen Donnerstags (GLP-1, Biologika)."
},
"monthly": {
"label": "Monatlich",
"description": "An einem festen Tag im Monat (z. B. immer am 1.)."
},
"rolling": {
"label": "Flexibel ab letzter Einnahme",
"description": "Du lässt den nächsten Termin offen, drückst 'genommen' wenn du sie genommen hast — ab dem Zeitpunkt zählt der Counter wieder."
},
"oneShot": {
"label": "Einmalig",
"description": "Einzelgabe, zum Beispiel eine Impfung oder ein Antibiotikum."
}
},
"summary": {
"title": "Übersicht",
"cadence": {
"daily": "Jeden Tag",
"weekdays": "An ausgewählten Wochentagen",
"biweekly": "Alle zwei Wochen",
"monthly": "Monatlich",
"quarterly": "Alle drei Monate",
"yearly": "Einmal im Jahr",
"rolling": "Alle {n} Tage seit der letzten Einnahme",
"oneShot": "Eine Einmaldosis",
"everyNWeeks": "Alle {n} Wochen",
"everyNMonths": "Alle {n} Monate"
},
"weekdaysDetail": ", an {days}",
"dayOfMonthDetail": ", am {day}.",
"times": "um {times}",
"startsOn": "Beginn: {date}",
"endsOn": "Ende: {date}",
"noEndDate": "Kein Enddatum"
},
"errors": {
"submitFailed": "Medikament konnte nicht gespeichert werden — bitte erneut versuchen."
}
},
"titration": {
+137 -97
View File
@@ -477,6 +477,8 @@
"categoryDigestive": "Gastrointestinal",
"categorySkin": "Skincare",
"categorySleepAid": "Sleep Aid",
"categoryDiabetes": "Diabetes",
"categoryAntibiotic": "Antibiotic",
"categoryOther": "Other",
"daysSun": "Sun",
"daysMon": "Mon",
@@ -748,119 +750,157 @@
"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."
}
},
"create": {
"wizard": {
"page": {
"backToList": "Back to medications"
},
"header": {
"stepOf": "Step {current} of {total}",
"title": {
"step1": "What's the medication called and what's a single dose?",
"step2": "Is this a one-time dose, or do you take it regularly?",
"step3": "How often?",
"step4": "Anything special about the days?",
"step5": "What time(s) of day?",
"step6": "When does the schedule start? When does it end (if ever)?",
"step7": "Reminders and summary"
}
},
"wizard": {
"header": {
"stepOf": "Step {current} of {total}",
"createTitle": "New medication",
"editTitle": "Edit {name}"
},
"nav": {
"back": "Back",
"next": "Next",
"save": "Save",
"saveEdit": "Save changes"
},
"nl": {
"button": "Describe"
},
"steps": {
"step1": {
"name": {
"label": "Name",
"placeholder": "e.g. Mounjaro, Ibuprofen, Vitamin D"
},
"dose": {
"amount": {
"label": "Dose",
"placeholder": "e.g. 5"
},
"unit": {
"label": "Unit",
"mg": "mg",
"g": "g",
"ml": "ml",
"iu": "IU",
"tablets": "tablets",
"drops": "drops",
"puffs": "puffs",
"sprays": "sprays",
"capsules": "capsules",
"pieces": "pieces",
"other": "other"
}
},
"naturalLanguage": {
"button": "✨ Describe it",
"placeholderCopy": "Type the medication in your own words and we will pre-fill the wizard."
}
"title": "What's the medication called?",
"subline": "Exactly as it appears on the box.",
"label": "Name",
"placeholder": "e.g. Ramipril"
},
"step2": {
"oneShot": {
"title": "One-time dose",
"description": "A single appointment — flu shot, vaccine, the last dose of a course."
},
"recurring": {
"title": "Recurring",
"description": "A medication you take on a schedule, daily or otherwise."
}
"title": "What kind of medication is it?",
"subline": "We use this for the right templates and analytics."
},
"step3": {
"helper": "Pick the pattern that matches how often you take it. Sub-options appear once you choose."
"title": "What's the dose?",
"subline": "A tablet, a puff, a drop — depending on the form.",
"amountLabel": "Amount",
"amountPlaceholder": "e.g. 5",
"unitLabel": "Unit",
"unit": {
"mg": "mg",
"ml": "ml",
"iu": "IU",
"mcg": "µg",
"g": "g",
"tablets": "tablet(s)",
"capsules": "capsule(s)",
"drops": "drops",
"puffs": "puff",
"sprays": "spray",
"pieces": "pieces",
"other": "other"
}
},
"step4": {
"recap": "Here's the cadence you picked. Tap Back if anything looks wrong.",
"oneShotSkipped": "(skipped — one-time dose)"
"title": "Over what period are you taking it?",
"subline": "A start date is enough for today. You can add an end date later."
},
"step5": {
"helper": "Add one or more times of day. Reminders fire at each entry.",
"oneShotDate": {
"label": "Date of the single dose",
"helper": "We use this date to schedule the reminder and to log the intake."
}
"title": "How often do you take it?",
"subline": "Pick the cadence — the details follow on the next step."
},
"step6": {
"helper": "The schedule runs from the start date. Leave the end date open if you take it indefinitely."
},
"step7": {
"reminders": {
"label": "Reminders on",
"description": "Send a push to your configured channels at every scheduled time."
"title": "What does that look like in detail?",
"subline": "Set weekdays, intervals, or the day of the month.",
"intervalWeeks": {
"label": "Every",
"suffix": "weeks"
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"weekly": "Once a week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"everyNMonthsDetail": ", every {months} months on day {day}.",
"yearlyDetail": ", on {date}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
"dayOfMonth": {
"label": "On",
"suffix": "day of the month"
},
"rollingDays": {
"label": "Every",
"suffix": "days from the last intake"
}
},
"nav": {
"back": "Back",
"next": "Next",
"create": "Create medication"
"step7": {
"title": "When do you take it?",
"subline": "One or more times of day — reminders follow this list.",
"presetsLabel": "Time-of-day presets",
"presets": {
"morning": "Morning",
"noon": "Noon",
"evening": "Evening",
"night": "Night"
}
},
"errors": {
"submitFailed": "Could not create the medication — please retry.",
"fieldRequired": "Required"
"step8": {
"title": "All done — should HealthLog remind you?",
"subline": "Review everything below before you save.",
"remindersLabel": "Reminders on",
"remindersDescription": "Push, Telegram or ntfy — based on your settings.",
"multiScheduleNote": "This medication has multiple schedules. The detailed editor returns in a later release."
}
},
"classRow": {
"bloodPressure": "Blood pressure",
"diabetes": "Diabetes",
"hormone": "Hormones",
"glp1": "GLP-1 injection",
"painRelief": "Pain",
"allergy": "Allergy",
"vitamin": "Vitamins",
"supplement": "Supplement",
"antibiotic": "Antibiotic",
"other": "Other"
},
"cadence": {
"daily": {
"label": "Daily",
"description": "Every day at the same time."
},
"weekdays": {
"label": "Specific weekdays",
"description": "E.g. Monday, Wednesday, Friday."
},
"everyNWeeks": {
"label": "Every few weeks",
"description": "E.g. every 2 weeks on Thursdays (GLP-1, biologics)."
},
"monthly": {
"label": "Monthly",
"description": "On a fixed day each month (e.g. always the 1st)."
},
"rolling": {
"label": "Flexible from last dose",
"description": "Leave the next dose open. When you tap 'taken', the counter starts again from that moment."
},
"oneShot": {
"label": "Single dose",
"description": "One administration, e.g. a vaccine or an antibiotic course."
}
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
},
"errors": {
"submitFailed": "Could not save the medication — please retry."
}
},
"titration": {
+137 -97
View File
@@ -477,6 +477,8 @@
"categoryDigestive": "Digestivo",
"categorySkin": "Cuidado de la piel",
"categorySleepAid": "Para dormir",
"categoryDiabetes": "Diabetes",
"categoryAntibiotic": "Antibiotic",
"categoryOther": "Otros",
"daysSun": "Do",
"daysMon": "Lu",
@@ -748,119 +750,157 @@
"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."
}
},
"create": {
"wizard": {
"page": {
"backToList": "Back to medications"
},
"header": {
"stepOf": "Step {current} of {total}",
"title": {
"step1": "What's the medication called and what's a single dose?",
"step2": "Is this a one-time dose, or do you take it regularly?",
"step3": "How often?",
"step4": "Anything special about the days?",
"step5": "What time(s) of day?",
"step6": "When does the schedule start? When does it end (if ever)?",
"step7": "Reminders and summary"
}
},
"wizard": {
"header": {
"stepOf": "Step {current} of {total}",
"createTitle": "New medication",
"editTitle": "Edit {name}"
},
"nav": {
"back": "Back",
"next": "Next",
"save": "Save",
"saveEdit": "Save changes"
},
"nl": {
"button": "Describe"
},
"steps": {
"step1": {
"name": {
"label": "Name",
"placeholder": "e.g. Mounjaro, Ibuprofen, Vitamin D"
},
"dose": {
"amount": {
"label": "Dose",
"placeholder": "e.g. 5"
},
"unit": {
"label": "Unit",
"mg": "mg",
"g": "g",
"ml": "ml",
"iu": "IU",
"tablets": "tablets",
"drops": "drops",
"puffs": "puffs",
"sprays": "sprays",
"capsules": "capsules",
"pieces": "pieces",
"other": "other"
}
},
"naturalLanguage": {
"button": "✨ Describe it",
"placeholderCopy": "Type the medication in your own words and we will pre-fill the wizard."
}
"title": "What's the medication called?",
"subline": "Exactly as it appears on the box.",
"label": "Name",
"placeholder": "e.g. Ramipril"
},
"step2": {
"oneShot": {
"title": "One-time dose",
"description": "A single appointment — flu shot, vaccine, the last dose of a course."
},
"recurring": {
"title": "Recurring",
"description": "A medication you take on a schedule, daily or otherwise."
}
"title": "What kind of medication is it?",
"subline": "We use this for the right templates and analytics."
},
"step3": {
"helper": "Pick the pattern that matches how often you take it. Sub-options appear once you choose."
"title": "What's the dose?",
"subline": "A tablet, a puff, a drop — depending on the form.",
"amountLabel": "Amount",
"amountPlaceholder": "e.g. 5",
"unitLabel": "Unit",
"unit": {
"mg": "mg",
"ml": "ml",
"iu": "IU",
"mcg": "µg",
"g": "g",
"tablets": "tablet(s)",
"capsules": "capsule(s)",
"drops": "drops",
"puffs": "puff",
"sprays": "spray",
"pieces": "pieces",
"other": "other"
}
},
"step4": {
"recap": "Here's the cadence you picked. Tap Back if anything looks wrong.",
"oneShotSkipped": "(skipped — one-time dose)"
"title": "Over what period are you taking it?",
"subline": "A start date is enough for today. You can add an end date later."
},
"step5": {
"helper": "Add one or more times of day. Reminders fire at each entry.",
"oneShotDate": {
"label": "Date of the single dose",
"helper": "We use this date to schedule the reminder and to log the intake."
}
"title": "How often do you take it?",
"subline": "Pick the cadence — the details follow on the next step."
},
"step6": {
"helper": "The schedule runs from the start date. Leave the end date open if you take it indefinitely."
},
"step7": {
"reminders": {
"label": "Reminders on",
"description": "Send a push to your configured channels at every scheduled time."
"title": "What does that look like in detail?",
"subline": "Set weekdays, intervals, or the day of the month.",
"intervalWeeks": {
"label": "Every",
"suffix": "weeks"
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"weekly": "Once a week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"everyNMonthsDetail": ", every {months} months on day {day}.",
"yearlyDetail": ", on {date}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
"dayOfMonth": {
"label": "On",
"suffix": "day of the month"
},
"rollingDays": {
"label": "Every",
"suffix": "days from the last intake"
}
},
"nav": {
"back": "Back",
"next": "Next",
"create": "Create medication"
"step7": {
"title": "When do you take it?",
"subline": "One or more times of day — reminders follow this list.",
"presetsLabel": "Time-of-day presets",
"presets": {
"morning": "Morning",
"noon": "Noon",
"evening": "Evening",
"night": "Night"
}
},
"errors": {
"submitFailed": "Could not create the medication — please retry.",
"fieldRequired": "Required"
"step8": {
"title": "All done — should HealthLog remind you?",
"subline": "Review everything below before you save.",
"remindersLabel": "Reminders on",
"remindersDescription": "Push, Telegram or ntfy — based on your settings.",
"multiScheduleNote": "This medication has multiple schedules. The detailed editor returns in a later release."
}
},
"classRow": {
"bloodPressure": "Blood pressure",
"diabetes": "Diabetes",
"hormone": "Hormones",
"glp1": "GLP-1 injection",
"painRelief": "Pain",
"allergy": "Allergy",
"vitamin": "Vitamins",
"supplement": "Supplement",
"antibiotic": "Antibiotic",
"other": "Other"
},
"cadence": {
"daily": {
"label": "Daily",
"description": "Every day at the same time."
},
"weekdays": {
"label": "Specific weekdays",
"description": "E.g. Monday, Wednesday, Friday."
},
"everyNWeeks": {
"label": "Every few weeks",
"description": "E.g. every 2 weeks on Thursdays (GLP-1, biologics)."
},
"monthly": {
"label": "Monthly",
"description": "On a fixed day each month (e.g. always the 1st)."
},
"rolling": {
"label": "Flexible from last dose",
"description": "Leave the next dose open. When you tap 'taken', the counter starts again from that moment."
},
"oneShot": {
"label": "Single dose",
"description": "One administration, e.g. a vaccine or an antibiotic course."
}
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
},
"errors": {
"submitFailed": "Could not save the medication — please retry."
}
},
"titration": {
+137 -97
View File
@@ -477,6 +477,8 @@
"categoryDigestive": "Digestif",
"categorySkin": "Soin de la peau",
"categorySleepAid": "Aide au sommeil",
"categoryDiabetes": "Diabetes",
"categoryAntibiotic": "Antibiotic",
"categoryOther": "Autres",
"daysSun": "Dim",
"daysMon": "Lun",
@@ -748,119 +750,157 @@
"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."
}
},
"create": {
"wizard": {
"page": {
"backToList": "Back to medications"
},
"header": {
"stepOf": "Step {current} of {total}",
"title": {
"step1": "What's the medication called and what's a single dose?",
"step2": "Is this a one-time dose, or do you take it regularly?",
"step3": "How often?",
"step4": "Anything special about the days?",
"step5": "What time(s) of day?",
"step6": "When does the schedule start? When does it end (if ever)?",
"step7": "Reminders and summary"
}
},
"wizard": {
"header": {
"stepOf": "Step {current} of {total}",
"createTitle": "New medication",
"editTitle": "Edit {name}"
},
"nav": {
"back": "Back",
"next": "Next",
"save": "Save",
"saveEdit": "Save changes"
},
"nl": {
"button": "Describe"
},
"steps": {
"step1": {
"name": {
"label": "Name",
"placeholder": "e.g. Mounjaro, Ibuprofen, Vitamin D"
},
"dose": {
"amount": {
"label": "Dose",
"placeholder": "e.g. 5"
},
"unit": {
"label": "Unit",
"mg": "mg",
"g": "g",
"ml": "ml",
"iu": "IU",
"tablets": "tablets",
"drops": "drops",
"puffs": "puffs",
"sprays": "sprays",
"capsules": "capsules",
"pieces": "pieces",
"other": "other"
}
},
"naturalLanguage": {
"button": "✨ Describe it",
"placeholderCopy": "Type the medication in your own words and we will pre-fill the wizard."
}
"title": "What's the medication called?",
"subline": "Exactly as it appears on the box.",
"label": "Name",
"placeholder": "e.g. Ramipril"
},
"step2": {
"oneShot": {
"title": "One-time dose",
"description": "A single appointment — flu shot, vaccine, the last dose of a course."
},
"recurring": {
"title": "Recurring",
"description": "A medication you take on a schedule, daily or otherwise."
}
"title": "What kind of medication is it?",
"subline": "We use this for the right templates and analytics."
},
"step3": {
"helper": "Pick the pattern that matches how often you take it. Sub-options appear once you choose."
"title": "What's the dose?",
"subline": "A tablet, a puff, a drop — depending on the form.",
"amountLabel": "Amount",
"amountPlaceholder": "e.g. 5",
"unitLabel": "Unit",
"unit": {
"mg": "mg",
"ml": "ml",
"iu": "IU",
"mcg": "µg",
"g": "g",
"tablets": "tablet(s)",
"capsules": "capsule(s)",
"drops": "drops",
"puffs": "puff",
"sprays": "spray",
"pieces": "pieces",
"other": "other"
}
},
"step4": {
"recap": "Here's the cadence you picked. Tap Back if anything looks wrong.",
"oneShotSkipped": "(skipped — one-time dose)"
"title": "Over what period are you taking it?",
"subline": "A start date is enough for today. You can add an end date later."
},
"step5": {
"helper": "Add one or more times of day. Reminders fire at each entry.",
"oneShotDate": {
"label": "Date of the single dose",
"helper": "We use this date to schedule the reminder and to log the intake."
}
"title": "How often do you take it?",
"subline": "Pick the cadence — the details follow on the next step."
},
"step6": {
"helper": "The schedule runs from the start date. Leave the end date open if you take it indefinitely."
},
"step7": {
"reminders": {
"label": "Reminders on",
"description": "Send a push to your configured channels at every scheduled time."
"title": "What does that look like in detail?",
"subline": "Set weekdays, intervals, or the day of the month.",
"intervalWeeks": {
"label": "Every",
"suffix": "weeks"
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"weekly": "Once a week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"everyNMonthsDetail": ", every {months} months on day {day}.",
"yearlyDetail": ", on {date}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
"dayOfMonth": {
"label": "On",
"suffix": "day of the month"
},
"rollingDays": {
"label": "Every",
"suffix": "days from the last intake"
}
},
"nav": {
"back": "Back",
"next": "Next",
"create": "Create medication"
"step7": {
"title": "When do you take it?",
"subline": "One or more times of day — reminders follow this list.",
"presetsLabel": "Time-of-day presets",
"presets": {
"morning": "Morning",
"noon": "Noon",
"evening": "Evening",
"night": "Night"
}
},
"errors": {
"submitFailed": "Could not create the medication — please retry.",
"fieldRequired": "Required"
"step8": {
"title": "All done — should HealthLog remind you?",
"subline": "Review everything below before you save.",
"remindersLabel": "Reminders on",
"remindersDescription": "Push, Telegram or ntfy — based on your settings.",
"multiScheduleNote": "This medication has multiple schedules. The detailed editor returns in a later release."
}
},
"classRow": {
"bloodPressure": "Blood pressure",
"diabetes": "Diabetes",
"hormone": "Hormones",
"glp1": "GLP-1 injection",
"painRelief": "Pain",
"allergy": "Allergy",
"vitamin": "Vitamins",
"supplement": "Supplement",
"antibiotic": "Antibiotic",
"other": "Other"
},
"cadence": {
"daily": {
"label": "Daily",
"description": "Every day at the same time."
},
"weekdays": {
"label": "Specific weekdays",
"description": "E.g. Monday, Wednesday, Friday."
},
"everyNWeeks": {
"label": "Every few weeks",
"description": "E.g. every 2 weeks on Thursdays (GLP-1, biologics)."
},
"monthly": {
"label": "Monthly",
"description": "On a fixed day each month (e.g. always the 1st)."
},
"rolling": {
"label": "Flexible from last dose",
"description": "Leave the next dose open. When you tap 'taken', the counter starts again from that moment."
},
"oneShot": {
"label": "Single dose",
"description": "One administration, e.g. a vaccine or an antibiotic course."
}
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
},
"errors": {
"submitFailed": "Could not save the medication — please retry."
}
},
"titration": {
+137 -97
View File
@@ -477,6 +477,8 @@
"categoryDigestive": "Digestivo",
"categorySkin": "Cura della pelle",
"categorySleepAid": "Per dormire",
"categoryDiabetes": "Diabetes",
"categoryAntibiotic": "Antibiotic",
"categoryOther": "Altro",
"daysSun": "Dom",
"daysMon": "Lun",
@@ -748,119 +750,157 @@
"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."
}
},
"create": {
"wizard": {
"page": {
"backToList": "Back to medications"
},
"header": {
"stepOf": "Step {current} of {total}",
"title": {
"step1": "What's the medication called and what's a single dose?",
"step2": "Is this a one-time dose, or do you take it regularly?",
"step3": "How often?",
"step4": "Anything special about the days?",
"step5": "What time(s) of day?",
"step6": "When does the schedule start? When does it end (if ever)?",
"step7": "Reminders and summary"
}
},
"wizard": {
"header": {
"stepOf": "Step {current} of {total}",
"createTitle": "New medication",
"editTitle": "Edit {name}"
},
"nav": {
"back": "Back",
"next": "Next",
"save": "Save",
"saveEdit": "Save changes"
},
"nl": {
"button": "Describe"
},
"steps": {
"step1": {
"name": {
"label": "Name",
"placeholder": "e.g. Mounjaro, Ibuprofen, Vitamin D"
},
"dose": {
"amount": {
"label": "Dose",
"placeholder": "e.g. 5"
},
"unit": {
"label": "Unit",
"mg": "mg",
"g": "g",
"ml": "ml",
"iu": "IU",
"tablets": "tablets",
"drops": "drops",
"puffs": "puffs",
"sprays": "sprays",
"capsules": "capsules",
"pieces": "pieces",
"other": "other"
}
},
"naturalLanguage": {
"button": "✨ Describe it",
"placeholderCopy": "Type the medication in your own words and we will pre-fill the wizard."
}
"title": "What's the medication called?",
"subline": "Exactly as it appears on the box.",
"label": "Name",
"placeholder": "e.g. Ramipril"
},
"step2": {
"oneShot": {
"title": "One-time dose",
"description": "A single appointment — flu shot, vaccine, the last dose of a course."
},
"recurring": {
"title": "Recurring",
"description": "A medication you take on a schedule, daily or otherwise."
}
"title": "What kind of medication is it?",
"subline": "We use this for the right templates and analytics."
},
"step3": {
"helper": "Pick the pattern that matches how often you take it. Sub-options appear once you choose."
"title": "What's the dose?",
"subline": "A tablet, a puff, a drop — depending on the form.",
"amountLabel": "Amount",
"amountPlaceholder": "e.g. 5",
"unitLabel": "Unit",
"unit": {
"mg": "mg",
"ml": "ml",
"iu": "IU",
"mcg": "µg",
"g": "g",
"tablets": "tablet(s)",
"capsules": "capsule(s)",
"drops": "drops",
"puffs": "puff",
"sprays": "spray",
"pieces": "pieces",
"other": "other"
}
},
"step4": {
"recap": "Here's the cadence you picked. Tap Back if anything looks wrong.",
"oneShotSkipped": "(skipped — one-time dose)"
"title": "Over what period are you taking it?",
"subline": "A start date is enough for today. You can add an end date later."
},
"step5": {
"helper": "Add one or more times of day. Reminders fire at each entry.",
"oneShotDate": {
"label": "Date of the single dose",
"helper": "We use this date to schedule the reminder and to log the intake."
}
"title": "How often do you take it?",
"subline": "Pick the cadence — the details follow on the next step."
},
"step6": {
"helper": "The schedule runs from the start date. Leave the end date open if you take it indefinitely."
},
"step7": {
"reminders": {
"label": "Reminders on",
"description": "Send a push to your configured channels at every scheduled time."
"title": "What does that look like in detail?",
"subline": "Set weekdays, intervals, or the day of the month.",
"intervalWeeks": {
"label": "Every",
"suffix": "weeks"
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"weekly": "Once a week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"everyNMonthsDetail": ", every {months} months on day {day}.",
"yearlyDetail": ", on {date}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
"dayOfMonth": {
"label": "On",
"suffix": "day of the month"
},
"rollingDays": {
"label": "Every",
"suffix": "days from the last intake"
}
},
"nav": {
"back": "Back",
"next": "Next",
"create": "Create medication"
"step7": {
"title": "When do you take it?",
"subline": "One or more times of day — reminders follow this list.",
"presetsLabel": "Time-of-day presets",
"presets": {
"morning": "Morning",
"noon": "Noon",
"evening": "Evening",
"night": "Night"
}
},
"errors": {
"submitFailed": "Could not create the medication — please retry.",
"fieldRequired": "Required"
"step8": {
"title": "All done — should HealthLog remind you?",
"subline": "Review everything below before you save.",
"remindersLabel": "Reminders on",
"remindersDescription": "Push, Telegram or ntfy — based on your settings.",
"multiScheduleNote": "This medication has multiple schedules. The detailed editor returns in a later release."
}
},
"classRow": {
"bloodPressure": "Blood pressure",
"diabetes": "Diabetes",
"hormone": "Hormones",
"glp1": "GLP-1 injection",
"painRelief": "Pain",
"allergy": "Allergy",
"vitamin": "Vitamins",
"supplement": "Supplement",
"antibiotic": "Antibiotic",
"other": "Other"
},
"cadence": {
"daily": {
"label": "Daily",
"description": "Every day at the same time."
},
"weekdays": {
"label": "Specific weekdays",
"description": "E.g. Monday, Wednesday, Friday."
},
"everyNWeeks": {
"label": "Every few weeks",
"description": "E.g. every 2 weeks on Thursdays (GLP-1, biologics)."
},
"monthly": {
"label": "Monthly",
"description": "On a fixed day each month (e.g. always the 1st)."
},
"rolling": {
"label": "Flexible from last dose",
"description": "Leave the next dose open. When you tap 'taken', the counter starts again from that moment."
},
"oneShot": {
"label": "Single dose",
"description": "One administration, e.g. a vaccine or an antibiotic course."
}
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
},
"errors": {
"submitFailed": "Could not save the medication — please retry."
}
},
"titration": {
+137 -97
View File
@@ -477,6 +477,8 @@
"categoryDigestive": "Trawienne",
"categorySkin": "Pielęgnacja skóry",
"categorySleepAid": "Na sen",
"categoryDiabetes": "Diabetes",
"categoryAntibiotic": "Antibiotic",
"categoryOther": "Inne",
"daysSun": "Nd",
"daysMon": "Pn",
@@ -748,119 +750,157 @@
"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."
}
},
"create": {
"wizard": {
"page": {
"backToList": "Back to medications"
},
"header": {
"stepOf": "Step {current} of {total}",
"title": {
"step1": "What's the medication called and what's a single dose?",
"step2": "Is this a one-time dose, or do you take it regularly?",
"step3": "How often?",
"step4": "Anything special about the days?",
"step5": "What time(s) of day?",
"step6": "When does the schedule start? When does it end (if ever)?",
"step7": "Reminders and summary"
}
},
"wizard": {
"header": {
"stepOf": "Step {current} of {total}",
"createTitle": "New medication",
"editTitle": "Edit {name}"
},
"nav": {
"back": "Back",
"next": "Next",
"save": "Save",
"saveEdit": "Save changes"
},
"nl": {
"button": "Describe"
},
"steps": {
"step1": {
"name": {
"label": "Name",
"placeholder": "e.g. Mounjaro, Ibuprofen, Vitamin D"
},
"dose": {
"amount": {
"label": "Dose",
"placeholder": "e.g. 5"
},
"unit": {
"label": "Unit",
"mg": "mg",
"g": "g",
"ml": "ml",
"iu": "IU",
"tablets": "tablets",
"drops": "drops",
"puffs": "puffs",
"sprays": "sprays",
"capsules": "capsules",
"pieces": "pieces",
"other": "other"
}
},
"naturalLanguage": {
"button": "✨ Describe it",
"placeholderCopy": "Type the medication in your own words and we will pre-fill the wizard."
}
"title": "What's the medication called?",
"subline": "Exactly as it appears on the box.",
"label": "Name",
"placeholder": "e.g. Ramipril"
},
"step2": {
"oneShot": {
"title": "One-time dose",
"description": "A single appointment — flu shot, vaccine, the last dose of a course."
},
"recurring": {
"title": "Recurring",
"description": "A medication you take on a schedule, daily or otherwise."
}
"title": "What kind of medication is it?",
"subline": "We use this for the right templates and analytics."
},
"step3": {
"helper": "Pick the pattern that matches how often you take it. Sub-options appear once you choose."
"title": "What's the dose?",
"subline": "A tablet, a puff, a drop — depending on the form.",
"amountLabel": "Amount",
"amountPlaceholder": "e.g. 5",
"unitLabel": "Unit",
"unit": {
"mg": "mg",
"ml": "ml",
"iu": "IU",
"mcg": "µg",
"g": "g",
"tablets": "tablet(s)",
"capsules": "capsule(s)",
"drops": "drops",
"puffs": "puff",
"sprays": "spray",
"pieces": "pieces",
"other": "other"
}
},
"step4": {
"recap": "Here's the cadence you picked. Tap Back if anything looks wrong.",
"oneShotSkipped": "(skipped — one-time dose)"
"title": "Over what period are you taking it?",
"subline": "A start date is enough for today. You can add an end date later."
},
"step5": {
"helper": "Add one or more times of day. Reminders fire at each entry.",
"oneShotDate": {
"label": "Date of the single dose",
"helper": "We use this date to schedule the reminder and to log the intake."
}
"title": "How often do you take it?",
"subline": "Pick the cadence — the details follow on the next step."
},
"step6": {
"helper": "The schedule runs from the start date. Leave the end date open if you take it indefinitely."
},
"step7": {
"reminders": {
"label": "Reminders on",
"description": "Send a push to your configured channels at every scheduled time."
"title": "What does that look like in detail?",
"subline": "Set weekdays, intervals, or the day of the month.",
"intervalWeeks": {
"label": "Every",
"suffix": "weeks"
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"weekly": "Once a week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"everyNMonthsDetail": ", every {months} months on day {day}.",
"yearlyDetail": ", on {date}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
"dayOfMonth": {
"label": "On",
"suffix": "day of the month"
},
"rollingDays": {
"label": "Every",
"suffix": "days from the last intake"
}
},
"nav": {
"back": "Back",
"next": "Next",
"create": "Create medication"
"step7": {
"title": "When do you take it?",
"subline": "One or more times of day — reminders follow this list.",
"presetsLabel": "Time-of-day presets",
"presets": {
"morning": "Morning",
"noon": "Noon",
"evening": "Evening",
"night": "Night"
}
},
"errors": {
"submitFailed": "Could not create the medication — please retry.",
"fieldRequired": "Required"
"step8": {
"title": "All done — should HealthLog remind you?",
"subline": "Review everything below before you save.",
"remindersLabel": "Reminders on",
"remindersDescription": "Push, Telegram or ntfy — based on your settings.",
"multiScheduleNote": "This medication has multiple schedules. The detailed editor returns in a later release."
}
},
"classRow": {
"bloodPressure": "Blood pressure",
"diabetes": "Diabetes",
"hormone": "Hormones",
"glp1": "GLP-1 injection",
"painRelief": "Pain",
"allergy": "Allergy",
"vitamin": "Vitamins",
"supplement": "Supplement",
"antibiotic": "Antibiotic",
"other": "Other"
},
"cadence": {
"daily": {
"label": "Daily",
"description": "Every day at the same time."
},
"weekdays": {
"label": "Specific weekdays",
"description": "E.g. Monday, Wednesday, Friday."
},
"everyNWeeks": {
"label": "Every few weeks",
"description": "E.g. every 2 weeks on Thursdays (GLP-1, biologics)."
},
"monthly": {
"label": "Monthly",
"description": "On a fixed day each month (e.g. always the 1st)."
},
"rolling": {
"label": "Flexible from last dose",
"description": "Leave the next dose open. When you tap 'taken', the counter starts again from that moment."
},
"oneShot": {
"label": "Single dose",
"description": "One administration, e.g. a vaccine or an antibiotic course."
}
},
"summary": {
"title": "Summary",
"cadence": {
"daily": "Every day",
"weekdays": "On selected days of the week",
"biweekly": "Every two weeks",
"monthly": "Monthly",
"quarterly": "Every three months",
"yearly": "Once a year",
"rolling": "Every {n} days from your last intake",
"oneShot": "A single dose",
"everyNWeeks": "Every {n} weeks",
"everyNMonths": "Every {n} months"
},
"weekdaysDetail": ", on {days}",
"dayOfMonthDetail": ", on day {day}.",
"times": "at {times}",
"startsOn": "Starts: {date}",
"endsOn": "Ends: {date}",
"noEndDate": "No end date"
},
"errors": {
"submitFailed": "Could not save the medication — please retry."
}
},
"titration": {
@@ -252,12 +252,12 @@ describe("i18n locale file integrity", () => {
"targets.status.normal",
"targets.status.optimal",
"targets.status.fitness",
// v1.5 medication scheduling — SI-unit abbreviations the wizard
// v1.5.4 modal wizard — SI-unit abbreviations the wizard
// surfaces in its dose-unit dropdown. The labels are identical
// across every locale (mg / g / ml are universal SI tokens).
"medications.create.wizard.step1.dose.unit.mg",
"medications.create.wizard.step1.dose.unit.g",
"medications.create.wizard.step1.dose.unit.ml",
// across every locale (mg / ml / g are universal SI tokens).
"medications.wizard.steps.step3.unit.mg",
"medications.wizard.steps.step3.unit.ml",
"medications.wizard.steps.step3.unit.g",
]);
it.each(ALL_LOCALES)("$locale locale has no empty values", ({ path }) => {