Cara melaksanakan pengantarabangsaan dalam aplikasi Next.js yang menggunakan Pages Router
Jadikan aplikasi React anda lebih mudah diakses dan capai pasaran baru dengan pengantarabangsaan (i18n).
Apabila dunia menjadi lebih global, adalah semakin penting bagi pembangun web untuk membina aplikasi yang boleh memenuhi keperluan pengguna dari pelbagai negara dan budaya. Salah satu cara utama untuk mencapai ini adalah melalui internationalization (i18n), yang membolehkan anda menyesuaikan aplikasi anda kepada pelbagai bahasa, mata wang, dan format tarikh.
Dalam tutorial ini, kita akan meneroka cara menambah internationalization 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 Pages Router.
Jika anda menggunakan App Router, sila lihat panduan ini sebagai ganti.
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. Walau bagaimanapun, dalam contoh ini, kita akan menggunakan TacoTranslate.
TacoTranslate secara automatik menterjemah string anda ke mana-mana bahasa menggunakan AI terkini, dan membebaskan anda dari pengurusan fail JSON yang membosankan.
Marilah kita pasangkan ia menggunakan npm di terminal anda:
npm install tacotranslate
Langkah 2: Cipta akaun TacoTranslate percuma
Sekarang anda telah memasang modul tersebut, sudah tiba masanya untuk membuat 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 aplikasi TacoTranslate, buat sebuah projek, dan navigasi ke tab kunci API-nya. 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
. Contohnya, anda boleh menambahkannya ke fail .env
di akar projek anda.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Pastikan anda tidak pernah membocorkan kekunci API rahsia read/write
kepada persekitaran pengeluaran sisi klien.
Kami juga akan menambah dua pembolehubah persekitaran lagi: TACOTRANSLATE_DEFAULT_LOCALE
dan TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Kod lokasi lalai sebagai gantian. 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 origin di sini.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Langkah 3: Menyediakan TacoTranslate
Untuk mengintegrasikan TacoTranslate dengan aplikasi anda, anda perlu mencipta klien menggunakan kekunci API dari yang sebelum ini. Sebagai contoh, cipta fail bernama /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_DEFAULT_LOCALE ?? '',
});
module.exports = tacoTranslate;
Kami akan secara automatik mendefinisikan TACOTRANSLATE_API_KEY
sebentar lagi.
Mewujudkan client dalam fail yang berasingan menjadikannya lebih mudah untuk digunakan semula kemudian. Kini, menggunakan custom /pages/_app.tsx
, kami akan menambah pembekal TacoTranslate
.
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';
type PageProperties = {
origin: Origin;
locale: Locale;
locales: Locale[];
localizations: Localizations;
};
export default function App({Component, pageProps}: AppProps<PageProperties>) {
const {origin, locale, locales, localizations} = pageProps;
return (
<TacoTranslate
client={tacoTranslate}
origin={origin}
locale={locale}
localizations={localizations}
>
<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
<Component {...pageProps} />
</TacoTranslate>
);
}
Jika anda sudah mempunyai pageProps
dan _app.tsx
tersuai, sila kembangkan definisi tersebut dengan sifat dan kod dari atas.
Langkah 4: Melaksanakan rendering sisi pelayan
TacoTranslate membenarkan rendering sisi pelayan bagi terjemahan anda. Ini sangat meningkatkan pengalaman pengguna dengan memaparkan kandungan yang diterjemahkan dengan segera, bukannya paparan singkat kandungan yang belum diterjemah terlebih dahulu. Selain itu, kami boleh mengelakkan permintaan rangkaian pada klien, kerana kami sudah mempunyai semua terjemahan yang diperlukan.
Kita akan mulakan dengan membuat atau mengubah /next.config.js
.
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = {};
return withTacoTranslate(config, {
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'),
});
};
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.
Sehingga kini, kami hanya menyediakan aplikasi Next.js dengan senarai bahasa yang disokong. Perkara seterusnya yang akan kami lakukan adalah mendapatkan terjemahan untuk semua halaman anda. Untuk melakukan itu, anda boleh menggunakan sama ada getTacoTranslateStaticProps
atau getTacoTranslateServerSideProps
berdasarkan keperluan anda.
Fungsi-fungsi ini mengambil tiga argumen: Satu objek Next.js Static Props Context, konfigurasi untuk TacoTranslate, dan sifat Next.js pilihan. Perhatikan bahawa revalidate
pada getTacoTranslateStaticProps
ditetapkan kepada 60 secara lalai, supaya terjemahan anda sentiasa dikemas kini.
Untuk menggunakan salah satu fungsi ini dalam halaman, anggaplah anda mempunyai fail halaman seperti /pages/hello-world.tsx
.
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';
export async function getStaticProps(context) {
return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}
export default function Page() {
return <Translate string="Hello, world!"/>;
}
Anda kini sepatutnya dapat menggunakan komponen Translate
untuk menterjemah rentetan dalam semua komponen React anda.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}
Langkah 5: Sebarkan dan uji!
Kami sudah selesai! Aplikasi React anda kini akan diterjemahkan secara automatik apabila anda menambah sebarang rentetan ke dalam komponen Translate
. Perhatikan bahawa hanya persekitaran dengan keizinan read/write
pada kunci API yang akan dapat mencipta rentetan baru untuk diterjemahkan. Kami mengesyorkan agar mempunyai persekitaran penstagingan yang tertutup dan selamat di mana anda boleh menguji aplikasi produksi anda dengan kunci API seperti itu, menambah rentetan baru sebelum siaran langsung. Ini akan mengelakkan sesiapa daripada mencuri kunci API rahsia anda, dan berpotensi membanjiri projek terjemahan anda dengan rentetan baru yang tidak berkaitan.
Pastikan untuk melihat contoh lengkap di profil GitHub kami. Di sana, anda juga akan menemui contoh bagaimana melakukan ini menggunakan App Router ! Jika anda menghadapi sebarang masalah, jangan ragu untuk menghubungi kami, dan kami akan dengan senang hati membantu.
TacoTranslate membolehkan anda membuat lokalizasi automatik aplikasi React anda dengan pantas ke dan dari mana-mana bahasa. Mulakan hari ini!