Kuinka toteuttaa kansainvälistä tukea Next.js-sovelluksessa, joka käyttää App Router
Tee React-sovelluksestasi saavutettavammaksi ja tavoita uusia markkinoita kansainvälistämisellä (i18n).
Maailman muuttuessa yhä globalisoituneemmaksi, on verkkokehittäjille yhä tärkeämpää rakentaa sovelluksia, jotka palvelevat käyttäjiä eri maista ja kulttuureista. Yksi keskeisistä tavoista saavuttaa tämä on kansainvälistäminen (i18n), jonka avulla voit mukauttaa sovelluksesi eri kielille, valuutoille ja päivämäärämuodoille.
Tässä artikkelissa käymme läpi, miten lisätä kansainvälistäminen React Next.js -sovellukseesi palvelinpuolen renderöinnin avulla. TL;DR: Katso koko esimerkki täältä.
Tämä opas on 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
Kansainvälistämisen (i18n) toteuttamiseksi Next.js-sovelluksessasi valitsemme ensin i18n-kirjaston. Saatavilla on useita suosittuja kirjastoja, mukaan lukien next-intl. Tässä esimerkissä käytämme kuitenkin TacoTranslate.
TacoTranslate kääntää merkkijonosi automaattisesti mihin tahansa kieleen edistyneen tekoälyn avulla ja vapauttaa sinut JSON-tiedostojen työläästä hallinnasta.
Asennetaan se käyttämällä npm komentorivilläsi:
npm install tacotranslate
Vaihe 2: Luo ilmainen TacoTranslate-tili
Nyt kun olet asentanut moduulin, on aika luoda TacoTranslate-tilisi, käännösprojekti ja siihen 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, jota kutsumme public
:ksi, ja read/write
avain on secret
. Esimerkiksi voit lisätä ne projektisi juureen sijaitsevaan .env
tiedostoon.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Varmista, että et koskaan vuoda salaista read/write
API-avainta asiakaspuolen tuotantoympäristöihin.
Lisäämme myös kaksi muuta ympäristömuuttujaa: TACOTRANSLATE_DEFAULT_LOCALE
ja TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Oletusarvoinen varakielikoodi. Tässä esimerkissä asetamme sen arvoksien
englannille.TACOTRANSLATE_ORIGIN
: “Kansio”, johon tekstisi tallennetaan, esimerkiksi verkkosivustosi URL-osoite. Lue lisää originista täältä.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Vaihe 3: TacoTranslate-palvelun käyttöönotto
TacoTranslaten integroimiseksi sovellukseesi sinun täytyy luoda client käyttämällä aiemmin mainittuja API-avaimia. Esimerkiksi luo tiedosto nimeltä /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 automaattisesti TACOTRANSLATE_API_KEY
ja TACOTRANSLATE_PROJECT_LOCALE
pian.
Asiakasolio kannattaa luoda erilliseen tiedostoon, sillä näin sen käyttö myöhemmin on helppoa. getLocales
on vain apufunktio, jossa on sisäänrakennettua virheenkäsittelyä. Luo nyt tiedosto nimeltä /app/[locale]/tacotranslate.tsx
, johon toteutamme TacoTranslate
providerin.
'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 asiakaspuolen komponentti.
Kun kontekstitoimittaja on nyt valmis, luo tiedosto nimeltä /app/[locale]/layout.tsx
, joka on sovelluksemme juuriasettelu. Huomaa, että tämä polku sisältää kansion, joka hyödyntää Dynamic Routes, jossa [locale]
on dynaaminen parametri.
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 tässä, on, että käytämme Dynamic Route
-parametriamme [locale]
hakeaksemme kyseisen kielen käännökset. Lisäksi generateStaticParams
varmistaa, että kaikki projektissasi aktivoidut kielikoodit esirendataan.
Rakennetaan nyt ensimmäinen sivumme! Luo tiedosto nimeltä /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 renderöinnin 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ähtäisiin välähdys kääntämätöntä sisältöä. Lisäksi voimme ohittaa verkkopyynnöt asiakaspuolella, koska meillä on jo ne käännökset, joita tarvitsemme käyttäjän katsomalle sivulle.
Palvelinpuolen renderöinnin määrittämiseksi luo tai muokkaa /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};
};
Säädä isProduction
-tarkistus 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äännettäviksi.
Varmistaaksemme, että reititys ja uudelleenohjaukset toimivat odotetusti, 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 toivomallaan kielellä.
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ä määrität matcher
Next.js Middleware -dokumentaation mukaisesti.
Asiakaspuolella voit muuttaa locale
‑evästeen arvoa vaihtaaksesi käyttäjän ensisijaisen kielen. Katso täydellinen esimerkkikoodi ideoita siitä, miten tämä tehdään!
Vaihe 5: Julkaise ja testaa!
Olemme valmiit! React-sovelluksesi käännetään nyt automaattisesti, kun lisäät merkkijonoja Translate
komponenttiin. Huomaa, että vain ympäristöt, joilla API-avaimeen liittyvät read/write
-oikeudet ovat käytössä, pystyvät luomaan uusia käännettäviä merkkijonoja. Suosittelemme pitämään suljetun ja suojatun staging-ympäristön, 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!