Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Konten halaman ini diterjemahkan menggunakan AI.
Lihat versi terakhir dari konten aslinya dalam bahasa InggrisJika Anda memiliki ide untuk meningkatkan dokumentasi ini, silakan berkontribusi dengan mengajukan pull request di GitHub.
Tautan GitHub ke dokumentasiSalin Markdown dokumentasi ke clipboard
Menerjemahkan website Next.js 15 Anda menggunakan next-i18next dengan Intlayer | Internasionalisasi (i18n)
Untuk siapa panduan ini
- Junior: Ikuti langkah-langkah persis dan salin blok kode. Anda akan mendapatkan aplikasi multibahasa yang berfungsi.
- Mid-level: Gunakan daftar periksa dan catatan praktik terbaik untuk menghindari kesalahan umum.
- Senior: Baca sekilas struktur tingkat tinggi, SEO, dan bagian otomatisasi; Anda akan menemukan pengaturan default yang masuk akal dan titik ekstensi.
Apa yang akan Anda bangun
- Proyek App Router dengan rute yang dilokalkan (misalnya,
/,/fr/...) - Konfigurasi i18n dengan locale, locale default, dukungan RTL
- Inisialisasi i18n sisi server dan penyedia klien
- Terjemahan dengan namespace yang dimuat sesuai permintaan
- SEO dengan
hreflang,sitemapyang dilokalkan,robots - Middleware untuk routing locale
- Integrasi Intlayer untuk mengotomatisasi alur kerja terjemahan (tes, pengisian AI, sinkronisasi JSON)
Catatan: next-i18next dibangun di atas i18next. Panduan ini menggunakan primitif i18next yang kompatibel dengan next-i18next dalam App Router, sambil menjaga arsitektur tetap sederhana dan siap produksi. Untuk perbandingan yang lebih luas, lihat next-i18next vs next-intl vs Intlayer.
1) Struktur proyek
Pasang dependensi next-i18next -
Mulailah dengan struktur yang jelas. Simpan pesan yang dipisahkan berdasarkan locale dan namespace.
Daftar periksa (mid/senior):
- Simpan satu JSON per namespace per locale
- Jangan terlalu memusatkan pesan; gunakan namespace kecil yang terfokus pada halaman/fitur
- Hindari mengimpor semua locale sekaligus; muat hanya yang Anda butuhkan
2) Pasang dependensi
Jika Anda berencana menggunakan API atau interoperabilitas konfigurasi next-i18next, juga jalankan:
3) Konfigurasi inti i18n
Tentukan locales, locale default, RTL, dan helper untuk path/URL yang dilokalkan.
Catatan senior: Jika Anda menggunakan next-i18next.config.js, pastikan untuk menyelaraskannya dengan i18n.config.ts agar tidak terjadi perbedaan.
4) Inisialisasi i18n sisi server
Inisialisasi i18next di server dengan backend dinamis yang hanya mengimpor JSON locale/namespace yang diperlukan.
Catatan tengah: Jaga daftar namespace agar tetap singkat per halaman untuk membatasi payload. Hindari bundle global “catch-all”.
5) Provider klien untuk komponen React
Bungkus komponen klien dengan provider yang mencerminkan konfigurasi server dan hanya memuat namespace yang diminta.
Tips junior: Anda tidak perlu mengirim semua pesan ke klien. Mulailah hanya dengan namespace halaman saja.
6) Tata letak dan rute yang dilokalkan
Atur bahasa dan arah, serta pra-generate rute per locale untuk mendukung rendering statis.
7) Contoh halaman dengan penggunaan server + client
Terjemahan (satu JSON per namespace di bawah src/locales/...):
Komponen client (memuat hanya namespace yang diperlukan):
Pastikan halaman/provider hanya menyertakan namespace yang Anda butuhkan (misalnya,
about). Jika Anda menggunakan React < 19, gunakan memo untuk formatter berat sepertiIntl.NumberFormat.
Komponen server sinkron yang disematkan di bawah batas klien:
8) SEO: Metadata, Hreflang, Sitemap, Robots
Menerjemahkan konten adalah cara untuk meningkatkan jangkauan. Sambungkan SEO multibahasa secara menyeluruh.
Praktik terbaik:
- Atur
langdandirdi root - Tambahkan
alternates.languagesuntuk setiap locale (+x-default) - Daftarkan URL yang diterjemahkan di
sitemap.xmldan gunakanhreflang - Kecualikan area privat yang dilokalkan (misalnya,
/fr/admin) dirobots.txt
9) Middleware untuk routing locale
Mendeteksi locale dan mengarahkan ulang ke rute yang dilokalkan jika tidak ada.
10) Praktik terbaik Performa dan DX
- Set html
langdandir: Dilakukan disrc/app/[locale]/layout.tsx. - Pisahkan pesan berdasarkan namespace: Jaga bundle tetap kecil (
common.json,about.json, dll.). - Minimalkan payload klien: Pada halaman, kirim hanya namespace yang diperlukan ke provider.
- Utamakan halaman statis: Gunakan
export const dynamic = 'force-static'dangenerateStaticParamsper locale. - Sinkronkan komponen server: Kirim string/format yang sudah dihitung sebelumnya daripada panggilan async saat render.
- Memoisasi operasi berat: Terutama di kode klien untuk versi React yang lebih lama.
- Cache dan header: Utamakan statis atau
revalidatedaripada rendering dinamis jika memungkinkan.
11) Pengujian dan CI
- Tambahkan unit test untuk komponen yang menggunakan
tuntuk memastikan kunci ada. - Validasi bahwa setiap namespace memiliki kunci yang sama di semua locale.
- Tampilkan kunci yang hilang selama CI sebelum deploy.
Intlayer akan mengotomatisasi banyak hal ini (lihat bagian berikutnya).
12) Tambahkan Intlayer di atas (otomatisasi)
Intlayer membantu Anda menjaga sinkronisasi terjemahan JSON, menguji kunci yang hilang, dan mengisi dengan AI jika diinginkan.
Pasang dependensi intlayer:
Tambahkan skrip package:
Alur umum:
pnpm i18n:testdi CI untuk gagal membangun jika ada kunci yang hilangpnpm i18n:fillsecara lokal untuk mengusulkan terjemahan AI untuk kunci yang baru ditambahkan
Anda dapat memberikan argumen CLI; lihat dokumentasi Intlayer CLI.
13) Pemecahan Masalah
- Kunci tidak ditemukan: Pastikan halaman/provider mencantumkan namespace yang benar dan file JSON ada di bawah
src/locales/<locale>/<namespace>.json. - Bahasa salah/kedipan bahasa Inggris: Periksa kembali deteksi locale di
middleware.tsdan providerlng. - Masalah tata letak RTL: Verifikasi bahwa
dirberasal dariisRtl(locale)dan CSS Anda menghormati[dir="rtl"]. - Alternatif SEO hilang: Pastikan
alternates.languagesmencakup semua locale danx-default. - Bundle terlalu besar: Pisahkan namespace lebih lanjut dan hindari mengimpor seluruh pohon
localesdi sisi klien.
14) Apa Selanjutnya
- Tambahkan lebih banyak locale dan namespace seiring berkembangnya fitur
- Lokalisasi halaman error, email, dan konten yang digerakkan oleh API
- Perluas workflow Intlayer untuk membuka PR secara otomatis guna pembaruan terjemahan
Jika Anda lebih suka menggunakan starter, coba template ini: https://github.com/aymericzip/intlayer-next-i18next-template.