Kako implementirati internacionalizaciju u Next.js aplikaciji koja koristi Pages Router
Učinite svoju React aplikaciju pristupačnijom i doprite do novih tržišta pomoću internacionalizacije (i18n).
Kako svet postaje sve globalizovaniji, sve je važnije da web programeri prave aplikacije koje mogu da zadovolje korisnike iz različitih zemalja i kultura. Jedan od ključnih načina da se to postigne je internacionalizacija (i18n), koja vam omogućava da prilagodite vašu aplikaciju različitim jezicima, valutama i formatima datuma.
U ovom tutorijalu istražićemo kako dodati internacionalizaciju vašoj React Next.js aplikaciji, uz renderovanje na serverskoj strani. TL;DR: Pogledajte kompletan primer ovde.
Ovaj vodič je za Next.js aplikacije koje koriste Pages Router.
Ako koristite App Router, umesto toga pogledajte ovaj vodič.
Korak 1: Instalirajte i18n biblioteku
Da bismo implementirali internacionalizaciju u vašoj Next.js aplikaciji, prvo ćemo izabrati i18n biblioteku. Postoji nekoliko popularnih biblioteka, uključujući next-intl. Međutim, u ovom primeru ćemo koristiti TacoTranslate.
TacoTranslate automatski prevodi vaše stringove na bilo koji jezik koristeći najsavremeniju veštačku inteligenciju i oslobađa vas zamornog upravljanja JSON fajlovima.
Instalirajmo ga koristeći npm u vašem terminalu:
npm install tacotranslateKorak 2: Kreirajte besplatan TacoTranslate nalog
Sada kada ste instalirali modul, vreme je da napravite svoj TacoTranslate nalog, prevodilački projekat i odgovarajuće API ključeve. Napravite nalog ovde. Besplatno je i ne zahteva unošenje kreditne kartice.
U korisničkom interfejsu aplikacije TacoTranslate, kreirajte projekat i idite na karticu sa API ključevima. Napravite jedan read ključ i jedan read/write ključ. Sačuvaćemo ih kao promenljive okruženja. read ključ nazivamo public, a read/write ključ je secret. Na primer, možete ih dodati u .env fajl u korenu vašeg projekta.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Pazite da nikada ne otkrijete tajni read/write API ključ u produkcionim okruženjima na strani klijenta.
Takođe ćemo dodati još dve promenljive okruženja: TACOTRANSLATE_DEFAULT_LOCALE i TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: Podrazumevani kod rezervne (fallback) lokalizacije. U ovom primeru postavićemo ga naenza engleski.TACOTRANSLATE_ORIGIN: “folder” u kome će biti čuvani vaši stringovi, na primer URL vaše veb-stranice. Pročitajte više o origin-ima ovde.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comKorak 3: Podešavanje TacoTranslate
Da biste integrisali TacoTranslate u svoju aplikaciju, moraćete da kreirate klijenta koristeći API ključeve pomenute ranije. Na primer, kreirajte fajl pod imenom /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;Uskoro ćemo automatski definisati TACOTRANSLATE_API_KEY.
Stvaranje klijenta u zasebnom fajlu olakšava njegovo ponovno korišćenje kasnije. Sada, koristeći prilagođeni /pages/_app.tsx, dodaćemo TacoTranslate provajdera.
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>
);
}Ako već imate prilagođene pageProps i _app.tsx, molimo vas da proširite definiciju sa svojstvima i kodom iznad.
Korak 4: Implementacija renderovanja na serverskoj strani
TacoTranslate omogućava serversko renderovanje vaših prevoda. To značajno poboljšava korisničko iskustvo jer odmah prikazuje prevedeni sadržaj, umesto da se najpre pojavi kratki prikaz neprevedenog sadržaja. Dodatno, možemo izbeći mrežne zahteve na klijentskoj strani, jer već imamo sve prevode koji su nam potrebni.
Počećemo kreiranjem ili izmenom /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'),
});
};Prilagodite proveru isProduction svom podešavanju. Ako je true, TacoTranslate će prikazati javni API ključ. Ako smo u lokalnom, testnom ili staging okruženju (isProduction is false), koristićemo tajni read/write API ključ kako bismo osigurali da se novi stringovi pošalju na prevođenje.
Do sada smo u Next.js aplikaciji podesili samo listu podržanih jezika. Sledeće što ćemo uraditi je da dohvatimo prevode za sve vaše stranice. Za to ćete koristiti ili getTacoTranslateStaticProps ili getTacoTranslateServerSideProps u zavisnosti od vaših zahteva.
Ove funkcije primaju tri argumenta: jedan Next.js Static Props Context objekat, konfiguraciju za TacoTranslate i opciona Next.js svojstva. Imajte na umu da je revalidate na getTacoTranslateStaticProps podrazumevano postavljen na 60, tako da vaši prevodi ostanu ažurni.
Da biste koristili bilo koju od ovih funkcija u stranici, pretpostavimo da imate fajl stranice kao što je /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!"/>;
}Sada biste trebali moći da koristite Translate komponentu za prevođenje stringova u svim vašim React komponentama.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}Korak 5: Objavite i testirajte!
Gotovo! Vaša React aplikacija će sada biti automatski prevedena kada dodate bilo koji string u Translate komponentu. Imajte na umu da samo okruženja koja imaju dozvole read/write na API ključu moći će da kreiraju nove stringove za prevođenje. Preporučujemo da imate zatvoreno i bezbedno staging okruženje gde možete testirati vašu produkcijsku aplikaciju sa takvim API ključem, dodajući nove stringove pre puštanja u produkciju. To će sprečiti bilo koga da ukrade vaš tajni API ključ i potencijalno napuhati vaš prevodilački projekat dodavanjem novih, nepovezanih stringova.
Obavezno pogledajte kompletan primer na našem GitHub profilu. Tamo ćete takođe pronaći primer kako to uraditi koristeći App Router! Ako naiđete na bilo kakve probleme, slobodno kontaktirajte nas, rado ćemo pomoći.
TacoTranslate vam omogućava da automatski lokalizujete vaše React aplikacije brzo na i sa preko 75 jezika. Započnite danas!