Tutorial
Cara untuk melaksanakan pengantarabangsaan dalam aplikasi Next.js yang menggunakan App Router
Jadikan aplikasi React anda lebih mesra pengguna dan capai pasaran baru dengan pengantarabangsaan (i18n).
Apabila dunia menjadi lebih global, 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 internasionalisasi (i18n), yang membolehkan anda menyesuaikan aplikasi anda kepada pelbagai bahasa, mata wang, dan format tarikh.
Dalam artikel ini, kami akan meneroka cara menambah internasionalisasi ke aplikasi React Next.js anda, dengan rendering sebelah 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 memilih perpustakaan i18n. Terdapat beberapa perpustakaan popular, termasuk next-intl. Namun, dalam contoh ini, kita akan menggunakan TacoTranslate.
TacoTranslate secara automatik menterjemahkan string anda ke mana-mana bahasa menggunakan AI terkini, dan membebaskan anda daripada pengurusan fail JSON yang membosankan.
Mari kita pasangkan ia menggunakan npm di terminal anda:
npm install tacotranslate
Langkah 2: Cipta akaun TacoTranslate percuma
Sekarang bahawa anda telah memasang modul tersebut, adalah masa untuk mencipta akaun TacoTranslate anda, satu projek terjemahan, dan kunci API yang berkaitan. Cipta akaun di sini. Ia adalah percuma, dan tidak memerlukan anda untuk menambah kad kredit.
Dalam antara muka pengguna aplikasi TacoTranslate, buat satu projek, dan navigasi ke tab kunci API-nya. Buat satu kunci read
, dan satu kunci read/write
. Kami akan menyimpannya sebagai pemboleh ubah persekitaran. Kunci read
adalah apa yang kami panggil public
dan kunci read/write
adalah secret
. Sebagai contoh, anda boleh menambahkannya ke dalam fail .env
di akar projek anda.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Pastikan anda tidak pernah membocorkan kunci API rahsia read/write
kepada persekitaran pengeluaran sisi klien.
Kami juga akan menambah dua lagi pembolehubah persekitaran: TACOTRANSLATE_DEFAULT_LOCALE
dan TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Kod lokal lalai fallback. Dalam contoh ini, kami akan menetapkannya kepadaen
untuk Bahasa Inggeris.TACOTRANSLATE_ORIGIN
: “Folder” di mana rentetan anda akan disimpan, seperti URL laman web anda. Baca lebih lanjut mengenai origins di sini.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Langkah 3: Menyediakan 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;
Kami akan secara automatik mendefinisikan TACOTRANSLATE_API_KEY
dan TACOTRANSLATE_PROJECT_LOCALE
tidak lama lagi.
Mewujudkan client dalam fail yang berasingan memudahkan penggunaannya semula kemudian. getLocales
hanyalah fungsi utiliti dengan pengendalian ralat terbina dalam. Sekarang, cipta fail bernama /app/[locale]/tacotranslate.tsx
, di mana kita akan melaksanakan penyedia 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>
);
}
Perhatikan 'use client';
yang menunjukkan bahawa ini adalah komponen klien.
Dengan penyedia konteks kini sedia untuk digunakan, 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.
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 kita menggunakan parameter Dynamic Route
kita [locale]
untuk mendapatkan terjemahan bagi bahasa tersebut. Selain itu, generateStaticParams
memastikan semua kod lokal yang telah anda aktifkan untuk projek anda dipra-render.
Sekarang, mari kita bina halaman pertama kita! Cipta fail bernama /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 sebelah pelayan
TacoTranslate menyokong server side rendering. Ini sangat meningkatkan pengalaman pengguna dengan memaparkan kandungan yang diterjemah serta-merta, dan bukannya memaparkan kandungan yang tidak diterjemah terlebih dahulu. Selain itu, kami boleh mengelakkan permintaan rangkaian pada klien, kerana kami sudah mempunyai terjemahan yang diperlukan untuk halaman yang sedang dilihat oleh pengguna.
Untuk menyediakan rendering sisi pelayan, buat atau ubah /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};
};
Ubah suai semak isProduction
agar sesuai dengan persediaan anda. Jika true
, TacoTranslate akan memaparkan kunci API awam. Jika kami berada dalam persekitaran tempatan, ujian atau pementasan (isProduction
is false
), kami akan menggunakan kunci API read/write
rahsia untuk memastikan rentetan baharu dihantar untuk terjemahan.
Untuk memastikan penentuan laluan dan pengalihan berfungsi seperti yang dijangkakan, kita perlu membuat fail bernama /middleware.ts
. Dengan menggunakan Middleware, kita boleh mengalihkan pengguna ke halaman yang dipersembahkan dalam bahasa pilihan mereka.
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.
Di 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 dalam komponen Translate
. Perlu diingat bahawa hanya persekitaran dengan kebenaran read/write
pada kunci API yang boleh membuat rentetan baru untuk diterjemahkan. Kami mengesyorkan mempunyai persekitaran pementasan yang tertutup dan selamat di mana anda boleh menguji aplikasi produksi anda dengan kunci API seperti itu, menambah rentetan baru sebelum dilancarkan. Ini akan menghalang sesiapa daripada mencuri kunci API rahsia anda, dan berpotensi membesarkan projek terjemahan anda dengan menambah rentetan baru yang tidak berkaitan.
Pastikan untuk menyemak contoh lengkap di profil GitHub kami. Di sana, anda juga akan menemui contoh bagaimana untuk melakukannya menggunakan Pages Router! Jika anda menghadapi sebarang masalah, sila hubungi kami, dan kami akan dengan senang hati membantu.
TacoTranslate membolehkan anda menterjemah aplikasi React anda secara automatik dengan cepat ke mana-mana bahasa dan daripadanya. Mulakan hari ini!