Mehrsprachige Oberfläche + lokalisierte Gericht-/Bereichsnamen
Alle Seiten und Komponenten (öffentliche Speisekarte, Login, Kantinen- und Admin-Bereich, eigenes Konto) verwenden jetzt die Wörterbücher aus lib/i18n statt fest codierter deutscher Texte. Gerichte/Bereiche/ Allergene/Zusatzstoffe zeigen den Namen zur aktuell gewählten Sprache; Gerichte- und Kennzeichnungs-Formulare bekommen Englisch-/Polnisch- Felder mit Übersetzen-Button (siehe vorherigen Commit). Datumsformat- ierung (formatDateLong) nimmt jetzt ein locale-Argument statt fix 'de-DE'.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
"use client";
|
||||
|
||||
import type { CodeItem } from "@/lib/types";
|
||||
import { localized } from "@/lib/types";
|
||||
import { useDict, useLocale } from "@/components/i18n/LocaleProvider";
|
||||
|
||||
export default function ChipPicker({
|
||||
items,
|
||||
@@ -13,15 +15,19 @@ export default function ChipPicker({
|
||||
onToggle: (code: string) => void;
|
||||
label: string;
|
||||
}) {
|
||||
const dict = useDict();
|
||||
const locale = useLocale();
|
||||
|
||||
return (
|
||||
<div>
|
||||
<label className="label">{label}</label>
|
||||
{items.length === 0 ? (
|
||||
<p className="text-sm text-gray-400">Keine Einträge vorhanden.</p>
|
||||
<p className="text-sm text-gray-400">{dict.codeList.empty}</p>
|
||||
) : (
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{items.map((item) => {
|
||||
const active = selected.includes(item.code);
|
||||
const name = localized(item, locale);
|
||||
return (
|
||||
<button
|
||||
key={item.code}
|
||||
@@ -29,9 +35,9 @@ export default function ChipPicker({
|
||||
onClick={() => onToggle(item.code)}
|
||||
className={`chip ${active ? "chip-active" : ""}`}
|
||||
aria-pressed={active}
|
||||
title={item.name}
|
||||
title={name}
|
||||
>
|
||||
<span className="font-semibold">{item.code}</span> {item.name}
|
||||
<span className="font-semibold">{item.code}</span> {name}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
|
||||
Reference in New Issue
Block a user