TacoTranslate
/
DokumentaatioHinnoittelu
 
Opas
04.5.

Kuinka toteuttaa kansainvälistäminen Next.js-sovelluksessa, joka käyttää App Router

Tee React-sovelluksestasi saavutettavampi ja tavoita uusia markkinoita kansainvälistämällä (i18n).

Maailman globalisoituessa on yhä tärkeämpää, että verkkokehittäjät rakentavat sovelluksia, jotka palvelevat käyttäjiä eri maista ja kulttuureista. Tärkeä keino tähän on kansainvälistäminen (i18n), jonka avulla voit mukauttaa sovelluksesi eri kielille, valuutoille ja päivämäärämuodoille.

Tässä artikkelissa tarkastelemme, miten lisätä kansainvälistäminen React Next.js -sovellukseesi ja ottaa käyttöön palvelinpuolen renderöinti. TL;DR: Katso koko esimerkki täältä.

Tämä opas on tarkoitettu Next.js-sovelluksille, jotka käyttävät App Router.
Jos käytät Pages Router, katso sen sijaan tämä opas.

Vaihe 1: Asenna i18n-kirjasto

Toteuttaaksesi kansainvälistämisen Next.js-sovelluksessasi valitsemme ensin i18n-kirjaston. Saatavilla on useita suosittuja kirjastoja, mukaan lukien next-intl. Tässä esimerkissä kuitenkin käytämme TacoTranslate.

TacoTranslate kääntää merkkijonosi automaattisesti mihin tahansa kieleen huippuluokan tekoälyn avulla, ja vapauttaa sinut JSON-tiedostojen työläästä hallinnasta.

Asennetaan se terminaalissasi käyttämällä npm:

npm install tacotranslate

Vaihe 2: Luo ilmainen TacoTranslate-tili

Nyt kun moduuli on asennettu, on aika luoda TacoTranslate-tilisi, käännösprojekti ja niihin liittyvät API-avaimet. Luo tili tästä. Se on ilmaista, eikä vaadi luottokortin lisäämistä.

TacoTranslate-sovelluksen käyttöliittymässä luo projekti ja siirry sen API-avaimet-välilehdelle. Luo yksi read avain ja yksi read/write avain. Tallennamme ne ympäristömuuttujiin. read avain on se, mitä kutsumme public, ja read/write avain on secret. Esimerkiksi voit lisätä ne projektisi juureen olevaan .env tiedostoon.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Varmista, ettet koskaan vuoda salaista read/write API-avainta asiakaspuolen tuotantoympäristöihin.

Lisäämme myös kaksi ympäristömuuttujaa: TACOTRANSLATE_DEFAULT_LOCALE ja TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Oletusarvoinen varakielen koodi. Tässä esimerkissä asetamme sen en englanniksi.
  • TACOTRANSLATE_ORIGIN: Se “kansio”, johon merkkijonosi tallennetaan, esimerkiksi verkkosivustosi URL-osoite. Lue lisää originien toiminnasta täältä.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Vaihe 3: TacoTranslaten käyttöönotto

Integroidaksesi TacoTranslaten sovellukseesi sinun täytyy luoda asiakas käyttäen aiemmin mainittuja API-avaimia. Esimerkiksi luo tiedosto nimeltä /tacotranslate-client.js.

/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_IS_PRODUCTION === 'true'
			? process.env.TACOTRANSLATE_PROJECT_LOCALE
			: undefined,
});

module.exports = tacoTranslate;

Määrittelemme pian automaattisesti TACOTRANSLATE_API_KEY ja TACOTRANSLATE_PROJECT_LOCALE.

Asiakas kannattaa luoda erilliseen tiedostoon, jotta sitä on helppo käyttää uudelleen myöhemmin. getLocales on vain apufunktio, jossa on jonkin verran sisäänrakennettua virheenkäsittelyä. Luo nyt tiedosto nimeltä /app/[locale]/tacotranslate.tsx, johon toteutamme TacoTranslate providerin.

/app/[locale]/tacotranslate.tsx
'use client';

import React, {type ReactNode} from 'react';
import {
	type TranslationContextProperties,
	TacoTranslate as ImportedTacoTranslate,
} from 'tacotranslate/react';
import tacoTranslateClient from '@/tacotranslate-client';

export default function TacoTranslate({
	locale,
	origin,
	localizations,
	children,
}: TranslationContextProperties & {
	readonly children: ReactNode;
}) {
	return (
		<ImportedTacoTranslate
			client={tacoTranslateClient}
			locale={locale}
			origin={origin}
			localizations={localizations}
		>
			{children}
		</ImportedTacoTranslate>
	);
}

Huomaa 'use client';, joka osoittaa, että tämä on asiakaskomponentti.

Kun kontekstin tarjoaja on nyt valmis, luo tiedosto nimeltä /app/[locale]/layout.tsx, joka toimii sovelluksemme juuriasetteluna. Huomaa, että tällä polulla on kansio, joka hyödyntää Dynamic Routes, jossa [locale] on dynaaminen parametri.

/app/[locale]/layout.tsx
import React, {type ReactNode} from 'react';
import {type Locale, isRightToLeftLocaleCode} from 'tacotranslate';
import './global.css';
import tacoTranslateClient from '@/tacotranslate-client';
import TacoTranslate from './tacotranslate';

export async function generateStaticParams() {
	const locales = await tacoTranslateClient.getLocales();
	return locales.map((locale) => ({locale}));
}

type RootLayoutParameters = {
	readonly params: Promise<{locale: Locale}>;
	readonly children: ReactNode;
};

export default async function RootLayout({params, children}: RootLayoutParameters) {
	const {locale} = await params;
	const origin = process.env.TACOTRANSLATE_ORIGIN;
	const localizations = await tacoTranslateClient.getLocalizations({
		locale,
		origins: [origin /* , other origins to fetch */],
	});

	return (
		<html lang={locale} dir={isRightToLeftLocaleCode(locale) ? 'rtl' : 'ltr'}>
			<body>
				<TacoTranslate
					locale={locale}
					origin={origin}
					localizations={localizations}
				>
					{children}
				</TacoTranslate>
			</body>
		</html>
	);
}

Ensimmäinen asia, joka kannattaa huomioida, on, että käytämme Dynamic Route -parametriamme [locale] hakemaan käännökset kyseiselle kielelle. Lisäksi generateStaticParams varmistaa, että kaikki projektissasi aktivoidut lokaalikoodit esirenderöidään.

Nyt rakennetaan ensimmäinen sivumme! Luo tiedosto nimeltä /app/[locale]/page.tsx.

/app/[locale]/page.tsx
import React from 'react';
import {Translate} from 'tacotranslate/react';

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

Huomaa revalidate‑muuttuja, joka kertoo Next.js:lle rakentamaan sivun uudelleen 60 sekunnin kuluttua ja pitämään käännöksesi ajan tasalla.

Vaihe 4: Palvelinpuolen renderoinnin toteuttaminen

TacoTranslate tukee palvelinpuolen renderöintiä. Tämä parantaa käyttäjäkokemusta huomattavasti näyttämällä käännetyn sisällön välittömästi sen sijaan, että ensin näkyisi hetkellinen välähdys kääntämätöntä sisältöä. Lisäksi voimme ohittaa asiakaspuolen verkkopyynnöt, koska meillä on jo käännökset sille sivulle, jota käyttäjä parhaillaan katsoo.

Palvelinpuolen renderoinnin käyttöönottoa varten luo tai muokkaa /next.config.js:

/next.config.js
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');

module.exports = async () => {
	const config = await withTacoTranslate(
		{},
		{
			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'),
		}
	);

	// NOTE: Remove i18n from config when using the app router
	return {...config, i18n: undefined};
};

Muokkaa isProduction -tarkistusta vastaamaan asetuksiasi. Jos true, TacoTranslate näyttää julkisen API-avaimen. Jos olemme paikallisessa, testaus- tai staging-ympäristössä (isProduction is false), käytämme salaista read/write API-avainta varmistaaksemme, että uudet merkkijonot lähetetään käännöstä varten.

Varmistaaksemme, että reititys ja uudelleenohjaukset toimivat odotetulla tavalla, meidän täytyy luoda tiedosto nimeltä /middleware.ts. Käyttämällä Middleware, voimme ohjata käyttäjiä sivuille, jotka esitetään heidän suosimallaan kielellä.

/middleware.ts
import {type NextRequest} from 'next/server';
import {middleware as tacoTranslateMiddleware} from 'tacotranslate/next';
import tacoTranslate from '@/tacotranslate-client';

export const config = {
	matcher: ['/((?!api|_next|favicon.ico).*)'],
};

export async function middleware(request: NextRequest) {
	return tacoTranslateMiddleware(tacoTranslate, request);
}

Varmista, että matcher on määritetty Next.js Middleware -dokumentaation mukaisesti.

Asiakaspuolella voit muuttaa locale‑evästeen arvoa vaihtaaksesi käyttäjän toivoman kielen. Katso täydellinen esimerkkikoodi saadaksesi ideoita siitä, miten tämä tehdään!

Vaihe 5: Ota käyttöön ja testaa!

Olemme valmiit! React-sovelluksesi käännetään nyt automaattisesti, kun lisäät merkkijonoja Translate komponenttiin. Huomaa, että vain ympäristöt, joilla on read/write -oikeudet API-avaimeen, voivat luoda uusia käännettäviä merkkijonoja. Suosittelemme suljettua ja suojattua testiympäristöä, jossa voit testata tuotantosovellustasi tällaisella API-avaimella ja lisätä uusia merkkijonoja ennen julkaisua. Tämä estää ketään varastamasta salaista API-avaintasi ja mahdollisesti paisuttamasta käännösprojektiasi lisäämällä uusia, asiaankuulumattomia merkkijonoja.

Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the Pages Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.

TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!

Tuote yritykseltä NattskiftetValmistettu Norjassa