Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Riwayat Versi
- Versi awalv7.0.61/11/2025
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
Cara menginternasionalisasi aplikasi Next.js Anda menggunakan next-i18next pada tahun 2026
Daftar Isi
Apa itu next-i18next?
next-i18next adalah solusi internasionalisasi (i18n) yang populer untuk aplikasi Next.js. Meskipun paket next-i18next asli dirancang untuk Pages Router, panduan ini menunjukkan cara mengimplementasikan i18next dengan App Router modern menggunakan i18next dan react-i18next secara langsung.
Dengan pendekatan ini, Anda dapat:
- Mengorganisir terjemahan menggunakan namespace (misalnya,
common.json,about.json) untuk manajemen konten yang lebih baik. - Memuat terjemahan secara efisien dengan hanya memuat namespace yang diperlukan untuk setiap halaman, sehingga mengurangi ukuran bundle.
- Mendukung komponen server dan klien dengan penanganan SSR dan hidrasi yang tepat.
- Memastikan dukungan TypeScript dengan konfigurasi locale dan kunci terjemahan yang aman tipe.
- Mengoptimalkan untuk SEO dengan metadata yang tepat, sitemap, dan internasionalisasi robots.txt.
Sebagai alternatif, Anda juga dapat merujuk ke panduan next-intl, atau langsung menggunakan Intlayer.
Lihat perbandingan di next-i18next vs next-intl vs Intlayer.
Praktik yang harus Anda ikuti
Sebelum kita masuk ke implementasi, berikut beberapa praktik yang harus Anda ikuti:
- Atur atribut HTML
langdandirDi layout Anda, hitungdirmenggunakangetLocaleDirection(locale)dan atur<html lang={locale} dir={dir}>untuk aksesibilitas dan SEO yang tepat. - Pisahkan pesan berdasarkan namespace
Atur file JSON per locale dan namespace (misalnya,
common.json,about.json) agar hanya memuat apa yang Anda butuhkan. - Minimalkan payload klien
Pada halaman, kirim hanya namespace yang diperlukan ke
NextIntlClientProvider(misalnya,pick(messages, ['common', 'about'])). - Utamakan halaman statis Gunakan halaman statis sebanyak mungkin untuk kinerja dan SEO yang lebih baik.
- I18n pada komponen server
Komponen server, seperti halaman atau semua komponen yang tidak ditandai sebagai
client, adalah statis dan dapat di-pre-render saat build time. Jadi kita harus mengoper fungsi terjemahan ke mereka sebagai props. - Siapkan tipe TypeScript Untuk locale Anda agar memastikan keamanan tipe di seluruh aplikasi Anda.
- Proxy untuk pengalihan Gunakan proxy untuk menangani deteksi locale dan routing serta mengarahkan pengguna ke URL dengan prefix locale yang sesuai.
- Internasionalisasi metadata, sitemap, robots.txt Anda
Internasionalisasikan metadata, sitemap, robots.txt Anda menggunakan fungsi
generateMetadatayang disediakan oleh Next.js untuk memastikan penemuan yang lebih baik oleh mesin pencari di semua locale. - Lokalisasi Tautan
Lokalisasi tautan menggunakan komponen
Linkuntuk mengarahkan pengguna ke URL dengan prefix locale yang sesuai. Ini penting untuk memastikan penemuan halaman Anda di semua locale. - Otomatisasi pengujian dan terjemahan Otomatisasi pengujian dan terjemahan membantu menghemat waktu dalam memelihara aplikasi multibahasa Anda.
Lihat dokumentasi kami yang mencantumkan semua yang perlu Anda ketahui tentang internasionalisasi dan SEO: Internasionalisasi (i18n) dengan next-intl.
Panduan Langkah demi Langkah untuk Mengatur i18next dalam Aplikasi Next.js
Lihat Application Template di GitHub.
Berikut adalah struktur proyek yang akan kita buat:
Salin kode ke clipboard
Instalasi Dependensi
Instal paket-paket yang diperlukan menggunakan npm:
bashSalin kodeSalin kode ke clipboard
- i18next: Kerangka kerja internasionalisasi inti yang menangani pemuatan dan pengelolaan terjemahan.
- react-i18next: Binding React untuk i18next yang menyediakan hooks seperti
useTranslationuntuk komponen klien. - i18next-resources-to-backend: Plugin yang memungkinkan pemuatan dinamis file terjemahan, sehingga Anda hanya memuat namespace yang Anda butuhkan.
Konfigurasikan Proyek Anda
Buat file konfigurasi untuk mendefinisikan locale yang didukung, locale default, dan fungsi pembantu untuk lokalisasi URL. File ini berfungsi sebagai sumber kebenaran tunggal untuk pengaturan i18n Anda dan memastikan keamanan tipe di seluruh aplikasi Anda.
Mencentralisasi konfigurasi locale Anda mencegah inkonsistensi dan memudahkan penambahan atau penghapusan locale di masa depan. Fungsi pembantu memastikan pembuatan URL yang konsisten untuk SEO dan routing.
i18n.config.tsSalin kodeSalin kode ke clipboard
Sentralisasi Namespace Terjemahan
Buat satu sumber kebenaran untuk setiap namespace yang diekspos oleh aplikasi Anda. Menggunakan kembali daftar ini menjaga sinkronisasi kode server, klien, dan tooling serta membuka tipe kuat untuk helper terjemahan.
src/i18n.namespaces.tsSalin kodeSalin kode ke clipboard
Ketik Kuat Kunci Terjemahan dengan TypeScript
Perluas
i18nextuntuk menunjuk ke file bahasa kanonik Anda (biasanya bahasa Inggris). TypeScript kemudian menafsirkan kunci yang valid per namespace, sehingga panggilan ket()diperiksa secara menyeluruh.src/types/i18next.d.tsSalin kodeSalin kode ke clipboard
Tip: Simpan deklarasi ini di bawah
src/types(buat foldernya jika belum ada). Next.js sudah memasukkansrcdalamtsconfig.json, sehingga augmentasi ini akan terdeteksi secara otomatis. Jika tidak, tambahkan yang berikut ke filetsconfig.jsonAnda:tsconfig.jsonSalin kodeSalin kode ke clipboard
Dengan ini, Anda dapat mengandalkan autocomplete dan pemeriksaan saat kompilasi:
tsxSalin kodeSalin kode ke clipboard
Siapkan Inisialisasi i18n di Sisi Server
Buat fungsi inisialisasi sisi server yang memuat terjemahan untuk komponen server. Fungsi ini membuat instance i18next terpisah untuk rendering sisi server, memastikan bahwa terjemahan dimuat sebelum rendering.
Komponen server membutuhkan instance i18next mereka sendiri karena mereka berjalan dalam konteks yang berbeda dari komponen klien. Memuat terjemahan terlebih dahulu di server mencegah tampilan konten yang belum diterjemahkan dan meningkatkan SEO dengan memastikan mesin pencari melihat konten yang sudah diterjemahkan.
src/app/i18n/server.tsSalin kodeSalin kode ke clipboard
Buat Provider i18n di Sisi Klien
Buat provider komponen klien yang membungkus aplikasi Anda dengan konteks i18next. Provider ini menerima terjemahan yang sudah dimuat sebelumnya dari server untuk mencegah flash konten yang belum diterjemahkan (FOUC) dan menghindari pengambilan data ganda.
Komponen klien membutuhkan instance i18next mereka sendiri yang berjalan di browser. Dengan menerima sumber daya yang sudah dimuat sebelumnya dari server, kita memastikan hidrasi yang mulus dan mencegah konten berkedip. Provider ini juga mengelola perubahan locale dan pemuatan namespace secara dinamis.
src/components/I18nProvider.tsxSalin kodeSalin kode ke clipboard
Definisikan Rute Locale Dinamis
Atur routing dinamis untuk locale dengan membuat direktori
[locale]di folder app Anda. Ini memungkinkan Next.js untuk menangani routing berbasis locale di mana setiap locale menjadi segmen URL (misalnya,/en/about,/fr/about).Menggunakan rute dinamis memungkinkan Next.js menghasilkan halaman statis untuk semua locale saat build time, meningkatkan performa dan SEO. Komponen layout mengatur atribut HTML
langdandirberdasarkan locale, yang sangat penting untuk aksesibilitas dan pemahaman mesin pencari.src/app/[locale]/layout.tsxSalin kodeSalin kode ke clipboard
Buat File Terjemahan Anda
Buat file JSON untuk setiap locale dan namespace. Struktur ini memungkinkan Anda mengatur terjemahan secara logis dan memuat hanya yang Anda butuhkan untuk setiap halaman.
Mengorganisir terjemahan berdasarkan namespace (misalnya,
common.json,about.json) memungkinkan pemisahan kode dan mengurangi ukuran bundle. Anda hanya memuat terjemahan yang dibutuhkan untuk setiap halaman, sehingga meningkatkan performa.src/locales/en/common.jsonSalin kodeSalin kode ke clipboard
src/locales/fr/common.jsonSalin kodeSalin kode ke clipboard
src/locales/en/home.jsonSalin kodeSalin kode ke clipboard
src/locales/id/home.jsonSalin kodeSalin kode ke clipboard
src/locales/en/about.jsonSalin kodeSalin kode ke clipboard
src/locales/id/about.jsonSalin kodeSalin kode ke clipboard
Memanfaatkan Terjemahan di Halaman Anda
Buat komponen halaman yang menginisialisasi i18next di server dan meneruskan terjemahan ke komponen server dan klien. Ini memastikan bahwa terjemahan dimuat sebelum rendering dan mencegah tampilan konten yang berkedip.
Inisialisasi sisi server memuat terjemahan sebelum halaman dirender, meningkatkan SEO dan mencegah FOUC (Flash of Unstyled Content). Dengan meneruskan sumber daya yang sudah dimuat ke penyedia klien, kita menghindari pengambilan data ganda dan memastikan hidrasi yang mulus.
src/app/[locale]/about/index.tsxSalin kodeSalin kode ke clipboard
Gunakan Terjemahan di Komponen Klien
Komponen klien dapat menggunakan hook
useTranslationuntuk mengakses terjemahan. Hook ini memberikan akses ke fungsi terjemahan dan instance i18n, memungkinkan Anda menerjemahkan konten dan mengakses informasi locale.Komponen klien memerlukan React hooks untuk mengakses terjemahan. Hook
useTranslationterintegrasi dengan mulus dengan i18next dan memberikan pembaruan reaktif saat locale berubah.Pastikan halaman/provider hanya menyertakan namespace yang Anda butuhkan (misalnya,
about).
Jika Anda menggunakan React < 19, gunakan memoization untuk formatter berat sepertiIntl.NumberFormat.src/components/ClientComponent.tsxSalin kodeSalin kode ke clipboard
Menggunakan Terjemahan di Komponen Server
Komponen server tidak dapat menggunakan React hooks, sehingga mereka menerima terjemahan melalui props dari komponen induk mereka. Pendekatan ini menjaga komponen server tetap sinkron dan memungkinkan mereka untuk disisipkan di dalam komponen klien.
Komponen server yang mungkin disisipkan di bawah batasan klien harus bersifat sinkron. Dengan meneruskan string terjemahan dan informasi locale sebagai props, kita menghindari operasi async dan memastikan rendering yang tepat.
src/components/ServerComponent.tsxSalin kodeSalin kode ke clipboard
Ubah bahasa konten Anda
OpsionalUntuk mengubah bahasa konten Anda di Next.js, cara yang direkomendasikan adalah menggunakan URL dengan prefix locale dan link Next.js. Contoh di bawah ini membaca locale saat ini dari rute, menghapusnya dari pathname, dan menampilkan satu link untuk setiap locale yang tersedia.
src/components/LocaleSwitcher.tsxSalin kodeSalin kode ke clipboard
Bangun komponen Link yang dilokalkan
OpsionalMenggunakan kembali URL yang dilokalkan di seluruh aplikasi Anda menjaga navigasi tetap konsisten dan ramah SEO. Bungkus
next/linkdalam helper kecil yang menambahkan prefix locale aktif pada rute internal sambil membiarkan URL eksternal tidak berubah.src/components/LocalizedLink.tsxSalin kodeSalin kode ke clipboard
Tip: Karena
LocalizedLinkadalah pengganti langsung, migrasikan secara bertahap dengan menukar impor dan membiarkan komponen menangani URL spesifik locale.Akses locale aktif di dalam Server Actions
OpsionalServer Actions sering membutuhkan locale saat ini untuk email, pencatatan, atau integrasi pihak ketiga. Gabungkan cookie locale yang diatur oleh proxy Anda dengan header
Accept-Languagesebagai cadangan.src/app/actions/get-current-locale.tsSalin kodeSalin kode ke clipboard
Karena helper ini bergantung pada cookies dan headers Next.js, ia bekerja di Route Handlers, Server Actions, dan konteks server-only lainnya.
Internasionalisasi Metadata Anda
OpsionalMenerjemahkan konten itu penting, tetapi tujuan utama internasionalisasi adalah membuat situs web Anda lebih terlihat oleh dunia. I18n adalah tuas luar biasa untuk meningkatkan visibilitas situs web Anda melalui SEO yang tepat.
Metadata yang diinternasionalisasi dengan benar membantu mesin pencari memahami bahasa apa saja yang tersedia di halaman Anda. Ini termasuk pengaturan tag meta hreflang, menerjemahkan judul dan deskripsi, serta memastikan URL kanonik diatur dengan benar untuk setiap locale.
Berikut adalah daftar praktik baik terkait SEO multibahasa:
- Atur tag meta hreflang di tag
<head>untuk membantu mesin pencari memahami bahasa apa saja yang tersedia di halaman - Daftarkan semua terjemahan halaman di sitemap.xml menggunakan skema XML
http://www.w3.org/1999/xhtml - Jangan lupa untuk mengecualikan halaman dengan prefix dari robots.txt (misalnya,
/dashboard,/fr/dashboard,/es/dashboard) - Gunakan komponen Link kustom untuk mengarahkan ke halaman dengan lokalitas paling sesuai (misalnya, dalam bahasa Prancis
<a href="/fr/about">À propos</a>)
Pengembang sering lupa untuk mereferensikan halaman mereka dengan benar di berbagai locale. Mari kita perbaiki itu:
src/app/[locale]/about/layout.tsxSalin kodeSalin kode ke clipboard
- Atur tag meta hreflang di tag
Internasionalisasi Sitemap Anda
OpsionalBuat sitemap yang mencakup semua versi locale dari halaman Anda. Ini membantu mesin pencari menemukan dan mengindeks semua versi bahasa dari konten Anda.
Sitemap yang diinternasionalisasi dengan benar memastikan mesin pencari dapat menemukan dan mengindeks semua versi bahasa dari halaman Anda. Ini meningkatkan visibilitas dalam hasil pencarian internasional.
src/app/sitemap.tsSalin kodeSalin kode ke clipboard
Internasionalisasi robots.txt Anda
OpsionalBuat file robots.txt yang menangani semua versi locale dari rute yang dilindungi dengan benar. Ini memastikan bahwa mesin pencari tidak mengindeks halaman admin atau dashboard dalam bahasa apa pun.
Mengonfigurasi robots.txt dengan benar untuk semua locale mencegah mesin pencari mengindeks halaman sensitif dalam bahasa apa pun. Ini sangat penting untuk keamanan dan privasi.
src/app/robots.tsSalin kodeSalin kode ke clipboard
Siapkan Middleware untuk Routing Locale
OpsionalBuat proxy untuk secara otomatis mendeteksi locale yang dipilih pengguna dan mengarahkan mereka ke URL dengan prefix locale yang sesuai. Ini meningkatkan pengalaman pengguna dengan menampilkan konten dalam bahasa pilihan mereka.
Middleware memastikan bahwa pengguna secara otomatis diarahkan ke bahasa pilihan mereka saat mengunjungi situs Anda. Middleware juga menyimpan preferensi pengguna dalam cookie untuk kunjungan berikutnya.
src/proxy.tsSalin kodeSalin kode ke clipboard
Otomatiskan Terjemahan Anda Menggunakan Intlayer
OpsionalIntlayer adalah perpustakaan gratis dan open-source yang dirancang untuk membantu proses lokalisasi dalam aplikasi Anda. Sementara i18next menangani pemuatan dan pengelolaan terjemahan, Intlayer membantu mengotomatisasi alur kerja terjemahan.
Mengelola terjemahan secara manual bisa memakan waktu dan rentan terhadap kesalahan. Intlayer mengotomatisasi pengujian, pembuatan, dan pengelolaan terjemahan, menghemat waktu Anda dan memastikan konsistensi di seluruh aplikasi Anda.
Intlayer memungkinkan Anda untuk:
Mendeklarasikan konten Anda di mana pun Anda mau dalam codebase Anda
Intlayer memungkinkan Anda mendeklarasikan konten di mana pun Anda mau dalam codebase menggunakan file.content.{ts|js|json}. Ini akan memungkinkan organisasi konten yang lebih baik, memastikan keterbacaan dan pemeliharaan codebase yang lebih baik.Menguji terjemahan yang hilang
Intlayer menyediakan fungsi pengujian yang dapat diintegrasikan dalam pipeline CI/CD Anda, atau dalam unit test Anda. Pelajari lebih lanjut tentang mengujicoba terjemahan Anda.Otomatiskan terjemahan Anda, Intlayer menyediakan CLI dan ekstensi VSCode untuk mengotomatisasi terjemahan Anda. Ini dapat diintegrasikan dalam pipeline CI/CD Anda. Pelajari lebih lanjut tentang otomatisasi terjemahan Anda. Anda dapat menggunakan kunci API Anda sendiri, dan penyedia AI pilihan Anda. Ini juga menyediakan terjemahan yang sadar konteks, lihat isi konten.
- Hubungkan konten eksternal
Otomatiskan terjemahan Anda,
Intlayer menyediakan CLI dan ekstensi VSCode untuk mengotomatisasi terjemahan Anda. Ini dapat diintegrasikan dalam pipeline CI/CD Anda. Pelajari lebih lanjut tentang otomatisasi terjemahan Anda.
Anda dapat menggunakan API key Anda sendiri, dan penyedia AI pilihan Anda. Ini juga menyediakan terjemahan yang sadar konteks, lihat mengisi konten.Hubungkan konten eksternal
Intlayer memungkinkan Anda menghubungkan konten Anda ke sistem manajemen konten eksternal (CMS). Untuk mengambilnya dengan cara yang dioptimalkan dan memasukkannya ke dalam sumber daya JSON Anda. Pelajari lebih lanjut tentang mengambil konten eksternal.Editor visual
Intlayer menawarkan editor visual gratis untuk mengedit konten Anda menggunakan editor visual. Pelajari lebih lanjut tentang pengeditan visual terjemahan Anda.
Dan masih banyak lagi. Untuk menemukan semua fitur yang disediakan oleh Intlayer, silakan merujuk ke Dokumentasi Manfaat Intlayer.
Komentar
Belum ada komentar. Jadilah yang pertama membagikan pemikiran Anda.