Si të implementoni ndërkombëtarizimin në një aplikacion Next.js që po përdor App Router
Bëni aplikacionin tuaj React më të aksesueshëm dhe arrini tregje të reja përmes internacionalizimit (i18n).
Ndërsa bota bëhet më e globalizuar, bëhet gjithnjë e më e rëndësishme që zhvilluesit e uebit të ndërtojnë aplikacione që mund t'u përshtaten përdoruesve nga vende dhe kultura të ndryshme. Një nga mënyrat kryesore për ta arritur këtë është përmes internacionalizimit (i18n), i cili ju lejon të përshtatni aplikacionin tuaj për gjuhë, monedha dhe formate të datave të ndryshme.
Në këtë artikull, do të shohim se si të shtoni internacionalizimin në aplikacionin tuaj React Next.js, me renderim në server. TL;DR: Shih shembullin e plotë këtu.
Ky udhëzues është për aplikacionet Next.js që përdorin App Router.
Nëse po përdorni Pages Router, shihni këtë udhëzues në vend të tij.
Hapi 1: Instaloni një bibliotekë i18n
Për të zbatuar internacionalizimin në aplikacionin tuaj Next.js, së pari do të zgjedhim një bibliotekë i18n. Ka disa biblioteka të njohura, përfshirë next-intl. Në këtë shembull, megjithatë, do të përdorim TacoTranslate.
TacoTranslate përkthen automatikisht tekstet tuaja në çdo gjuhë duke përdorur inteligjencë artificiale të avancuar, dhe ju çliron nga menaxhimi i lodhshëm i skedarëve JSON.
Le ta instalojmë duke përdorur npm në terminalin tuaj:
npm install tacotranslate
Hapi 2: Krijoni një llogari falas në TacoTranslate
Tani që keni instaluar modulin, është koha të krijoni llogarinë tuaj të TacoTranslate, një projekt përkthimi, dhe çelësat përkatës të API-së. Krijoni një llogari këtu. Është falas, dhe nuk kërkon që të shtoni një kartë krediti.
Brenda ndërfaqes së aplikacionit TacoTranslate, krijoni një projekt dhe navigoni te skeda e çelësave API. Krijoni një çelës read
dhe një çelës read/write
. Do t'i ruajmë si variabla mjedisi. Çelësi read
është ai që e quajmë public
dhe çelësi read/write
është secret
. Për shembull, mund t'i shtoni në një skedar .env
në rrënjën e projektit tuaj.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Sigurohuni që të mos rrjedhni kurrë çelësin sekret të API-së read/write
në mjediset e prodhimit në anën e klientit.
Ne gjithashtu do të shtojmë edhe dy variabla të tjera të mjedisit: TACOTRANSLATE_DEFAULT_LOCALE
dhe TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Kodi i lokalizimit i parazgjedhur. Në këtë shembull, do ta vendosim nëen
për gjuhën angleze.TACOTRANSLATE_ORIGIN
: “dosja” ku do të ruhen vargjet tuaja, si p.sh. URL-ja e faqes suaj. Lexoni më shumë rreth origjinave këtu.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Hapi 3: Konfigurimi i TacoTranslate
Për të integruar TacoTranslate me aplikacionin tuaj, do t'ju duhet të krijoni një klient duke përdorur çelësat e API-së të përmendur më parë. Për shembull, krijoni një skedar me emrin /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;
Ne do të përcaktojmë automatikisht TACOTRANSLATE_API_KEY
dhe TACOTRANSLATE_PROJECT_LOCALE
së shpejti.
Krijimi i klientit në një skedar të veçantë e bën të lehtë përdorimin e tij edhe më vonë. getLocales
është thjesht një funksion ndihmës me disa mekanizma të ndërtuar për trajtimin e gabimeve. Tani, krijo një skedar të quajtur /app/[locale]/tacotranslate.tsx
, ku do të implementojmë ofruesin TacoTranslate
.
'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>
);
}
Vini re 'use client';
që tregon se ky është një komponent klienti.
Tani që ofruesi i kontekstit është gati, krijoni një skedar me emrin /app/[locale]/layout.tsx
, layout-i rrënjësor në aplikacionin tonë. Vini re se kjo rrugë ka një dosje që përdor Dynamic Routes, ku [locale]
është parametri dinamik.
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>
);
}
Gjëja e parë që duhet të vërehet këtu është se po përdorim parametrin tonë Dynamic Route
[locale]
për të marrë përkthimet për atë gjuhë. Për më tepër, generateStaticParams
siguron që të gjitha kodet e lokalizimit që keni aktivizuar për projektin tuaj të paragjenerohen.
Tani, le të ndërtojmë faqen tonë të parë! Krijoni një skedar me emrin /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!" />
);
}
Vini re variablën revalidate
që i thotë Next.js të rindërtojë faqen pas 60 sekondash dhe të mbajë përkthimet tuaja të përditësuara.
Hapi 4: Zbatimi i renderimit në anën e serverit
TacoTranslate mbështet renderimin në anën e serverit. Kjo përmirëson ndjeshëm përvojën e përdoruesit duke shfaqur menjëherë përmbajtjen e përkthyer, në vend që përdoruesi të shohë fillimisht përmbajtjen e papërkthyer për një çast. Për më tepër, mund të anashkalojmë kërkesat e rrjetit në klient, sepse tashmë kemi përkthimet që na duhen për faqen që përdoruesi po e shikon.
Për të konfiguruar renderimin në anën e serverit, krijoni ose modifikoni /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};
};
Ndryshoni kontrollet isProduction
për t'u përshtatur me konfigurimin tuaj. Nëse true
, TacoTranslate do të shfaqë çelësin publik të API-së. Nëse jemi në një mjedis lokal, test, ose staging (isProduction
is false
), do të përdorim çelësin sekret read/write
të API-së për t'u siguruar që vargjet e reja të dërgohen për përkthim.
Për t'u siguruar që rutimi dhe ridrejtimi të funksionojnë si duhet, do të duhet të krijojmë një skedar të quajtur /middleware.ts
. Duke përdorur Middleware, mund të ridrejtojmë përdoruesit në faqet e paraqitura në gjuhën e tyre të preferuar.
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);
}
Sigurohuni që të konfiguroni matcher
në përputhje me dokumentacionin e Middleware të Next.js.
Në anën e klientit, mund të ndryshoni cookie-n locale
për të ndryshuar gjuhën e preferuar të përdoruesit. Shikoni kodin e plotë të shembullit për ide se si ta bëni këtë!
Hapi 5: Publikoni dhe testoni!
Kemi mbaruar! Aplikacioni juaj React tani do të përkthehet automatikisht kur të shtoni ndonjë string në një komponent Translate
. Kini parasysh se vetëm mjediset me lejet read/write
në çelësin e API-së do të jenë në gjendje të krijojnë stringje të reja për t'u përkthyer. Ne rekomandojmë të keni një mjedis staging të mbyllur dhe të siguruar ku mund të testoni aplikacionin tuaj të prodhimit me një çelës API të tillë, duke shtuar stringje të reja para lansimit. Kjo do të parandalojë që kushdo kushdo të vjedhë çelësin tuaj sekret të API-së, dhe potencialisht të fryjë projektin tuaj të përkthimit duke shtuar stringje të reja, të pashoqëruara.
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!