TacoTranslate
/
DogfennaethPrisiau
 
Tiwtorial
04 Mai 2025

Sut i weithredu rhyngwladoli mewn cais Next.js sy'n defnyddio'r App Router

Gwnewch eich ap React yn fwy hygyrch a chyrraedd marchnadoedd newydd gyda rhyngwladoli (i18n).

Wrth i'r byd ddod yn fwy byd-eang, mae'n dod yn fwy ac yn fwy pwysig i ddatblygwyr gwe adeiladu cymwysiadau a all ddiwallu anghenion defnyddwyr o wledydd a diwylliannau gwahanol. Un o'r prif ffyrdd o gyflawni hyn yw trwy ryngwladoli (i18n), sy'n eich galluogi i addasu eich cais i wahanol ieithoedd, arian cyfred, a fformatiau dyddiad.

Yn yr erthygl hon, byddwn yn archwilio sut i ychwanegu rhyngwladoli i'ch cais React Next.js, gan ddefnyddio rendro ar ochr y gweinydd. TL;DR: Gweler yr enghraifft lawn yma.

Mae'r canllaw hwn ar gyfer ceisiadau Next.js sy'n defnyddio'r App Router.
Os ydych yn defnyddio'r Pages Router, gweler y canllaw hwn yn hytrach.

Cam 1: Gosod llyfrgell i18n

Er mwyn gweithredu rhyngwladoli yn eich cais Next.js, byddwn yn dechrau drwy ddewis llyfrgell i18n. Mae sawl llyfrgell boblogaidd, gan gynnwys next-intl. Yn yr enghraifft hon, fodd bynnag, byddwn yn defnyddio TacoTranslate.

Mae TacoTranslate yn cyfieithu eich llinynnau yn awtomatig i unrhyw iaith gan ddefnyddio AI arloesol, ac yn eich rhyddhau rhag y gwaith diflas o reoli ffeiliau JSON.

Gadewch i ni ei osod gan ddefnyddio npm yn eich terminal:

npm install tacotranslate

Cam 2: Creu cyfrif TacoTranslate am ddim

Nawr eich bod wedi gosod y modiwl, mae'n bryd i chi greu eich cyfrif TacoTranslate, prosiect cyfieithu, a'r allweddi API cysylltiedig. Creu cyfrif yma. Mae'n rhad ac am ddim, ac nid oes angen i chi ychwanegu cerdyn credyd.

O fewn UI'r cais TacoTranslate, creu prosiect a llywio at y tab allweddi API. Creu un allwedd read, a un allwedd read/write. Byddwn yn eu cadw fel newidynnau amgylchedd. Y allwedd read yw'r hyn yr ydym yn ei alw'n public, a'r allwedd read/write yw secret. Er enghraifft, gallech eu hychwanegu at ffeil .env yn y ffolder gwraidd eich prosiect.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Gwnewch yn siŵr nad yw'r allwedd API gyfrinachol read/write byth yn cael ei ddatgelu i amgylcheddau cynhyrchu ar ochr y cleient.

Byddwn hefyd yn ychwanegu dau newidyn amgylcheddol arall: TACOTRANSLATE_DEFAULT_LOCALE a TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Y cod locale diofyn sy'n cael ei ddefnyddio fel wrth gefn. Yn yr enghraifft hon, byddwn yn ei osod i en ar gyfer Saesneg.
  • TACOTRANSLATE_ORIGIN: Y “ffolder” lle bydd eich linynnau yn cael eu storio, megis URL eich gwefan. Darllenwch ragor am darddiadau yma.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Cam 3: Sefydlu TacoTranslate

I integreiddio TacoTranslate gyda’ch cais, bydd angen i chi greu cleient gan ddefnyddio’r allweddi API a roddwyd yn gynharach. Er enghraifft, creu ffeil o’r enw /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;

Byddwn yn diffinio TACOTRANSLATE_API_KEY a TACOTRANSLATE_PROJECT_LOCALE yn awtomatig cyn bo hir.

Mae creu'r cleient mewn ffeil ar wahân yn ei gwneud yn haws ei ddefnyddio eto yn ddiweddarach. Mae getLocales yn swyddogaeth ddefnyddiol sy'n cynnwys rheolaeth gwallau adeiledig. Nawr, creu ffeil o'r enw /app/[locale]/tacotranslate.tsx, lle byddwn yn gweithredu'r darparwr TacoTranslate.

/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>
	);
}

Sylwch ar 'use client'; sy'n nodi bod hwn yn gydran cleient.

Gan fod y darparwr cyd-destun bellach yn barod i’w ddefnyddio, creu ffeil o’r enw /app/[locale]/layout.tsx, sef y layout gwraidd yn ein cais. Sylwch fod y llwybr hwn yn cynnwys ffolder sy’n defnyddio Dynamic Routes, lle mae [locale] yn baramedr deinamig.

/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>
	);
}

Y peth cyntaf i'w nodi yma yw ein bod yn defnyddio ein paramedr Dynamic Route [locale] i nôl cyfieithiadau ar gyfer y iaith honno. Yn ogystal, mae generateStaticParams yn sicrhau bod pob cod lleol rydych wedi'u galluogi ar gyfer eich prosiect wedi'u rhag-rendro.

Nawr, gadewch i ni adeiladu ein tudalen gyntaf! Creu ffeil o'r enw /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!" />
	);
}

Sylwch ar y newidyn revalidate sy'n dweud wrth Next.js i ailadeiladu'r dudalen ar ôl 60 eiliad, a sicrhau bod eich cyfieithiadau'n gyfredol.

Cam 4: Gweithredu rendro ar ochr y gweinydd

Mae TacoTranslate yn cefnogi rendro ochr y gweinydd. Mae hyn yn gwella profiad y defnyddiwr yn aruthrol gan ddangos cynnwys wedi'i gyfieithu ar unwaith, yn hytrach na fflach o gynnwys heb ei gyfieithu yn gyntaf. Yn ogystal, gallwn hepgor ceisiadau rhwydwaith ar y cleient, oherwydd bod gennym eisoes y cyfieithiadau sydd eu hangen ar gyfer y dudalen y mae'r defnyddiwr yn ei gweld.

I sefydlu rendro ochr y gweinydd, creu neu ddiwygio /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};
};

Addaswch y gwiriad isProduction i gyd-fynd â'ch ffurfweddiad. Os true, bydd TacoTranslate yn dangos yr allwedd API gyhoeddus. Os ydym mewn amgylchedd lleol, profi neu staging (isProduction is false), byddwn ni'n defnyddio'r allwedd API gyfrinachol read/write i sicrhau bod llinynnau newydd yn cael eu hanfon at gyfieithu.

Er mwyn sicrhau bod llwybro a hailgyfeirio yn gweithio fel disgwylir, bydd angen i ni greu ffeil o'r enw /middleware.ts. Gan ddefnyddio Middleware, gallwn ailgyfeirio defnyddwyr at dudalennau a gyflwynir yn eu hiaith ddewisol.

/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);
}

Sicrhewch eich bod wedi sefydlu'r matcher yn unol â dogfennaeth Middleware Next.js.

Ar y cleient, gallwch addasu'r cwci locale i newid pa iaith sydd wedi'i ffafrio gan y defnyddiwr. Gweler y cod enghreifftiol cyflawn am syniadau ar sut i wneud hyn!

Cam 5: Lansio a phrofi!

Rydym wedi gorffen! Bydd eich cais React yn cael ei gyfieithu'n awtomatig yn awr pan fyddwch yn ychwanegu unrhyw llinynnau i gydran Translate. Sylwch mai dim ond amgylcheddau sydd â chaniatâd read/write ar yr allwedd API fydd yn gallu creu llinynnau newydd i'w cyfieithu. Rydym yn argymell cael amgylchedd staging caeedig a diogel lle gallwch brofi eich cais cynhyrchu gyda allwedd API o'r fath, gan ychwanegu llinynnau newydd cyn mynd yn fyw. Bydd hyn yn atal unrhyw un unrhyw un rhag dwyn eich allwedd API gyfrinachol, ac efallai'n gwneud i'ch prosiect cyfieithu dyfu'n ormodol drwy ychwanegu llinynnau newydd nad ydynt yn berthnasol.

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!

Cynnyrch gan NattskiftetWedi'i wneud yn Norwy