Com implementar la internacionalització en una aplicació Next.js que utilitza el Pages Router
Fes que la teva aplicació React sigui més accessible i arriba a nous mercats amb la internacionalització (i18n).
A mesura que el món es globalitza més, és cada vegada més important que els desenvolupadors web creïn aplicacions que puguin satisfer usuaris de diferents països i cultures. Una de les maneres clau d'aconseguir-ho és mitjançant la internacionalització (i18n), que et permet adaptar la teva aplicació a diferents idiomes, monedes i formats de data.
En aquest tutorial, explorarem com afegir internacionalització a la teva aplicació React Next.js, amb renderització al costat del servidor. TL;DR: Vegeu l’exemple complet aquí.
Aquesta guia és per a aplicacions Next.js que utilitzen el Pages Router.
Si esteu utilitzant el App Router, consulteu aquesta guia en canvi.
Pas 1: Instal·la una biblioteca i18n
Per implementar la internacionalització a la teva aplicació Next.js, primer triarem una biblioteca d’i18n. N’hi ha diverses biblioteques populars, incloent next-intl. Tanmateix, en aquest exemple, farem servir TacoTranslate.
TacoTranslate tradueix automàticament les teves cadenes a qualsevol idioma utilitzant IA d’última generació, i et llibera de la gestió tediosa dels fitxers JSON.
Instal·lem-lo amb npm a la teva terminal:
npm install tacotranslate
Pas 2: Crea un compte gratuït a TacoTranslate
Ara que has instal·lat el mòdul, és hora de crear el teu compte TacoTranslate, un projecte de traducció i les claus API associades. Crea un compte aquí. És gratuït i no requereix que afegeixis una targeta de crèdit.
Dins de la interfície d'usuari de l'aplicació TacoTranslate, crea un projecte i navega fins a la pestanya d'API keys. Crea una clau read
i una altra clau read/write
. Les desarem com a variables d'entorn. La clau read
és la que anomenem public
i la clau read/write
és secret
. Per exemple, podries afegir-les a un fitxer .env
a la carpeta arrel del teu projecte.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Assegureu-vos de no filtrar mai la clau API secreta read/write
a entorns de producció del costat client.
També afegirem dues variables d'entorn més: TACOTRANSLATE_DEFAULT_LOCALE
i TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: El codi de localització predeterminada de reserva. En aquest exemple, el configurarem aen
per a l’anglès.TACOTRANSLATE_ORIGIN
: La “carpeta” on s’emmagatzemaran les teves cadenes, com per exemple la URL del teu lloc web. Llegeix més sobre les origins aquí.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Pas 3: Configurar TacoTranslate
Per integrar TacoTranslate amb la teva aplicació, hauràs de crear un client utilitzant les claus API esmentades anteriorment. Per exemple, crea un fitxer anomenat /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;
Definirem automàticament TACOTRANSLATE_API_KEY
en breu.
Crear el client en un fitxer separat facilita tornar-lo a utilitzar més endavant. Ara, utilitzant un /pages/_app.tsx
personalitzat, afegirem el proveïdor 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 ja tens pageProps
personalitzats i _app.tsx
, si us plau amplia la definició amb les propietats i el codi esmentats anteriorment.
Pas 4: Implementació del renderitzat al costat del servidor
TacoTranslate permet el renderitzat al servidor de les teves traduccions. Això millora molt l'experiència de l'usuari mostrant contingut traduït immediatament, en comptes d'un flaix de contingut sense traduir primer. A més, podem evitar les peticions de xarxa al client, perquè ja disposem de totes les traduccions que necessitem.
Comencem creant o modificant /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 comprovació isProduction
per adaptar-la a la teva configuració. Si true
, TacoTranslate mostrarà la clau pública de l'API. Si estem en un entorn local, de prova o staging (isProduction
is false
), utilitzarem la clau secreta read/write
de l'API per assegurar-nos que les noves cadenes s'enviïn per traducció.
Fins ara, només hem configurat l'aplicació Next.js amb una llista d'idiomes compatibles. El següent que farem serà obtenir les traduccions per a totes les teves pàgines. Per fer-ho, utilitzaràs o bé getTacoTranslateStaticProps
o getTacoTranslateServerSideProps
segons les teves necessitats.
Aquestes funcions prenen tres arguments: un objecte Next.js Static Props Context, la configuració per a TacoTranslate i propietats opcionals de Next.js. Tingueu en compte que revalidate
a getTacoTranslateStaticProps
està configurat a 60 per defecte, perquè les vostres traduccions es mantinguin actualitzades.
Per utilitzar qualsevol de les dues funcions en una pàgina, assumim que teniu un fitxer de pàgina com /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!"/>;
}
Ara hauríeu de poder utilitzar el component Translate
per traduir cadenes dins de tots els vostres components React.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}
Pas 5: Desa i prova!
Hem acabat! La teva aplicació React ara es traduirà automàticament quan afegeixis qualsevol cadena a un component Translate
. Tingues en compte que només els entorns amb permisos read/write
a la clau API podran crear noves cadenes per traduir. Recomanem tenir un entorn de staging tancat i segur on puguis provar la teva aplicació de producció amb una clau API d’aquest tipus, afegint noves cadenes abans de posar-la en producció. Això evitarà que ningú pugui robar la teva clau API secreta, i potencialment inflar el teu projecte de traducció afegint cadenes noves i no relacionades.
Assegura't de consultar l'exemple complet al nostre perfil de GitHub. Allà també trobaràs un exemple de com fer-ho utilitzant el App Router ! Si tens qualsevol problema, no dubtis a posar-te en contacte, i estarem encantats d'ajudar-te.
TacoTranslate et permet localitzar automàticament les teves aplicacions React ràpidament a més de 75 idiomes i des d’aquests. Comença avui mateix!