Si të implementoni ndërkombëtarizimin në një aplikacion Next.js që përdor App Router
Bëni aplikacionin tuaj React më të aksesueshëm dhe arrini tregje të reja me ndërkombëtarizimin (i18n).
Ndërsa bota bëhet më globale, është gjithnjë e më e rëndësishme për zhvilluesit e uebit të krijojnë aplikacione që mund t'i 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 me gjuhë, monedha dhe formate datash të ndryshme.
Në këtë artikull, do të eksplorojmë se si të shtoni internacionalizimin në aplikacionin tuaj React Next.js, me renderim nga ana e serverit. TL;DR: Shihni 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, shikoni këtë udhëzues në vend të tij.
Hapi 1: Instaloni një bibliotekë i18n
Për të zbatuar ndërkombëtarizimin 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ë, ne do të përdorim TacoTranslate.
TacoTranslate përkthen automatikisht vargjet tuaja në çdo gjuhë duke përdorur AI të avancuar, dhe ju çlirëson nga menaxhimi i lodhshëm i skedarëve JSON.
Le ta instalojmë atë duke përdorur npm në terminalin tuaj:
npm install tacotranslate
Hapi 2: Krijo një llogari falas në TacoTranslate
Tani që keni instaluar modulën, është koha të krijoni llogarinë tuaj TacoTranslate, një projekt përkthimi, dhe çelësat API të lidhur. Krijoni një llogari këtu. Është falas, dhe nuk kërkon të shtoni 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
. Ne do t'i ruajmë ato si variabla mjedisore. Çelësi read
është ai që e quajmë public
dhe çelësi read/write
është secret
. Për shembull, mund t'i shtoni ato në një skedar .env
në rrënjën e projektit tuaj.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Sigurohuni që asnjëherë të mos rrjedhni çelësin sekret API read/write
në mjediset prodhuese të klientit.
Ne do të shtojmë edhe dy variabla të tjera mjedisi: TACOTRANSLATE_DEFAULT_LOCALE
dhe TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Kodi i parazgjedhur i lokalizimit për kthim. Në këtë shembull, do ta vendosim nëen
për Anglisht.TACOTRANSLATE_ORIGIN
: “Dosja” ku do të ruhen vargjet tuaja, si p.sh. URL-ja e faqes suaj të internetit. Lexoni më shumë rreth origjinave këtu.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Hapi 3: Konfigurimi i TacoTranslate
To integrate TacoTranslate with your application, you’ll need to create a client using the API keys from earlier. For example, create a file named /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 më vonë. getLocales
është thjesht një funksion ndihmës me disa trajtime gabimesh të ndërtuara brenda. Tani, krijoni një skedar me emrin /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 kjo është një komponentë klienti.
Me ofruesin e kontekstit tashmë gati për përdorim, krijo një skedar të quajtur /app/[locale]/layout.tsx
, layout-in rrënjor 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 ne 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 lokalit që keni aktivizuar për projektin tuaj të jenë pararushtuar.
Tani, le të ndërtojmë faqen tonë të parë! Krijo 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 variablin revalidate
që i tregon Next.js të rindërtojë faqe pas 60 sekondash dhe të mbajë përkthimet tuaja të përditësuara.
Hapi 4: Implementimi i renderimit në anën e serverit
TacoTranslate mbështet renderimin në server. Kjo përmirëson shumë përvojën e përdoruesit duke shfaqur menjëherë përmbajtjen e përkthyer, në vend të një shfaqjeje të përmbajtjes së papërkthyer fillimisht. Për më tepër, ne mund të shmangim kërkesat në rrjet nga klienti, sepse tashmë kemi përkthimet që na duhen për faqen që përdoruesi po shikon.
Për të vendosur rendering nga ana 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};
};
Modifikoni kontrollin e isProduction
për t'iu përshtatur konfigurimit tuaj. Nëse true
, TacoTranslate do të shfaqë çelësin publik API. Nëse jemi në një mjedis lokal, testimi ose inskenimi (isProduction
is false
), do të përdorim çelësin sekret read/write
API për t'u siguruar që vargjet e reja të dërgohen për përkthim.
Për të garantuar që rutimi dhe ridrejtimi të funksionojnë siç pritet, do të na duhet të krijojmë një skedar me emrin /middleware.ts
. Duke përdorur Middleware, ne mund t'i ridrejtojmë përdoruesit te faqet e paraqitura në gjuhën që ata preferojnë.
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ë vendosni matcher
në përputhje me dokumentacionin e Next.js Middleware.
Në klient, mund të ndryshoni locale
cookie për të ndryshuar gjuhën e preferuar të përdoruesit. Ju lutemi shikoni kodin e plotë të shembullit për ide se si ta bëni këtë!
Hapi 5: Bëjni deploy dhe testoni!
Kemi mbaruar! Aplikacioni juaj React tani do të përkthehet automatikisht kur të shtoni çdo varg te një komponent Translate
. Vini re që vetëm mjediset me leje read/write
në çelësin API do të mund të krijojnë vargje të reja për t’u përkthyer. Ne rekomandojmë të keni një mjedis të mbyllur dhe të sigurt staging ku mund të testoni aplikacionin tuaj të prodhimit me një çelës API të tillë, duke shtuar vargje të reja para se të dilni live. Kjo do të parandalojë që dikush të vjedhë çelësin tuaj sekret API dhe potencialisht të fryjë projektin tuaj të përkthimit duke shtuar vargje të reja, të paketuara.
Sigurohuni që të shikoni shembullin e plotë në profilin tonë në GitHub. Atje, do të gjeni gjithashtu një shembull se si ta bëni këtë duke përdorur Pages Router ! Nëse hasni ndonjë problem, mos ngurroni të kontaktoni, dhe ne do të jemi më shumë se të lumtur t'ju ndihmojmë.
TacoTranslate ju lejon të lokalizoni automatikisht aplikacionet tuaja React shpejt në dhe nga çdo gjuhë. Filloni sot!