Cómo implementar la internacionalización en una aplicación Next.js que usa el Pages Router
Haz que tu aplicación React sea más accesible y llegue a nuevos mercados con la internacionalización (i18n).
A medida que el mundo se vuelve más globalizado, es cada vez más importante que los desarrolladores web creen aplicaciones que puedan atender a usuarios de distintos países y culturas. Una de las formas clave para lograr esto es la internacionalización (i18n), que te permite adaptar tu aplicación a diferentes idiomas, monedas y formatos de fecha.
En este tutorial, exploraremos cómo agregar internacionalización a tu aplicación React Next.js, con renderizado del lado del servidor. TL;DR: Consulta el ejemplo completo aquí.
Esta guía es para aplicaciones de Next.js que usan el Pages Router.
Si estás usando el App Router, por favor consulta esta guía en su lugar.
Paso 1: Instala una biblioteca de i18n
Para implementar la internacionalización en tu aplicación Next.js, primero elegiremos una biblioteca de i18n. Hay varias bibliotecas populares, incluyendo next-intl. Sin embargo, en este ejemplo, usaremos TacoTranslate.
TacoTranslate traduce automáticamente tus cadenas a cualquier idioma usando IA de vanguardia, y te libera de la tediosa gestión de archivos JSON.
Instalémoslo usando npm en tu terminal:
npm install tacotranslatePaso 2: Crea una cuenta gratuita en TacoTranslate
Ahora que ya tienes el módulo instalado, es momento de crear tu cuenta de TacoTranslate, un proyecto de traducción y las claves API asociadas. Crea una cuenta aquí. Es gratis y no requiere que agregues una tarjeta de crédito.
En la interfaz de la aplicación TacoTranslate, crea un proyecto y navega a la pestaña de claves de API. Crea una llave read y una llave read/write. Las guardaremos como variables de entorno. La llave read es lo que llamamos public y la llave read/write es secret. Por ejemplo, podrías agregarlas a un archivo .env en la raíz de tu proyecto.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Asegúrate de no filtrar nunca la clave de API secreta read/write a los entornos de producción del lado del cliente.
También agregaremos dos variables de entorno más: TACOTRANSLATE_DEFAULT_LOCALE y TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: El código de locale predeterminado de respaldo. En este ejemplo, lo estableceremos enenpara inglés.TACOTRANSLATE_ORIGIN: La “carpeta” donde se almacenarán tus cadenas, como la URL de tu sitio web. Lee más sobre los orígenes aquí.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comPaso 3: Configuración de TacoTranslate
Para integrar TacoTranslate con tu aplicación, necesitarás crear un cliente usando las claves de la API que obtuviste anteriormente. Por ejemplo, crea un archivo llamado /tacotranslate-client.js.
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY ??
'',
projectLocale: process.env.TACOTRANSLATE_DEFAULT_LOCALE ?? '',
});
module.exports = tacoTranslate;Definiremos automáticamente TACOTRANSLATE_API_KEY en breve.
Crear el cliente en un archivo separado facilita volver a usarlo más adelante. Ahora, usando un /pages/_app.tsx, agregaremos el proveedor TacoTranslate.
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';
type PageProperties = {
origin: Origin;
locale: Locale;
locales: Locale[];
localizations: Localizations;
};
export default function App({Component, pageProps}: AppProps<PageProperties>) {
const {origin, locale, locales, localizations} = pageProps;
return (
<TacoTranslate
client={tacoTranslate}
origin={origin}
locale={locale}
localizations={localizations}
>
<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
<Component {...pageProps} />
</TacoTranslate>
);
}Si ya tienes personalizados pageProps y _app.tsx, por favor extiende la definición con las propiedades y el código anteriores.
Paso 4: Implementación del renderizado del lado del servidor
TacoTranslate permite el renderizado del lado del servidor de tus traducciones. Esto mejora notablemente la experiencia del usuario al mostrar el contenido traducido de inmediato, en lugar de un destello de contenido sin traducir al principio. Además, podemos omitir las solicitudes de red en el cliente, porque ya contamos con todas las traducciones que necesitamos.
Comenzaremos creando o modificando /next.config.js.
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = {};
return withTacoTranslate(config, {
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
});
};Modifica la comprobación isProduction para adecuarla a tu configuración. Si true, TacoTranslate mostrará la clave API pública. Si estamos en un entorno local, de pruebas o de staging (isProduction is false), usaremos la clave API secreta read/write para asegurarnos de que las nuevas cadenas se envíen para su traducción.
Hasta ahora, solo hemos configurado la aplicación Next.js con una lista de idiomas compatibles. Lo siguiente que haremos es obtener las traducciones para todas tus páginas. Para ello, usarás ya sea getTacoTranslateStaticProps o getTacoTranslateServerSideProps según tus requisitos.
Estas funciones reciben tres argumentos: un objeto Next.js Static Props Context, la configuración para TacoTranslate y propiedades opcionales de Next.js. Ten en cuenta que revalidate en getTacoTranslateStaticProps está establecido en 60 por defecto, para que tus traducciones se mantengan actualizadas.
Para usar cualquiera de las dos funciones en una página, supongamos que tienes un archivo de página como /pages/hello-world.tsx.
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';
export async function getStaticProps(context) {
return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}
export default function Page() {
return <Translate string="Hello, world!"/>;
}Ahora deberías poder usar el Translate componente para traducir cadenas dentro de todos tus componentes de React.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}Paso 5: ¡Despliega y prueba!
¡Listo! Tu aplicación React ahora se traducirá automáticamente cuando agregues cualquier cadena a un Translate componente. Ten en cuenta que solo los entornos con permisos de read/write en la clave de API podrán crear nuevas cadenas para ser traducidas. Recomendamos contar con un entorno de staging cerrado y seguro donde puedas probar tu aplicación de producción con una clave de API como esa, agregando nuevas cadenas antes de ponerla en producción. Esto evitará que alguien robe tu clave de API secreta y, potencialmente, que se infle tu proyecto de traducción al añadirse nuevas cadenas no relacionadas.
Asegúrate de consultar el ejemplo completo en nuestro perfil de GitHub. Allí también encontrarás un ejemplo de cómo hacer esto usando el App Router! Si encuentras algún problema, no dudes en contactarnos, y con gusto te ayudaremos.
TacoTranslate te permite localizar automáticamente tus aplicaciones React de forma rápida hacia y desde más de 75 idiomas. ¡Comienza hoy!