La internacionalización (i18n) es el proceso de diseñar una aplicación para que sea fácilmente adaptable a diferentes idiomas y regiones sin cambios de ingeniería. En este artículo, aprenderá cómo configurar i18n en una aplicación Next.js y crear un selector de idioma para alternar entre inglés y español usando next-intl.
Primero, debe instalar la biblioteca next-intl, que facilita la gestión de la internacionalización en Next.js. Ejecute el siguiente comando en su terminal:
npm install next-intl
La estructura del proyecto será la siguiente:
├── messages │ ├── en.json │ └── es.json ├── next.config.mjs └── src ├── i18n.ts ├── middleware.ts └── app └── [locale] ├── layout.tsx └── page.tsx
Crea un directorio de mensajes en la raíz de tu proyecto. Dentro de este directorio, agregue archivos JSON para cada idioma que desee admitir.
{ "greeting": "Hello Codú", "farewell": "Goodbye Codú" }
{ "greeting": "Hello Codú", "farewell": "Goodbye Codú" }
Estos archivos contienen las traducciones de las frases que utilizará tu aplicación.
Configure Next.js para admitir la internacionalización en next.config.mjs.
import { getRequestConfig } from 'next-intl/server'; // List of supported languages const locales = ['en', 'es']; export default getRequestConfig(async ({ locale }) => { // Validate that the incoming `locale` parameter is valid if (!locales.includes(locale)) { return { notFound: true }; } return { messages: (await import(`./messages/${locale}.json`)).default }; });
Este archivo configura Next.js para cargar los mensajes de traducción correctos según el idioma solicitado.
Crear middleware para manejar la redirección y configurar el idioma predeterminado.
import createMiddleware from 'next-intl/middleware'; export default createMiddleware({ // List of all supported languages locales: ['en', 'es'], // Default language defaultLocale: 'en' }); export const config = { // Only match internationalised pathnames matcher: ['/', '/(en|es)/:path*'] };
Este middleware maneja la redirección al idioma predeterminado si no se especifica ninguno.
Crea un archivo de configuración para administrar la configuración de internacionalización.
import { notFound } from 'next/navigation'; import { getRequestConfig } from 'next-intl/server'; const locales = ['en', 'es']; export default getRequestConfig(async ({ locale }) => { if (!locales.includes(locale as any)) notFound(); return { messages: (await import(`../messages/${locale}.json`)).default }; });
Este archivo valida las configuraciones regionales y carga los mensajes correspondientes.
Configurar el diseño y la página principal para admitir la internacionalización.
import { useLocale } from 'next-intl'; import { ReactNode } from 'react'; export default function Layout({ children }: { children: ReactNode }) { const locale = useLocale(); return ( {children} ); }
import { useTranslations } from 'next-intl'; export default function Page() { const t = useTranslations(); return (); }{t('greeting')}
{t('farewell')}
Estos archivos configuran el diseño y la página principal para usar las traducciones.
Finalmente, crea un selector de idioma para alternar entre inglés y español.
'use client'; import { useLocale } from 'next-intl'; import { useRouter } from 'next/navigation'; import { ChangeEvent, useTransition } from 'react'; export default function LocalSwitcher() { const [isPending, startTransition] = useTransition(); const router = useRouter(); const localActive = useLocale(); const onSelectChange = (e: ChangeEvent) => { const nextLocale = e.target.value; startTransition(() => { router.replace(`/${nextLocale}`); }); }; return ( ); }
Este componente permite a los usuarios cambiar el idioma de la interfaz.
Con estos pasos, has configurado exitosamente la internacionalización en tu aplicación Next.js y has creado un selector de idiomas para alternar entre inglés y español. Esto permitirá que su aplicación admita varios idiomas y proporcione una experiencia de usuario localizada.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3