Saltar al contenido principal
Todas las guías
Guía

Actualizaciones de traducciones over-the-air en Next.js

En una app de Next.js, los archivos de traducción se publican con cada despliegue. Esta guía los obtiene en el servidor desde tu última publicación de litei18n, así que un cambio de texto se publica sin volver a desplegar.

Pasos de configuración

  1. Crea una publicación

    En litei18n, confirma tus traducciones y crea una publicación en la página Releases (plan Starter o superior). Copia el ID de tu proyecto de la URL de la publicación que aparece allí. Exporta también tus traducciones en JSON y añádelas a tu app como copia incluida.

  2. Carga la publicación al iniciar la app

    Define LITEI18N_PROJECT_ID en tu entorno y guarda tus archivos JSON exportados en locales/ como respaldo. revalidate indica a Next.js que busque una nueva publicación como mucho cada cinco minutos.

    lib/translations.ts
    const PROJECT_ID = process.env.LITEI18N_PROJECT_ID;
    const RELEASES =
      'https://ttksowxkfdohtprtfarf.supabase.co/storage/v1/object/public/releases/locales';
    
    export async function getTranslations(locale: string): Promise<Record<string, string>> {
      try {
        const res = await fetch(`${RELEASES}/${PROJECT_ID}/latest/${locale}.json`, {
          next: { revalidate: 300 }, // look for a new release every 5 minutes
        });
        if (res.ok) return await res.json();
      } catch {
        // Network error: fall through to the bundled copy.
      }
      // The bundled copy, or English for a language you have not bundled.
      const bundled = await import(`../locales/${locale}.json`).catch(() => import('../locales/en.json'));
      return bundled.default;
    }
  3. Usa los textos

    Llama a getTranslations en un componente de servidor y lee las claves del objeto que devuelve. Next.js guarda el resultado en caché y obtiene la nueva publicación en segundo plano.

    app/[locale]/page.tsx
    import { getTranslations } from '@/lib/translations';
    
    export default async function Home({ params }: { params: Promise<{ locale: string }> }) {
      const { locale } = await params;
      const t = await getTranslations(locale);
      return <h1>{t['home.title']}</h1>;
    }
  4. Cambia textos sin una nueva build

    Edita una traducción, confírmala y crea una nueva publicación. La URL latest ya sirve el texto nuevo y tu app lo recoge la próxima vez que cargue las traducciones. Sin nueva build ni revisión en la tienda.

Conviene saber

  • Los archivos de las publicaciones se guardan en caché en una CDN, así que una nueva publicación puede tardar unos minutos en verse en todas partes.
  • Para fijar una versión de la app a una publicación concreta, usa la URL con versión (…/v3/es.json) en lugar de …/latest/es.json.
  • ¿Usas next-intl? Interpreta los puntos de las claves como anidación, así que convierte las claves planas en objetos anidados antes de pasárselas.

Empieza a enviar globalmente en 5 minutos

Únete a los desarrolladores que envían sus apps en todos los idiomas con litei18n.

Plan gratuito disponible · Sin tarjeta de crédito · Configuración en menos de 5 minutos