Cara menerapkan internasionalisasi pada aplikasi Next.js yang menggunakan Pages Router
Buat aplikasi React Anda lebih mudah diakses dan jangkau pasar baru dengan internasionalisasi (i18n).
Seiring dunia menjadi semakin terhubung secara global, semakin penting bagi pengembang web untuk membangun aplikasi yang dapat melayani pengguna dari berbagai negara dan budaya. Salah satu cara utama untuk mencapai ini adalah melalui internasionalisasi (i18n), yang memungkinkan Anda menyesuaikan aplikasi Anda ke berbagai bahasa, mata uang, dan format tanggal.
Dalam tutorial ini, kita akan menjelajahi cara menambahkan internasionalisasi ke aplikasi React Next.js Anda, dengan rendering sisi server. TL;DR: Lihat contoh lengkapnya di sini.
Panduan ini ditujukan untuk aplikasi Next.js yang menggunakan Pages Router.
Jika Anda menggunakan App Router, silakan lihat panduan ini sebagai gantinya.
Langkah 1: Instal pustaka i18n
Untuk menerapkan internasionalisasi di aplikasi Next.js Anda, pertama-tama kita akan memilih pustaka i18n. Ada beberapa pustaka populer, termasuk next-intl. Namun, dalam contoh ini, kita akan menggunakan TacoTranslate.
TacoTranslate secara otomatis menerjemahkan string Anda ke bahasa apa pun menggunakan AI mutakhir, dan membebaskan Anda dari pengelolaan file JSON yang membosankan.
Mari instal menggunakan npm di terminal Anda:
npm install tacotranslateLangkah 2: Buat akun TacoTranslate gratis
Sekarang setelah Anda menginstal modul, saatnya membuat akun TacoTranslate, sebuah proyek terjemahan, dan kunci API terkait. Buat akun di sini. Gratis, dan tidak mengharuskan Anda menambahkan kartu kredit.
Di antarmuka aplikasi TacoTranslate, buat sebuah proyek, lalu buka tab kunci API proyek tersebut. Buat satu read kunci, dan satu read/write kunci. Kita akan menyimpannya sebagai variabel lingkungan. Kunci read adalah yang kami sebut public, dan kunci read/write adalah secret. Misalnya, Anda bisa menambahkannya ke file .env di root proyek Anda.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010Pastikan untuk tidak pernah membocorkan kunci API rahasia read/write ke lingkungan produksi di sisi klien.
Kami juga akan menambahkan dua variabel lingkungan lagi: TACOTRANSLATE_DEFAULT_LOCALE dan TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: Kode locale fallback default. Dalam contoh ini, kami akan mengaturnya keenuntuk bahasa Inggris.TACOTRANSLATE_ORIGIN: “folder” tempat string Anda akan disimpan, seperti URL situs web Anda. Pelajari lebih lanjut tentang origins di sini.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.comLangkah 3: Menyiapkan TacoTranslate
Untuk mengintegrasikan TacoTranslate dengan aplikasi Anda, Anda perlu membuat klien menggunakan kunci API yang dibuat sebelumnya. Misalnya, buat file 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 segera secara otomatis mendefinisikan TACOTRANSLATE_API_KEY.
Membuat klien dalam berkas terpisah membuatnya lebih mudah digunakan lagi nanti. Sekarang, dengan menggunakan berkas kustom /pages/_app.tsx, kita akan menambahkan provider 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 memiliki custom pageProps dan _app.tsx, silakan perluas definisinya dengan properti dan kode yang disebutkan di atas.
Langkah 4: Mengimplementasikan rendering di sisi server
TacoTranslate memungkinkan rendering sisi server untuk terjemahan Anda. Ini sangat meningkatkan pengalaman pengguna dengan menampilkan konten yang sudah diterjemahkan secara langsung, alih-alih kilasan konten yang belum diterjemahkan terlebih dahulu. Selain itu, kita dapat melewatkan permintaan jaringan di sisi klien, karena kita sudah memiliki semua terjemahan yang dibutuhkan.
Kita akan mulai dengan membuat atau memodifikasi /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 pengecekan isProduction agar sesuai dengan pengaturan Anda. Jika true, TacoTranslate akan menampilkan kunci API publik. Jika berada di lingkungan lokal, pengujian, atau staging (isProduction is false), kunci API rahasia read/write akan digunakan untuk memastikan string baru dikirim untuk diterjemahkan.
Sejauh ini, kita baru menyiapkan aplikasi Next.js dengan daftar bahasa yang didukung. Langkah berikutnya adalah mengambil terjemahan untuk semua halaman Anda. Untuk itu, gunakan salah satu getTacoTranslateStaticProps atau getTacoTranslateServerSideProps sesuai kebutuhan Anda.
Fungsi-fungsi ini menerima tiga argumen: satu objek Next.js Static Props Context, konfigurasi untuk TacoTranslate, dan properti Next.js opsional. Perhatikan bahwa revalidate pada getTacoTranslateStaticProps disetel ke 60 secara default, agar terjemahan Anda tetap terbarui.
Untuk menggunakan salah satu fungsi pada sebuah halaman, anggaplah Anda memiliki berkas 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 sekarang seharusnya dapat menggunakan komponen Translate untuk menerjemahkan string di semua komponen React Anda.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}Langkah 5: Terapkan dan uji!
Selesai! Aplikasi React Anda sekarang akan diterjemahkan secara otomatis ketika Anda menambahkan string apa pun ke komponen Translate. Perlu dicatat bahwa hanya lingkungan dengan izin read/write pada kunci API yang akan dapat membuat string baru untuk diterjemahkan. Kami menyarankan agar Anda memiliki lingkungan staging tertutup dan aman di mana Anda dapat menguji aplikasi produksi Anda dengan kunci API seperti itu, menambahkan string baru sebelum diluncurkan. Ini akan mencegah siapa pun mencuri kunci API rahasia Anda, dan berpotensi membengkakkan proyek terjemahan Anda dengan menambahkan string baru yang tidak terkait.
Pastikan untuk melihat contoh lengkap di profil GitHub kami. Di sana, Anda juga akan menemukan contoh cara melakukannya menggunakan App Router! Jika Anda mengalami masalah, jangan ragu untuk menghubungi kami, dan kami akan sangat senang membantu.
TacoTranslate memungkinkan Anda untuk secara otomatis melokalkan aplikasi React Anda dengan cepat ke dan dari lebih dari 75 bahasa. Mulai hari ini!