diff --git a/src/components/newsletter-signup.tsx b/src/components/newsletter-signup.tsx index 407543b..325eeba 100644 --- a/src/components/newsletter-signup.tsx +++ b/src/components/newsletter-signup.tsx @@ -63,10 +63,15 @@ export function NewsletterSignup({ turnstileSiteKey }: { turnstileSiteKey?: stri {status === "success" ? (

{t.home.newsletter.successMessage}

) : ( -
+ + {/* Eingabefeld und Knopf bilden die Zeile, das CAPTCHA steht + darunter. Frueher lagen alle drei in derselben Flex-Zeile + ohne flex-wrap: sobald das Widget tatsaechlich rendert, + belegte es rund 300 px der 512 px breiten Zeile und drueckte + das Eingabefeld auf 34 px zusammen. Solange kein Sitekey + gesetzt war, fiel das nicht auf, weil das Widget gar nicht + erst erschien. */} +
{status === "loading" ? t.home.newsletter.subscribing : t.home.newsletter.subscribe} +
{turnstileSiteKey ? ( -
+
) : null} diff --git a/src/components/turnstile-widget.tsx b/src/components/turnstile-widget.tsx index e3ff055..16c2d14 100644 --- a/src/components/turnstile-widget.tsx +++ b/src/components/turnstile-widget.tsx @@ -110,7 +110,7 @@ interface TurnstileWidgetProps { * Wiederholung unten. */ export function TurnstileWidget({ siteKey, onVerify }: TurnstileWidgetProps) { - const { t } = useI18n(); + const { t, locale } = useI18n(); const containerRef = useRef(null); const widgetIdRef = useRef(null); const onVerifyRef = useRef(onVerify); @@ -138,6 +138,15 @@ export function TurnstileWidget({ siteKey, onVerify }: TurnstileWidgetProps) { setFailed(false); widgetIdRef.current = turnstile.render(containerRef.current, { sitekey: siteKey, + // Ohne diese beiden Angaben richtet sich Turnstile nach dem BROWSER + // des Besuchers statt nach der Seite: die Beschriftung folgte der + // Browsersprache (englisches "Verify you are human" auf einer + // deutschen Seite) und die Farbgebung dem Farbschema des + // Betriebssystems. Wer sein System auf "dunkel" stehen hat, bekam + // deshalb einen schwarzen Kasten mitten in einen Abschnitt, den + // diese Seite ausschliesslich in Creme und Waldgruen zeichnet. + language: locale, + theme: "light", callback: (token: string) => onVerifyRef.current(token), // Ein abgelaufenes oder fehlgeschlagenes Token muss das Formular // erfahren, sonst schickt es ein laengst ungueltiges mit. @@ -164,7 +173,7 @@ export function TurnstileWidget({ siteKey, onVerify }: TurnstileWidgetProps) { console.warn("[turnstile] Widget konnte nicht entfernt werden:", error); } }; - }, [siteKey, attempt]); + }, [siteKey, attempt, locale]); // "max-w-full overflow-x-auto" ist kein Schoenheitsmittel, sondern eine // Zusicherung: Cloudflare liefert einen iframe mit FESTER Breite (rund