Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Riwayat Versi
- Versi awalv7.0.01/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-intl pada tahun 2026
Daftar Isi
Apa itu next-intl?
next-intl adalah perpustakaan internasionalisasi (i18n) yang populer yang dirancang khusus untuk Next.js App Router. Ini menyediakan cara yang mulus untuk membangun aplikasi Next.js multibahasa dengan dukungan TypeScript yang sangat baik dan optimasi bawaan.
Jika Anda mau, Anda juga dapat merujuk ke panduan next-i18next, 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
langdandir
Dalam 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 keNextIntlClientProvider(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 sebagaiclientadalah statis dan dapat di-pre-render pada waktu build. Jadi kita harus mengoper fungsi terjemahan ke mereka sebagai props. - Atur tipe TypeScript
Untuk locale Anda guna 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 fungsigenerateMetadatayang disediakan oleh Next.js untuk memastikan penemuan yang lebih baik oleh mesin pencari di semua locale. - Lokalisaikan Tautan
Lokalisasi Tautan menggunakan komponenLinkuntuk 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 next-intl di Aplikasi Next.js
Lihat Template Aplikasi di GitHub.
Berikut adalah struktur proyek yang akan kita buat:
Salin kode ke clipboard
Pasang Dependensi
Pasang paket yang diperlukan menggunakan npm:
bashSalin kodeSalin kode ke clipboard
- next-intl: Perpustakaan internasionalisasi inti untuk Next.js App Router yang menyediakan hooks, fungsi server, dan penyedia klien untuk mengelola terjemahan.
Konfigurasikan Proyek Anda
Buat file konfigurasi yang mendefinisikan locale yang didukung dan mengatur konfigurasi request next-intl. 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
getRequestConfigdijalankan pada setiap permintaan dan hanya memuat terjemahan yang dibutuhkan untuk setiap halaman, memungkinkan pemisahan kode dan mengurangi ukuran bundle.src/i18n.tsSalin kodeSalin kode ke clipboard
Definisikan Rute Dinamis Locale
Atur routing dinamis untuk locale dengan membuat direktori
[locale]di folder aplikasi Anda. Ini memungkinkan Next.js untuk menangani routing berbasis locale di mana setiap locale menjadi segmen URL (misalnya,/en/about,/fr/about).Menggunakan routing dinamis memungkinkan Next.js untuk 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
src/app/[locale]/about/page.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.locales/en/common.jsonSalin kodeSalin kode ke clipboard
locales/fr/common.jsonSalin kodeSalin kode ke clipboard
locales/en/about.jsonSalin kodeSalin kode ke clipboard
locales/fr/about.jsonSalin kodeSalin kode ke clipboard
Gunakan Terjemahan di Halaman Anda
Buat komponen halaman yang memuat terjemahan di server dan meneruskannya ke komponen server dan klien. Ini memastikan terjemahan dimuat sebelum rendering dan mencegah konten berkedip.
Memuat terjemahan di sisi server meningkatkan SEO dan mencegah FOUC (Flash of Untranslated Content). Dengan menggunakan
pickuntuk mengirim hanya namespace yang diperlukan ke penyedia klien, kita meminimalkan bundle JavaScript yang dikirim ke browser.src/app/[locale]/about/page.tsxSalin kodeSalin kode ke clipboard
Gunakan Terjemahan di Komponen Klien
Komponen klien dapat menggunakan hook
useTranslationsdanuseFormatteruntuk mengakses terjemahan dan fungsi pemformatan. Hook ini membaca dari konteksNextIntlClientProvider.Komponen klien memerlukan hook React untuk mengakses terjemahan. Hook
useTranslationsdanuseFormatterterintegrasi dengan mulus dengan next-intl dan menyediakan pembaruan reaktif saat locale berubah.Jangan lupa untuk menambahkan namespace yang diperlukan ke pesan klien halaman (hanya sertakan namespace yang benar-benar dibutuhkan oleh komponen klien Anda).
src/components/ClientComponent.tsxSalin kodeSalin kode ke clipboard
Menggunakan Terjemahan di Komponen Server
Komponen server tidak dapat menggunakan React hooks, sehingga mereka menerima terjemahan dan formatter melalui props dari komponen induknya. 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 yang sudah diterjemahkan dan nilai yang sudah diformat sebagai props, kita menghindari operasi async dan memastikan rendering yang tepat. Pre-komputasi terjemahan dan format di komponen halaman induk.
src/components/ServerComponent.tsxSalin kodeSalin kode ke clipboard
Di halaman/layout Anda, gunakan
getTranslationsdangetFormatterdarinext-intl/serveruntuk menghitung terjemahan dan format terlebih dahulu, lalu teruskan sebagai props ke komponen server.Ubah bahasa konten Anda
OpsionalUntuk mengubah bahasa konten Anda dengan next-intl, render tautan yang mengenali locale yang mengarah ke pathname yang sama sambil mengganti locale. Provider akan menulis ulang URL secara otomatis, jadi Anda hanya perlu menargetkan rute saat ini.
src/components/LocaleSwitcher.tsxSalin kodeSalin kode ke clipboard
Gunakan komponen Link yang sudah dilokalisasi
Opsionalnext-intlmenyediakan subpaketnext-intl/navigationyang berisi komponen link yang sudah dilokalisasi dan secara otomatis menerapkan locale aktif. Kami sudah mengekstraknya untuk Anda di file@/i18n, jadi Anda bisa menggunakannya seperti ini:src/components/MyComponent.tsxSalin kodeSalin kode ke clipboard
Akses locale aktif di dalam Server Actions
OpsionalServer Actions dapat membaca locale saat ini menggunakan
next-intl/server. Ini berguna untuk mengirim email yang sudah dilokalisasi atau menyimpan preferensi bahasa bersamaan dengan data yang dikirimkan.src/app/actions/get-current-locale.tsSalin kodeSalin kode ke clipboard
getLocalemembaca locale yang diatur oleh proxynext-intl, sehingga berfungsi di mana saja di server: Route Handlers, Server Actions, dan edge functions.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 diinternasionalkan 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 kanonis diatur dengan benar untuk setiap locale.
src/app/[locale]/about/layout.tsxSalin kodeSalin kode ke clipboard
Internasionalisasi Sitemap Anda
OpsionalBuat sitemap yang mencakup semua versi lokal dari halaman Anda. Ini membantu mesin pencari menemukan dan mengindeks semua versi bahasa dari konten Anda.
Sitemap yang diinternasionalkan 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 dengan benar semua versi locale dari rute yang dilindungi. Ini memastikan 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 ketika rute Anda berbeda untuk setiap locale.
src/app/robots.tsSalin kodeSalin kode ke clipboard
Mengatur Proxy untuk Routing Locale
OpsionalBuat proxy untuk secara otomatis mendeteksi locale yang dipilih pengguna dan mengarahkan mereka ke URL dengan prefix locale yang sesuai. next-intl menyediakan fungsi proxy yang nyaman yang menangani ini secara otomatis.
Proxy memastikan bahwa pengguna secara otomatis diarahkan ke bahasa pilihan mereka saat mengunjungi situs Anda. Ini juga menyimpan preferensi pengguna untuk kunjungan berikutnya, meningkatkan pengalaman pengguna.
src/proxy.tsSalin kodeSalin kode ke clipboard
Atur Tipe TypeScript untuk Locale
OpsionalMengatur TypeScript akan membantu Anda mendapatkan autocompletion dan keamanan tipe untuk kunci Anda.
Untuk itu, Anda dapat membuat file global.ts di root proyek Anda dan menambahkan kode berikut:
global.tsSalin kodeSalin kode ke clipboard
Kode ini akan menggunakan Module Augmentation untuk menambahkan locales dan messages ke tipe AppConfig dari next-intl.
Otomatiskan Terjemahan Anda Menggunakan Intlayer
OpsionalIntlayer adalah perpustakaan gratis dan open-source yang dirancang untuk membantu proses lokalisasi dalam aplikasi Anda. Sementara next-intl menangani pemuatan dan pengelolaan terjemahan, Intlayer membantu mengotomatisasi alur kerja terjemahan.
Mengelola terjemahan secara manual bisa memakan waktu dan rentan 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 inginkan dalam codebase Anda
Intlayer memungkinkan Anda mendeklarasikan konten di mana pun Anda inginkan dalam codebase menggunakan file.content.{ts|js|json}. Ini akan memungkinkan organisasi konten yang lebih baik, memastikan keterbacaan dan pemeliharaan codebase yang lebih baik.Mengujikan terjemahan yang hilang Intlayer menyediakan fungsi pengujian yang dapat diintegrasikan ke dalam pipeline CI/CD Anda, atau dalam unit test Anda. Pelajari lebih lanjut tentang mengujikan terjemahan Anda.
Otomatisasi terjemahan Anda, Intlayer menyediakan CLI dan ekstensi VSCode untuk mengotomatisasi terjemahan Anda. Ini dapat diintegrasikan ke dalam pipeline CI/CD Anda. Pelajari lebih lanjut tentang mengotomatisasi terjemahan Anda. Anda dapat menggunakan API key Anda sendiri, dan penyedia AI pilihan Anda. Ini juga menyediakan terjemahan yang sadar konteks, lihat mengisi konten.
Menghubungkan konten eksternal Intlayer memungkinkan Anda menghubungkan konten Anda ke sistem manajemen konten (CMS) eksternal. 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 mengedit terjemahan Anda secara visual.
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.