Fix: echte Umlaute in Einstellungen-UI
Sichtbare Texte in einstellungen/page.tsx und settings-tabs.tsx von ASCII-Ersatz (ae/oe/ue/ss) auf echte Umlaute (ä/ö/ü/ß) umgestellt: Ernährung, Präferenzen, persönlich, Straße, Eiweiß, Kochvorgänge, Passwörter, für, über, groß u. a. Tab-id-Slug "ernaehrung" bleibt ASCII (URL-Parameter). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
36b92c07b7
commit
e54a2ac223
2 changed files with 18 additions and 18 deletions
|
|
@ -11,8 +11,8 @@ export type SettingsTabId =
|
|||
| "anwendung";
|
||||
|
||||
const tabs: { id: SettingsTabId; label: string; description: string }[] = [
|
||||
{ id: "profil", label: "Profil", description: "Persoenliche Daten und Kontakt" },
|
||||
{ id: "ernaehrung", label: "Ernaehrung", description: "Rezept- und Mahlzeiten-Praeferenzen" },
|
||||
{ id: "profil", label: "Profil", description: "Persönliche Daten und Kontakt" },
|
||||
{ id: "ernaehrung", label: "Ernährung", description: "Rezept- und Mahlzeiten-Präferenzen" },
|
||||
{ id: "ziele", label: "Ziele", description: "Kalorien, Makros, Gewicht, Fasten" },
|
||||
{ id: "sicherheit", label: "Sicherheit", description: "2FA, Passkeys, Passwort" },
|
||||
{ id: "anwendung", label: "Anwendung", description: "Erscheinungsbild und Erinnerungen" },
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ async function toOptimizedAvatarDataUrl(file: File) {
|
|||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
const ctx = canvas.getContext("2d");
|
||||
if (!ctx) throw new Error("Canvas nicht verfuegbar");
|
||||
if (!ctx) throw new Error("Canvas nicht verfügbar");
|
||||
|
||||
ctx.drawImage(bitmap, 0, 0, width, height);
|
||||
bitmap.close();
|
||||
|
|
@ -67,7 +67,7 @@ async function toOptimizedAvatarDataUrl(file: File) {
|
|||
throw new Error("Profilbild konnte nicht verarbeitet werden.");
|
||||
}
|
||||
if (dataUrl.length > 120_000) {
|
||||
throw new Error("Profilbild ist nach Komprimierung noch zu gross.");
|
||||
throw new Error("Profilbild ist nach Komprimierung noch zu groß.");
|
||||
}
|
||||
return dataUrl;
|
||||
}
|
||||
|
|
@ -175,7 +175,7 @@ export default function EinstellungenPage() {
|
|||
onSuccess: async () => {
|
||||
await healthOverviewQuery.refetch();
|
||||
await utils.health.recipeRecommendations.invalidate();
|
||||
setStatusMessage("Essenspraeferenzen gespeichert.");
|
||||
setStatusMessage("Essenspräferenzen gespeichert.");
|
||||
setErrorMessage(null);
|
||||
},
|
||||
onError: (error) => {
|
||||
|
|
@ -289,11 +289,11 @@ export default function EinstellungenPage() {
|
|||
|
||||
async function handleImageUpload(file: File) {
|
||||
if (!file.type.startsWith("image/")) {
|
||||
setErrorMessage("Bitte eine Bilddatei auswaehlen.");
|
||||
setErrorMessage("Bitte eine Bilddatei auswählen.");
|
||||
return;
|
||||
}
|
||||
if (file.size > 5 * 1024 * 1024) {
|
||||
setErrorMessage("Profilbild ist zu gross. Maximal 5 MB.");
|
||||
setErrorMessage("Profilbild ist zu groß. Maximal 5 MB.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
|
@ -333,7 +333,7 @@ export default function EinstellungenPage() {
|
|||
return (
|
||||
<DataPageLayout
|
||||
title="Einstellungen"
|
||||
description="Profil, Sicherheit und persoenliche Vorlieben"
|
||||
description="Profil, Sicherheit und persönliche Vorlieben"
|
||||
>
|
||||
<div className="space-y-6">
|
||||
<SettingsTabs active={active} onChange={setActive} />
|
||||
|
|
@ -349,7 +349,7 @@ export default function EinstellungenPage() {
|
|||
{active === "profil" ? (
|
||||
<SectionCard
|
||||
title="Mein Profil"
|
||||
description="Persoenliche Daten und Kontakt. E-Mail-Aenderung erfolgt ueber das Konto."
|
||||
description="Persönliche Daten und Kontakt. E-Mail-Änderung erfolgt über das Konto."
|
||||
footer={
|
||||
<div className="flex justify-end">
|
||||
<button
|
||||
|
|
@ -447,12 +447,12 @@ export default function EinstellungenPage() {
|
|||
/>
|
||||
</div>
|
||||
<div className="sm:col-span-2">
|
||||
<label className={labelClass}>Strasse und Hausnummer</label>
|
||||
<label className={labelClass}>Straße und Hausnummer</label>
|
||||
<input
|
||||
className={inputClass}
|
||||
value={street}
|
||||
onChange={(event) => setStreet(event.target.value)}
|
||||
placeholder="Strasse und Hausnummer"
|
||||
placeholder="Straße und Hausnummer"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
|
|
@ -480,7 +480,7 @@ export default function EinstellungenPage() {
|
|||
|
||||
{active === "ernaehrung" ? (
|
||||
<SectionCard
|
||||
title="Rezept- und Mahlzeiten-Praeferenzen"
|
||||
title="Rezept- und Mahlzeiten-Präferenzen"
|
||||
description="Beeinflusst Vorschlaege und automatische Wochenplanung."
|
||||
footer={
|
||||
<div className="flex justify-end">
|
||||
|
|
@ -490,13 +490,13 @@ export default function EinstellungenPage() {
|
|||
disabled={updateHealthProfile.isPending}
|
||||
className={buttonPrimary}
|
||||
>
|
||||
Praeferenzen speichern
|
||||
Präferenzen speichern
|
||||
</button>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<div>
|
||||
<p className={labelClass}>Ernaehrung</p>
|
||||
<p className={labelClass}>Ernährung</p>
|
||||
<div className="grid grid-cols-2 gap-2 sm:grid-cols-4">
|
||||
{dietPreferenceOptions.map((option) => {
|
||||
const selected = dietPreferences.includes(option.id);
|
||||
|
|
@ -528,7 +528,7 @@ export default function EinstellungenPage() {
|
|||
/>
|
||||
</label>
|
||||
<label className="block">
|
||||
<span className={labelClass}>Kochvorgaenge/Tag</span>
|
||||
<span className={labelClass}>Kochvorgänge/Tag</span>
|
||||
<input
|
||||
className={inputClass}
|
||||
inputMode="numeric"
|
||||
|
|
@ -580,7 +580,7 @@ export default function EinstellungenPage() {
|
|||
},
|
||||
{
|
||||
icon: ScaleIcon,
|
||||
label: "Makros (KH / Fett / Eiweiss)",
|
||||
label: "Makros (KH / Fett / Eiweiß)",
|
||||
value: `${healthGoals?.carbs ?? 200} / ${healthGoals?.fat ?? 67} / ${
|
||||
healthGoals?.protein ?? 150
|
||||
} g`,
|
||||
|
|
@ -659,7 +659,7 @@ export default function EinstellungenPage() {
|
|||
</p>
|
||||
) : (
|
||||
<p className="mt-1 text-xs text-gray-500">
|
||||
Empfohlen, besonders fuer Admin-Accounts.
|
||||
Empfohlen, besonders für Admin-Accounts.
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
|
@ -780,7 +780,7 @@ export default function EinstellungenPage() {
|
|||
/>
|
||||
{passwordMismatch ? (
|
||||
<p className="text-xs text-red-600">
|
||||
Die neuen Passwoerter stimmen nicht ueberein.
|
||||
Die neuen Passwörter stimmen nicht überein.
|
||||
</p>
|
||||
) : null}
|
||||
</SectionCard>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue