es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede ejecutar la aplicación de Next.js con internacionalización i18n en Docker.

La aplicación está escrita con TypeScript.
La compilación fue exitosa, pero cuando inicio el programa en localhost:3000, obtengo este error:

TypeError: La URL no está configurada con i18n
    en URL.get locale [según el local] (/app/.next/server/pages/_middleware.js:1:46515)

En mi Dockerfile, copié todos los archivos necesarios:

COPY package.json /app/package.json
COPY package-lock.json /app/package-lock.json
COPY next.config.js /app/next.config.js
COPY .next /app/.next 
COPY public /app/public

El archivo next.config.js contiene:

module.exports = {
  reactStrictMode: true,
  i18n: {
    locales: ["en", "fr"],
    defaultLocale: "en",
  },
};

En next.config.js, intenté agregar la función rewrites, pero aún obtengo el mismo error:

async rewrites() {
  return [
    {
      source: "/",
      destination: "/",
      locale: false, // Usar `locale: false` para que el prefijo coincida correctamente con el idioma deseado
    },
    {
      source: "/fr/test",
      destination: "/fr/test",
      locale: false, // Usar `locale: false` para que el prefijo coincida correctamente con el idioma deseado
    },
  ];
},

El archivo _middleware.ts contiene:

import { NextRequest, NextResponse } from "next/server";

const PUBLIC_FILE = /.(.*)$/;

export function middleware(request: NextRequest) {
  const shouldHandleLocale =
    !PUBLIC_FILE.test(request.nextUrl.pathname) &&
    !request.nextUrl.pathname.includes("/api/") &&
    request.nextUrl.locale === "default";

  return shouldHandleLocale
    ? NextResponse.redirect(`/en${request.nextUrl.href}`)
    : undefined;
}

Parece que el middleware no está funcionando.
¿Algún consejo útil o ideas?
Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que, según el mensaje de error, la aplicación no está configurada correctamente para la internacionalización. El mensaje de error específicamente indica que “La URL no está configurada con i18n”.

    El archivo next.config.js contiene la configuración necesaria de i18n, incluyendo las localidades (locales) y la localidad por defecto (defaultLocale). Sin embargo, es posible que la función rewrites no esté manejando correctamente el prefijo de la localidad.

    Otro posible problema podría estar en el archivo _middleware.ts. Parece que el middleware es responsable de manejar la localidad, pero no está del todo claro por qué no funciona. El middleware verifica si la solicitud debe manejar la localidad o no, y luego redirige a la localidad correspondiente utilizando NextResponse.redirect(). Es posible que el middleware no esté siendo invocado realmente, o que no esté redirigiendo correctamente a la localidad correcta.

    Para comenzar a depurar este problema, aquí hay algunas cosas que puedes intentar:

    • Verifica los registros del servidor para ver si hay mensajes de error más específicos que puedan indicar la causa del problema.
    • Intenta eliminar la función rewrites de next.config.js para ver si eso hace alguna diferencia.
    • Agrega algunas declaraciones console.log al archivo _middleware.ts para verificar que realmente esté siendo invocado y que la localidad correcta esté siendo detectada.
    • Asegúrate de que el archivo _middleware.ts esté correctamente registrado con Next.js.
    • Intenta simplificar la configuración de i18n en next.config.js para descartar cualquier problema de configuración.

    Esperemos que uno de estos pasos pueda ayudar a resolver el problema.

Comments are closed.