TacoTranslate
/
DokumentasiHarga
 
Panduan
04 Mei

Cara mengimplementasikan 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 menjadi lebih global, ia menjadi 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 ialah melalui pengantarabangsaan (i18n), yang membolehkan anda menyesuaikan aplikasi anda kepada bahasa, mata wang, dan format tarikh yang berbeza.

Dalam artikel ini, kita akan meneroka cara menambah pengantarabangsaan ke aplikasi React Next.js anda, dengan pemerenderan 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 pustaka i18n

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

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

Mari pasang ia menggunakan npm dalam terminal anda:

npm install tacotranslate

Langkah 2: Buat akaun TacoTranslate percuma

Sekarang anda telah memasang modul itu, sudah tiba masanya untuk membuat akaun TacoTranslate anda, sebuah projek penterjemahan, dan kekunci API yang berkaitan. Cipta akaun di sini. Ia percuma, dan tidak memerlukan anda memasukkan kad kredit.

Dalam UI aplikasi TacoTranslate, buat sebuah projek, dan pergi ke tab kunci API. Buat satu kunci read dan satu kunci read/write. Kami akan menyimpannya sebagai pembolehubah persekitaran. Kunci read adalah apa yang kami panggil public dan kunci read/write adalah secret. Sebagai contoh, anda boleh menambahkannya ke fail .env di akar projek anda.

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

Pastikan anda tidak pernah mendedahkan kunci API rahsia read/write kepada persekitaran produksi di pihak klien.

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

  • TACOTRANSLATE_DEFAULT_LOCALE: Kod locale lalai sebagai pilihan 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 tentang origins di sini.
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

Langkah 3: Menyiapkan TacoTranslate

Untuk mengintegrasikan TacoTranslate dengan aplikasi anda, anda perlu mencipta klien menggunakan kunci API yang dinyatakan tadi. 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.

Mencipta klien dalam fail berasingan memudahkan untuk digunakan semula kemudian. getLocales hanyalah fungsi utiliti dengan beberapa pengendalian ralat terbina dalam. Sekarang, buat sebuah fail bernama /app/[locale]/tacotranslate.tsx, di mana kita akan mengimplementasikan 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 sedia digunakan, cipta fail bernama /app/[locale]/layout.tsx, yang merupakan layout utama 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 diberi perhatian 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 dipra-render.

Sekarang, mari bina halaman pertama kita! Buat 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 meningkatkan pengalaman pengguna dengan ketara kerana kandungan yang diterjemahkan dipaparkan serta-merta, bukannya paparan kandungan yang belum diterjemahkan terlebih dahulu. Selain itu, kita boleh mengelakkan permintaan rangkaian pada pihak klien kerana kita sudah mempunyai terjemahan yang diperlukan untuk halaman yang sedang dilihat pengguna.

Untuk menyediakan rendering sisi pelayan, 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 untuk disesuaikan dengan 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 diterjemahkan.

Untuk memastikan penghalaan dan pengalihan berfungsi seperti yang dijangkakan, kita perlu membuat satu fail bernama /middleware.ts. Dengan menggunakan Middleware, kita boleh mengalihkan pengguna ke halaman yang dipaparkan 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 selaras dengan Dokumentasi Middleware Next.js.

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

Langkah 5: Lancarkan dan uji!

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

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!

Sebuah produk daripada NattskiftetDibuat di Norway