Next.js-API
tyndale-next fügt auf tyndale-react aufbauend Next.js-spezifische Verdrahtung hinzu.
Importpfade
Abschnitt betitelt „Importpfade“tyndale-next— App-seitige Hilfsfunktionen und Komponententyndale-next/server— server-sichere Exporte für RSC-Codetyndale-next/config— Next-Config-Wrappertyndale-next/middleware— Middleware für Locale-Routing
App Router-Grundlagen
Abschnitt betitelt „App Router-Grundlagen“TyndaleServerProvider
Abschnitt betitelt „TyndaleServerProvider“Server-Komponente, die public/_tyndale/{locale}.json und manifest.json von der Festplatte liest und den Client-Provider hydriert.
import { TyndaleServerProvider } from 'tyndale-next/server';
export default async function LocaleLayout({ children, params,}: { children: React.ReactNode; params: Promise<{ locale: string }>;}) { const { locale } = await params;
return ( <html lang={locale}> <body> <TyndaleServerProvider locale={locale}>{children}</TyndaleServerProvider> </body> </html> );}Props
locale: stringchildren: React.ReactNode
Hinweise:
- Liest die Standard-Locale aus
TYNDALE_DEFAULT_LOCALE. - Liest die Übersetzungsausgabe aus
TYNDALE_OUTPUToderpublic/_tyndale. - Setzt
<html dir>nicht für dich. VerwendeuseDirection()auf dem Client odergetDirection(locale)auf dem Server.
TyndaleNextClientProvider
Abschnitt betitelt „TyndaleNextClientProvider“Client-Wrapper um TyndaleProvider. Er verbindet useChangeLocale() mit der Next-Navigation, indem eine URL mit Locale-Präfix gepusht wird.
Die meisten Apps sollten TyndaleServerProvider verwenden, statt diesen Wrapper direkt zu mounten.
'use client';
import { TyndaleNextClientProvider } from 'tyndale-next';
export function Providers({ children, locale, defaultLocale, translations, manifest,}: { children: React.ReactNode; locale: string; defaultLocale: string; translations: Record<string, string>; manifest: Record<string, unknown> | null;}) { return ( <TyndaleNextClientProvider locale={locale} defaultLocale={defaultLocale} translations={translations} manifest={manifest} > {children} </TyndaleNextClientProvider> );}generateStaticLocaleParams()
Abschnitt betitelt „generateStaticLocaleParams()“Gibt Locale-Parameter für generateStaticParams() zurück, indem tyndale.config.json gelesen wird.
import { generateStaticLocaleParams } from 'tyndale-next/server';
export function generateStaticParams() { return generateStaticLocaleParams();}Rückgabeform:
Array<{ locale: string }>Das Ergebnis enthält zuerst die Standard-Locale und danach jede Locale in locales.
Konfiguration
Abschnitt betitelt „Konfiguration“withTyndaleConfig(nextConfig)
Abschnitt betitelt „withTyndaleConfig(nextConfig)“Umschließt deine Next-Config und fügt die Runtime-Umgebungsvariablen ein, die Tyndale zur Build- und Request-Zeit liest.
import { withTyndaleConfig } from 'tyndale-next/config';
export default withTyndaleConfig({ reactStrictMode: true,});Was hinzugefügt wird:
TYNDALE_DEFAULT_LOCALETYNDALE_LOCALESTYNDALE_COOKIE_NAMETYNDALE_LOCALE_ALIASESTYNDALE_OUTPUT- ein webpack-Alias, damit Server und Client dieselbe
tyndale-react-Instanz auflösen
Middleware
Abschnitt betitelt „Middleware“createTyndaleMiddleware()
Abschnitt betitelt „createTyndaleMiddleware()“Erstellt die Next-Middleware, die das Locale-Routing behandelt.
import { createTyndaleMiddleware } from 'tyndale-next/middleware';
export default createTyndaleMiddleware();
export const config = { matcher: ['/((?!api|_next|_tyndale|.*\\..*).*)'],};Verhalten in dieser Reihenfolge:
- Verwendet die Locale in der URL, wenn vorhanden.
- Fällt auf das Locale-Cookie zurück.
- Fällt auf den
Accept-Language-Header zurück. - Fällt auf
defaultLocalezurück.
Außerdem:
- leitet Alias-Locales auf ihre kanonische Locale um
- leitet nicht unterstützte Locale-Präfixe auf die Standard-Locale um
- setzt einen
x-tyndale-locale-Request-Header für gültige Routen mit Locale-Präfix - speichert die gewählte Locale im
TYNDALE_LOCALE-Cookie
Richtungs- und Locale-Helfer
Abschnitt betitelt „Richtungs- und Locale-Helfer“useDirection()
Abschnitt betitelt „useDirection()“Client-Hook, der für die aktuelle Locale 'ltr' oder 'rtl' zurückgibt.
'use client';
import { useDirection } from 'tyndale-next';
export function HtmlShell({ children }: { children: React.ReactNode }) { const dir = useDirection(); return <div dir={dir}>{children}</div>;}getDirection(locale)
Abschnitt betitelt „getDirection(locale)“Server-sicherer Helfer, der für einen Locale-String 'ltr' oder 'rtl' zurückgibt.
import { getDirection } from 'tyndale-next/server';
const dir = getDirection(locale);isRtlLocale(locale)
Abschnitt betitelt „isRtlLocale(locale)“Gibt true zurück, wenn die Locale eine Rechts-nach-links-Schrift verwendet.
import { isRtlLocale } from 'tyndale-next/server';
isRtlLocale('ar'); // trueisRtlLocale('en-US'); // falseresolveAlias(locale, aliases)
Abschnitt betitelt „resolveAlias(locale, aliases)“Ordnet einen Locale-Alias seiner kanonischen Locale zu.
import { resolveAlias } from 'tyndale-next/server';
resolveAlias('pt-BR', { 'pt-BR': 'pt' }); // 'pt'Cache-Boundary
Abschnitt betitelt „Cache-Boundary“TyndaleCache
Abschnitt betitelt „TyndaleCache“Client-Cache-Boundary für übersetzte Inhalte in gemeinsam genutzten Layouts. Der Cache-Schlüssel ist sowohl durch id als auch durch die aktuelle Locale abgegrenzt.
import { TyndaleCache } from 'tyndale-next';import { T } from 'tyndale-react';
<TyndaleCache id="footer-copy"> <T>Documentation, guides, and examples.</T></TyndaleCache>Verwende dies für wiederholte übersetzte UI in Layouts, die während der Navigation neu gerendert werden. Verwende es nicht als allgemeinen Daten-Cache.