TacoTranslate
/
DocumentaciónPrecios
 
Tutorial
22 may 2024

Cómo implementar la internacionalización en una aplicación Next.js que utiliza 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 globaliza, es cada vez más importante que los desarrolladores web creen aplicaciones que puedan atender a usuarios de diferentes países y culturas. Una de las formas clave de lograr esto es mediante 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: Ve el ejemplo completo aquí.

Esta guía es para aplicaciones Next.js que están usando 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 utilizando inteligencia artificial de última generación, y te libera de la tediosa gestión de archivos JSON.

Instalémoslo usando npm en tu terminal:

npm install tacotranslate

Paso 2: Crea una cuenta gratuita en TacoTranslate

Ahora que tienes el módulo instalado, es hora 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.

Dentro de la interfaz de la aplicación TacoTranslate, crea un proyecto y navega a la pestaña de claves API. Crea una clave read y una clave read/write. Las guardaremos como variables de entorno. La clave read es lo que llamamos public y la clave read/write es secret. Por ejemplo, podrías agregarlas a un archivo .env en la raíz de tu proyecto.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Asegúrate de nunca filtrar la clave secreta read/write de la API en 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 localización predeterminada por defecto. En este ejemplo, lo configuraremos en en para inglés.
  • TACOTRANSLATE_ORIGIN: La "carpeta" donde se almacenarán tus cadenas, como la URL de tu sitio web. Lee más sobre orígenes aquí.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Paso 3: Configurando TacoTranslate

Para integrar TacoTranslate con su aplicación, deberá crear un cliente utilizando las claves API mencionadas anteriormente. Por ejemplo, cree un archivo llamado /utilities/tacotranslate.js.

/utilities/tacotranslate.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;

Estaremos definiendo automáticamente TACOTRANSLATE_API_KEY en breve.

Crear el cliente en un archivo separado facilita su reutilización más adelante. Ahora, usando un /pages/_app.tsx personalizado, añadiremos el proveedor TacoTranslate.

/pages/_app.tsx
import React from 'react';
import {type AppProps} from 'next/app';
import {type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import tacoTranslate from '../utilities/tacotranslate';

type PageProperties = {
	origin: string;
	locale: Locale;
	locales: Locale[];
	localizations: Localizations;
};

export default function App({Component, pageProps}: AppProps<PageProperties>) {
	const {origin, locale, localizations} = pageProps;

	return (
		<TacoTranslate
			client={tacoTranslate}
			origin={origin}
			locale={locale}
			localizations={localizations}
		>
			<Component {...pageProps} />
		</TacoTranslate>
	);
}

Si ya tienes pageProps personalizados y _app.tsx, por favor extiende la definición con las propiedades y el código mencionados arriba.

Paso 4: Implementando la renderización del lado del servidor

TacoTranslate permite la renderización del lado del servidor de tus traducciones. Esto mejora enormemente la experiencia del usuario al mostrar el contenido traducido de inmediato, en lugar de un destello de contenido no traducido primero. Además, podemos omitir las solicitudes de red en el cliente, porque ya tenemos todas las traducciones que necesitamos.

Comenzaremos creando o modificando /next.config.js.

/next.config.js
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslate = require('./utilities/tacotranslate');

module.exports = async () => {
	const config = {};

	return withTacoTranslate(config, {
		client: tacoTranslate,
		isProduction:
			process.env.TACOTRANSLATE_ENV === 'production' ||
			process.env.VERCEL_ENV === 'production' ||
			(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
				process.env.NODE_ENV === 'production'),
	});
};

Modifique la verificación de isProduction para que se adapte a su configuración. Si true, TacoTranslate mostrará la clave de API pública. Si estamos en un entorno local, de prueba o de ensayo (isProduction is false), usaremos la clave de API de read/write secreta para asegurarnos de que se envíen nuevas cadenas para su traducción.

Up until now, we’ve only set the Next.js application up with a list of supported languages. The next thing we’ll do is fetch translations for all your pages. To do that, you’ll use either getTacoTranslateStaticProps or getTacoTranslateServerSideProps based on your requirements.

These functions take three arguments: One Next.js Static Props Context object, configuration for TacoTranslate, and optional Next.js properties. Note that revalidate on getTacoTranslateStaticProps is set to 60 by default, so that your translations stay up-to-date.

To use either function in a page, let’s assume you’ve got a page file like /pages/hello-world.tsx.

/pages/hello-world.tsx
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslate from '../utilities/tacotranslate';

export async function getStaticProps(context) {
	return getTacoTranslateStaticProps(context, {client: tacoTranslate});
}

export default function Page() {
	return <Translate string="Hello, world!"/>;
}

Ahora deberías poder usar el componente Translate para traducir cadenas dentro de todos tus componentes React.

import {Translate} from 'tacotranslate/react';

function Component() {
	return <Translate string="Hello, world!"/>
}

Paso 5: ¡Despliega y prueba!

¡Hemos terminado! Tu aplicación React ahora se traducirá automáticamente cuando añadas cualquier cadena a un componente Translate. Ten en cuenta que solo los entornos con permisos read/write en la clave API podrán crear nuevas cadenas para traducir. Recomendamos tener un entorno de staging cerrado y seguro donde puedas probar tu aplicación en producción con una clave API de ese tipo, añadiendo nuevas cadenas antes de pasar a producción. Esto evitará que alguien robe tu clave API secreta y posiblemente infle tu proyecto de traducción añadiendo 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 hacerlo usando el App Router. Si encuentras algún problema, no dudes en contactarnos, y estaremos encantados de ayudarte.

TacoTranslate te permite localizar automáticamente tus aplicaciones React rápida y fácilmente hacia y desde cualquier idioma. ¡Comienza hoy mismo!