API de Next.js
tyndale-next añade integración específica de Next.js sobre tyndale-react.
Rutas de importación
Sección titulada «Rutas de importación»tyndale-next— utilidades y componentes orientados a la apptyndale-next/server— exportaciones seguras para servidor para código RSCtyndale-next/config— envoltorio de configuración de Nexttyndale-next/middleware— middleware de enrutamiento de locale
Fundamentos de App Router
Sección titulada «Fundamentos de App Router»TyndaleServerProvider
Sección titulada «TyndaleServerProvider»Componente de servidor que lee public/_tyndale/{locale}.json y manifest.json desde disco e hidrata el provider del cliente.
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> );}Propiedades
locale: stringchildren: React.ReactNode
Notas:
- Lee el locale predeterminado desde
TYNDALE_DEFAULT_LOCALE. - Lee la salida de traducciones desde
TYNDALE_OUTPUTopublic/_tyndale. - No establece
<html dir>por ti. UsauseDirection()en el cliente ogetDirection(locale)en el servidor.
TyndaleNextClientProvider
Sección titulada «TyndaleNextClientProvider»Envoltorio de cliente alrededor de TyndaleProvider. Conecta useChangeLocale() con la navegación de Next al hacer push de una URL con prefijo de locale.
La mayoría de las apps deberían usar TyndaleServerProvider en lugar de montar esto directamente.
'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()
Sección titulada «generateStaticLocaleParams()»Devuelve parámetros de locale para generateStaticParams() leyendo tyndale.config.json.
import { generateStaticLocaleParams } from 'tyndale-next/server';
export function generateStaticParams() { return generateStaticLocaleParams();}Estructura de retorno:
Array<{ locale: string }>El resultado incluye primero el locale predeterminado y luego cada locale en locales.
Configuración
Sección titulada «Configuración»withTyndaleConfig(nextConfig)
Sección titulada «withTyndaleConfig(nextConfig)»Envuelve tu configuración de Next e inyecta las variables de entorno en tiempo de ejecución que Tyndale lee en tiempo de build y de request.
import { withTyndaleConfig } from 'tyndale-next/config';
export default withTyndaleConfig({ reactStrictMode: true,});Qué agrega:
TYNDALE_DEFAULT_LOCALETYNDALE_LOCALESTYNDALE_COOKIE_NAMETYNDALE_LOCALE_ALIASESTYNDALE_OUTPUT- un alias de webpack para que servidor y cliente resuelvan la misma instancia de
tyndale-react
Middleware
Sección titulada «Middleware»createTyndaleMiddleware()
Sección titulada «createTyndaleMiddleware()»Crea el middleware de Next que maneja el enrutamiento de locale.
import { createTyndaleMiddleware } from 'tyndale-next/middleware';
export default createTyndaleMiddleware();
export const config = { matcher: ['/((?!api|_next|_tyndale|.*\\..*).*)'],};Comportamiento, en orden:
- Usa el locale de la URL cuando está presente.
- Si no, usa la cookie de locale.
- Si no, usa la cabecera
Accept-Language. - Si no, usa
defaultLocale.
También:
- redirige los aliases de locale a su locale canónico
- redirige prefijos de locale no soportados al locale predeterminado
- establece una cabecera de request
x-tyndale-localepara rutas válidas con prefijo de locale - persiste el locale elegido en la cookie
TYNDALE_LOCALE
Utilidades de dirección y locale
Sección titulada «Utilidades de dirección y locale»useDirection()
Sección titulada «useDirection()»Hook de cliente que devuelve 'ltr' o 'rtl' para el locale actual.
'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)
Sección titulada «getDirection(locale)»Utilidad segura para servidor que devuelve 'ltr' o 'rtl' para una cadena de locale.
import { getDirection } from 'tyndale-next/server';
const dir = getDirection(locale);isRtlLocale(locale)
Sección titulada «isRtlLocale(locale)»Devuelve true cuando el locale usa una escritura de derecha a izquierda.
import { isRtlLocale } from 'tyndale-next/server';
isRtlLocale('ar'); // trueisRtlLocale('en-US'); // falseresolveAlias(locale, aliases)
Sección titulada «resolveAlias(locale, aliases)»Mapea un alias de locale a su locale canónico.
import { resolveAlias } from 'tyndale-next/server';
resolveAlias('pt-BR', { 'pt-BR': 'pt' }); // 'pt'Límite de caché
Sección titulada «Límite de caché»TyndaleCache
Sección titulada «TyndaleCache»Límite de caché del cliente para contenido traducido en layouts compartidos. La clave de caché está delimitada tanto por id como por el locale actual.
import { TyndaleCache } from 'tyndale-next';import { T } from 'tyndale-react';
<TyndaleCache id="footer-copy"> <T>Documentation, guides, and examples.</T></TyndaleCache>Úsalo para UI traducida repetida en layouts que se vuelven a renderizar durante la navegación. No lo uses como caché de datos general.