TacoTranslate
/
DokumentasiHarga
 

Tutorial

04 Mei

Cara melaksanakan pengantarabangsaan dalam aplikasi Next.js yang menggunakan App Router

Jadikan aplikasi React anda lebih mudah diakses dan capai pasaran baharu dengan pengantarabangsaan (i18n).

Apabila dunia semakin mengglobal, adalah semakin penting bagi pembangun web untuk membina aplikasi yang dapat memenuhi keperluan pengguna dari pelbagai negara dan budaya. Salah satu cara utama untuk mencapai ini adalah melalui pengantarabangsaan (i18n), yang membolehkan anda menyesuaikan aplikasi anda dengan pelbagai bahasa, mata wang, dan format tarikh.

Dalam artikel ini, kami akan meneroka cara untuk menambah pengantarabangsaan ke dalam aplikasi React Next.js anda, dengan rendering sisi pelayan. TL;DR: Lihat contoh penuh di sini.

Panduan ini adalah untuk aplikasi Next.js yang menggunakan App Router.
Jika anda menggunakan Pages Router, sila lihat panduan ini sebagai gantinya.

Langkah 1: Pasang perpustakaan i18n

Untuk melaksanakan pengantarabangsaan dalam aplikasi Next.js anda, kita akan mula-mula memilih perpustakaan i18n. Terdapat beberapa perpustakaan popular, termasuk next-intl. Namun, dalam contoh ini, kita akan menggunakan TacoTranslate.

TacoTranslate secara automatik menterjemah rentetan anda ke mana-mana bahasa menggunakan AI canggih, dan membebaskan anda daripada pengurusan fail JSON yang melelahkan.

Jom pasang menggunakan npm dalam terminal anda:

npm install tacotranslate

Langkah 2: Cipta akaun TacoTranslate percuma

Sekarang bahawa anda telah memasang modul tersebut, sudah tiba masanya untuk mencipta akaun TacoTranslate anda, projek terjemahan, dan kekunci API yang berkaitan. Cipta akaun di sini. Ia percuma, dan tidak memerlukan anda untuk menambah kad kredit.

Dalam antara muka pengguna aplikasi TacoTranslate, cipta projek, dan navigasi ke tab kekunci API-nya. Cipta satu kekunci read dan satu kekunci read/write. Kami akan menyimpannya sebagai pembolehubah persekitaran. Kekunci read adalah apa yang kami panggil public dan kekunci read/write adalah secret. Sebagai contoh, anda boleh menambahkannya ke dalam fail .env di akar projek anda.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Pastikan untuk tidak pernah membocorkan kunci API rahsia read/write ke persekitaran produksi sisi klien.

Kami juga akan menambah dua pemboleh ubah persekitaran lagi: TACOTRANSLATE_DEFAULT_LOCALE dan TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: Kod setempat lalai sebagai sandaran. Dalam contoh ini, kami akan menetapkannya kepada en untuk Bahasa Inggeris.
  • TACOTRANSLATE_ORIGIN: “Folder” di mana rentetan anda akan disimpan, seperti URL laman web anda. Baca lebih lanjut mengenai origins di sini.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Langkah 3: Menyediakan TacoTranslate

Untuk mengintegrasikan TacoTranslate dengan aplikasi anda, anda perlu membuat klien menggunakan kekunci API dari sebelumnya. Sebagai contoh, buat fail bernama /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;

Kami akan secara automatik mendefinisikan TACOTRANSLATE_API_KEY dan TACOTRANSLATE_PROJECT_LOCALE tidak lama lagi.

Mewujudkan klien dalam fail yang berasingan memudahkan penggunaannya semula kemudian. getLocales hanyalah sebuah fungsi utiliti dengan beberapa pengendalian ralat terbina dalam. Sekarang, cipta fail bernama /app/[locale]/tacotranslate.tsx, di mana kita akan melaksanakan penyedia 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>
	);
}

Perhatikan 'use client'; yang menunjukkan bahawa ini adalah komponen klien.

Dengan penyedia konteks kini sudah sedia, buat fail bernama /app/[locale]/layout.tsx, susun atur akar dalam aplikasi kami. Perhatikan bahawa laluan ini mempunyai folder yang menggunakan Dynamic Routes, di mana [locale] adalah parameter dinamik.

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

Perkara pertama yang perlu diperhatikan di sini ialah kami menggunakan parameter Dynamic Route [locale] untuk mendapatkan terjemahan bagi bahasa tersebut. Selain itu, generateStaticParams memastikan semua kod lokal yang anda aktifkan untuk projek anda telah dirender terlebih dahulu.

Sekarang, mari kita bina halaman pertama kita! Cipta fail bernama /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!" />
	);
}

Perhatikan pembolehubah revalidate yang memberitahu Next.js untuk membina semula halaman selepas 60 saat, dan memastikan terjemahan anda sentiasa dikemas kini.

Langkah 4: Melaksanakan rendering sisi pelayan

TacoTranslate menyokong rendering sisi pelayan. Ini memperbaiki pengalaman pengguna dengan ketara dengan menunjukkan kandungan yang diterjemahkan serta-merta, bukannya terlebih dahulu memaparkan kandungan yang tidak diterjemahkan secara sekelip mata. Selain itu, kami boleh mengabaikan permintaan rangkaian pada klien, kerana kami sudah mempunyai terjemahan yang diperlukan untuk halaman yang sedang dilihat pengguna.

Untuk menyediakan server side rendering, buat atau ubah /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};
};

Ubahsuai pemeriksaan isProduction mengikut tetapan anda. Jika true, TacoTranslate akan memaparkan kunci API awam. Jika kita berada dalam persekitaran tempatan, ujian, atau staging (isProduction is false), kita akan menggunakan kunci API rahsia read/write untuk memastikan rentetan baru dihantar untuk terjemahan.

Untuk memastikan penghalaan dan pengalihan berfungsi seperti yang dijangkakan, kita perlu membuat fail bernama /middleware.ts. Menggunakan Middleware, kita boleh mengalihkan pengguna ke halaman yang dipersembahkan dalam bahasa pilihan mereka.

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

Pastikan untuk menetapkan matcher mengikut dokumentasi Next.js Middleware.

Pada klien, anda boleh mengubah kuki locale untuk menukar bahasa pilihan pengguna. Sila lihat kod contoh lengkap untuk idea tentang cara melakukannya!

Langkah 5: Lancarkan dan uji!

Kami sudah selesai! Aplikasi React anda kini akan diterjemahkan secara automatik apabila anda menambah sebarang rentetan ke komponen Translate. Perlu diingat bahawa hanya persekitaran dengan kebenaran read/write pada kunci API yang akan dapat mencipta rentetan baru untuk diterjemahkan. Kami mengesyorkan untuk mempunyai persekitaran staging yang tertutup dan selamat di mana anda boleh menguji aplikasi produksi anda dengan kunci API seperti itu, menambah rentetan baru sebelum dilancarkan secara rasmi. Ini akan menghalang sesiapa daripada mencuri kunci API rahsia anda, dan berpotensi membengkakkan projek terjemahan anda dengan menambah rentetan baru yang tidak berkaitan.

Pastikan untuk semak contoh lengkap di profil GitHub kami. Di sana, anda juga akan menemui contoh bagaimana melakukan ini menggunakan Pages Router ! Jika anda menghadapi sebarang masalah, jangan ragu untuk menghubungi kami, dan kami akan dengan senang hati membantu.

TacoTranslate membolehkan anda menjadikan aplikasi React anda boleh dialih bahasa secara automatik dengan pantas ke dan daripada mana-mana bahasa. Mula hari ini!

Produk daripada NattskiftetDihasilkan di Norway