Paano ipatupad ang internasyonalasyon sa isang Next.js na aplikasyon na gumagamit ng App Router
Gawing mas madaling ma-access ang iyong React na aplikasyon at maabot ang mga bagong merkado gamit ang internationalization (i18n).
Habang nagiging mas globalisado ang mundo, lalong nagiging mahalaga para sa mga web developer na bumuo ng mga aplikasyon na makakatugon sa mga gumagamit mula sa iba't ibang bansa at kultura. Isa sa mga pangunahing paraan upang makamit ito ay sa pamamagitan ng internationalization (i18n), na nagpapahintulot sa iyo na iangkop ang iyong aplikasyon sa iba't ibang wika, pera, at mga format ng petsa.
Sa artikulong ito, tatalakayin natin kung paano idagdag ang internationalization sa iyong React Next.js na aplikasyon, kasama ang server-side rendering. TL;DR: Tingnan ang buong halimbawa dito.
Ang gabay na ito ay para sa mga Next.js na aplikasyon na gumagamit ng App Router.
Kung gumagamit ka ng Pages Router, tingnan ang gabay na ito sa halip.
Hakbang 1: Mag-install ng i18n library
Upang ipatupad ang internationalization sa iyong Next.js application, una nating pipiliin ang isang i18n na library. May ilang mga kilalang library, kabilang ang next-intl. Sa halimbawang ito, gayunpaman, gagamitin namin ang TacoTranslate.
TacoTranslate ay awtomatikong isinasalin ang iyong mga string sa anumang wika gamit ang makabagong AI, at pinapalaya ka mula sa nakakapagod na pamamahala ng mga JSON file.
I-install natin ito gamit ang npm sa iyong terminal:
npm install tacotranslate
Hakbang 2: Gumawa ng libreng account sa TacoTranslate
Ngayon na na-install mo na ang module, oras na para lumikha ng iyong TacoTranslate account, isang translation project, at ang mga kaugnay na API key. Lumikha ng account dito. Libre ito, at hindi mo kailangang magdagdag ng credit card.
Sa loob ng UI ng TacoTranslate, gumawa ng isang proyekto, at pumunta sa tab ng API keys nito. Gumawa ng isang read
key, at isang read/write
key. Ise-save natin ang mga ito bilang mga environment variable. Ang read
key ay kung ano ang tinatawag naming public
, at ang read/write
key naman ay secret
. Halimbawa, maaari mong idagdag ang mga ito sa isang .env
file sa root ng iyong proyekto.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Siguraduhing huwag kailanman ibunyag ang lihim na read/write
API key sa mga production environment ng client-side.
Magdaragdag din kami ng dalawang karagdagang environment variable: TACOTRANSLATE_DEFAULT_LOCALE
at TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Ang default na fallback na code ng locale. Sa halimbawang ito, itatakda natin ito saen
para sa Ingles.TACOTRANSLATE_ORIGIN
: Ang “folder” kung saan iimbak ang iyong mga string, tulad ng URL ng iyong website. Basahin pa tungkol sa mga pinagmulan dito.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Hakbang 3: Pagsasaayos ng TacoTranslate
Upang i-integrate ang TacoTranslate sa iyong aplikasyon, kailangan mong gumawa ng isang client gamit ang mga API key mula sa naunang hakbang. Halimbawa, lumikha ng isang file na pinangalanang /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;
Sandali naming awtomatikong itatakda ang TACOTRANSLATE_API_KEY
at TACOTRANSLATE_PROJECT_LOCALE
.
Ang paglikha ng client sa isang hiwalay na file ay nagpapadali ng muling paggamit nito sa hinaharap. getLocales
ay isang utility function lamang na may ilang nakapaloob na mekanismo para sa paghawak ng mga error. Ngayon, gumawa ng isang file na pinangalanang /app/[locale]/tacotranslate.tsx
, kung saan ipapatupad natin ang TacoTranslate
provider.
'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>
);
}
Pansinin ang 'use client';
na nagpapahiwatig na ito ay isang client component.
Ngayon na handa na ang context provider, lumikha ng isang file na pinangalanang /app/[locale]/layout.tsx
, ang root layout ng aming aplikasyon. Tandaan na ang landas na ito ay may folder na gumagamit ng Dynamic Routes, kung saan [locale]
ang dynamic na parameter.
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>
);
}
Ang unang bagay na dapat tandaan dito ay ginagamit namin ang aming parameter na Dynamic Route
na [locale]
upang kunin ang mga pagsasalin para sa wikang iyon. Bukod pa rito, tinitiyak ng generateStaticParams
na ang lahat ng locale code na na-activate mo para sa iyong proyekto ay naunang nirender.
Ngayon, gawin natin ang ating unang pahina! Lumikha ng isang file na pinangalanang /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!" />
);
}
Pansinin ang revalidate
variable na nagsasabi sa Next.js na muling buuin ang pahina pagkatapos ng 60 segundo, at panatilihing napapanahon ang iyong mga pagsasalin.
Hakbang 4: Pagpapatupad ng pag-render sa server
Sinusuportahan ng TacoTranslate ang server-side rendering. Malaki ang ipinapabuti nito sa karanasan ng gumagamit dahil ipinapakita agad ang isinaling nilalaman, sa halip na magkaroon muna ng sandaling paglitaw ng hindi isinaling nilalaman. Bukod pa rito, maaari nating laktawan ang mga kahilingan sa network sa kliyente, dahil nasa atin na ang mga pagsasalin na kailangan para sa pahinang tinitingnan ng gumagamit.
Upang i-set up ang server-side rendering, gumawa o baguhin ang /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};
};
Baguhin ang isProduction
check ayon sa iyong setup. Kung true
, ipapakita ng TacoTranslate ang pampublikong API key. Kung nasa lokal, test, o staging na environment tayo (isProduction
is false
), gagamitin namin ang lihim na read/write
API key upang matiyak na ang mga bagong string ay naipapadala para sa pagsasalin.
Upang matiyak na gumagana nang maayos ang routing at redirection, kailangan nating lumikha ng isang file na pinangalanang /middleware.ts
. Gamit ang Middleware, maaari nating i-redirect ang mga user sa mga pahinang ipinapakita sa kanilang ginustong wika.
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);
}
Siguraduhing i-set up ang matcher
alinsunod sa dokumentasyon ng Next.js Middleware.
Sa client, maaari mong baguhin ang locale
cookie upang baguhin ang pinapaborang wika ng user. Mangyaring tingnan ang kumpletong halimbawa ng code para sa mga ideya kung paano gawin ito!
Hakbang 5: I-deploy at subukan!
Tapos na kami! Awtomatikong isasalin ngayon ang iyong React application kapag nagdagdag ka ng anumang mga string sa isang Translate
komponent. Tandaan na tanging mga environment na may permiso na read/write
sa API key ang makakalikha ng mga bagong string na isasalin. Inirerekumenda namin na magkaroon ng sarado at seguradong staging environment kung saan maaari mong subukan ang iyong production application gamit ang ganoong API key, at magdagdag ng mga bagong string bago ilunsad. Mapipigilan nito ang sinumang sinumang magnakaw ng iyong lihim na API key, at posibleng magdulot ng paglobo ng iyong proyekto sa pagsasalin dahil sa pagdaragdag ng mga bagong, hindi kaugnay na string.
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!