|Labs
Agenda una demoPlataforma
React (Lingo Compiler)
Alpha
React (MCP)React (i18n)CLI anterior (v0)
Obsoleto

Lingo.dev Compiler

  • Cómo funciona
  • Configuración
  • Primeros pasos con Compiler

Frameworks

  • Integración con Next.js
  • Vite + React

Guías

  • Cambio de idioma
  • Pluralización automática
  • Anulaciones manuales
  • Modos de compilación
  • Estructura del proyecto
  • Proveedores de traducción
  • Resolvers de idioma personalizados
  • Herramientas de desarrollo

Referencia

  • Mejores prácticas
  • Referencia de configuración
  • Solución de problemas
  • Guía de migración
  • Optimización
  • Formatos de salida

Resolvers de idioma personalizados

Alfa

El Compiler de Lingo.dev está en alfa. Es inestable, no se recomienda para producción y las API pueden cambiar entre versiones.

Los resolvers de idioma personalizados te permiten anular la forma en que el Compiler de Lingo.dev detecta y persiste el idioma del usuario. De forma predeterminada, el Compiler usa persistencia basada en cookies configurada mediante la opción localePersistence. Si necesitas más control —enrutamiento por URL, detección por encabezados, localStorage o cualquier lógica personalizada— crea archivos resolver en el directorio .lingo/.

Archivos resolver#

El Compiler busca dos archivos opcionales:

ArchivoEntornoExportaciones
.lingo/locale-resolver.server.tsDel lado del servidor (SSR, RSC)resolveLocale(request: Request): string
.lingo/locale-resolver.client.tsDel lado del cliente (navegador)resolveLocale(): string y persistLocale(locale: string): void

Si existe un archivo resolver, el Compiler lo usa en lugar del comportamiento predeterminado basado en cookies. Si solo existe uno, el otro entorno vuelve al comportamiento predeterminado.

Resolver del lado del servidor#

El resolver del servidor recibe el objeto Request entrante y devuelve una cadena con el código de idioma:

ts
// .lingo/locale-resolver.server.ts

export function resolveLocale(request: Request): string {
  const url = new URL(request.url);

  // Check URL path prefix: /es/about -> "es"
  const pathLocale = url.pathname.split("/")[1];
  const supportedLocales = ["en", "es", "de", "fr", "ja"];

  if (supportedLocales.includes(pathLocale)) {
    return pathLocale;
  }

  // Fall back to Accept-Language header
  const acceptLanguage = request.headers.get("Accept-Language");
  if (acceptLanguage) {
    const preferred = acceptLanguage.split(",")[0].split("-")[0];
    if (supportedLocales.includes(preferred)) {
      return preferred;
    }
  }

  return "en";
}

Resolver del lado del cliente#

El resolver del cliente tiene dos funciones: una para leer el idioma actual y otra para persistir un cambio de idioma:

ts
// .lingo/locale-resolver.client.ts

export function resolveLocale(): string {
  // Check URL path prefix
  const pathLocale = window.location.pathname.split("/")[1];
  const supportedLocales = ["en", "es", "de", "fr", "ja"];

  if (supportedLocales.includes(pathLocale)) {
    return pathLocale;
  }

  // Fall back to localStorage
  const stored = localStorage.getItem("locale");
  if (stored && supportedLocales.includes(stored)) {
    return stored;
  }

  return "en";
}

export function persistLocale(locale: string): void {
  localStorage.setItem("locale", locale);

  // Navigate to the locale-prefixed URL
  const path = window.location.pathname.replace(/^\/[a-z]{2}/, "");
  window.location.href = `/${locale}${path}`;
}

Patrones comunes de resolvers#

Enruta por prefijo en la ruta URL (/es/about, /de/pricing):

ts
// .lingo/locale-resolver.server.ts
export function resolveLocale(request: Request): string {
  const url = new URL(request.url);
  const locale = url.pathname.split("/")[1];
  const supported = ["en", "es", "de", "fr"];
  return supported.includes(locale) ? locale : "en";
}
ts
// .lingo/locale-resolver.client.ts
export function resolveLocale(): string {
  const locale = window.location.pathname.split("/")[1];
  const supported = ["en", "es", "de", "fr"];
  return supported.includes(locale) ? locale : "en";
}

export function persistLocale(locale: string): void {
  const path = window.location.pathname.replace(/^\/[a-z]{2}/, "");
  window.location.href = `/${locale}${path}`;
}

La función resolveLocale debe devolver un código de idioma que coincida con uno de tus targetLocales o sourceLocale configurados. Si devuelve un código de idioma no compatible, el Compiler recurre al idioma de origen.

Siguientes pasos#

Cambio de idioma
Crea un componente selector de idioma
Referencia de configuración
Opciones de localePersistence
Estructura del proyecto
La estructura del directorio .lingo/
Integración con Next.js
Resolución del idioma del lado del servidor en Next.js

¿Te resultó útil esta página?

Max PrilutskiyMax Prilutskiy·Actualizado hace 4 meses·3 min de lectura