Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Riwayat Versi
- "Init history"v9.0.05/6/2026
Konten halaman ini diterjemahkan menggunakan AI.
Lihat versi terakhir dari konten aslinya dalam bahasa InggrisIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Migrasi dari next-intl ke Intlayer
Mengapa bermigrasi dari next-intl ke Intlayer?
Alih-alih memuat file JSON besar ke halaman Anda, muat hanya konten yang diperlukan. Intlayer membantu mengurangi ukuran bundle dan halaman Anda hingga 50%.
Scoping konten aplikasi Anda memfasilitasi pemeliharaan untuk aplikasi berskala besar. Anda dapat menduplikasi atau menghapus folder fitur tunggal tanpa beban mental untuk meninjau seluruh codebase konten Anda. Selain itu, Intlayer fully typed untuk memastikan akurasi konten Anda.
Intlayer juga merupakan solusi dengan pengembangan paling aktif dalam ekosistem i18n — masalah diperbaiki dengan cepat, adapter framework baru diluncurkan secara teratur, dan core API terus disempurnakan berdasarkan feedback produksi dunia nyata.
Co-locating konten mengurangi konteks yang diperlukan oleh Large Language Models (LLMs). Intlayer juga dilengkapi dengan suite alat, seperti CLI untuk menguji terjemahan yang hilang, LSP, MCP, dan agent skills, untuk membuat developer experience (DX) bahkan lebih mulus untuk AI agents.
Gunakan automation untuk menerjemahkan di CI/CD pipeline Anda menggunakan LLM pilihan Anda dengan biaya dari penyedia AI Anda. Intlayer juga menawarkan compiler untuk mengotomatisasi ekstraksi konten, serta web platform untuk membantu menerjemahkan di latar belakang.
Menghubungkan file JSON besar ke komponen dapat menyebabkan masalah performance dan reactivity. Intlayer mengoptimalkan loading konten Anda saat build time.
Lebih dari sekadar solusi i18n, Intlayer menyediakan self-hosted visual editor dan full CMS untuk membantu Anda mengelola konten multibahasa Anda secara real-time, membuat kolaborasi dengan translator, copywriter, dan anggota tim lainnya menjadi seamless. Konten dapat disimpan secara lokal dan/atau remote.
Strategi Migrasi
Pendekatan yang direkomendasikan untuk aplikasi yang sudah ada adalah compat adapter: instal @intlayer/next-intl, yang mengekspos API yang persis sama seperti next-intl tetapi mendelegasikan semua pekerjaan terjemahan ke Intlayer di balik layar.
Anda tetap mempertahankan useTranslations, getTranslations, NextIntlClientProvider dan teman-temannya — satu-satunya perubahan adalah jalur impor. Tidak ada refactoring dari signature pemanggilan, bentuk prop, atau struktur komponen yang diperlukan.
Seiring waktu, Anda dapat secara opsional memigrasikan file individual ke format .content.ts yang lebih kaya dari Intlayer untuk membuka visual editor, CMS, dan scoping konten per-komponen — tetapi langkah tersebut sepenuhnya opsional dan dapat dilakukan secara bertahap.
Daftar Isi
Migrasi Cepat
Langkah-langkah berikut adalah minimum yang diperlukan untuk menjalankan aplikasi next-intl yang sudah ada di Intlayer tanpa perubahan kode sama sekali.
Install Dependencies
Instal paket inti Intlayer dan adapter kompatibilitas
@intlayer/next-intl:bashSalin kodeSalin kode ke clipboard
npx intlayer-cli init --interactiveflag
--interactivebersifat opsional. Gunakanintlayer-cli initjika Anda adalah agen AI.Perintah ini akan mendeteksi lingkungan Anda dan menginstal paket yang diperlukan. Contohnya:
bashSalin kodeSalin kode ke clipboard
npm install intlayer next-intlayer @intlayer/next-intl @intlayer/sync-json-pluginPertahankan
next-intlyang terinstal — masih diperlukan untuk URL routing (createNavigation,createMiddleware,Link,redirect,usePathname,useRouter). Adapter kompatibilitas tidak menggantikan lapisan routing.Konfigurasi Intlayer
Perintah
intlayer initmembuat starterintlayer.config.ts. Perbarui untuk mencocokkan locale yang ada dan arahkan pluginsyncJSONke file pesan Anda:intlayer.config.tsSalin kodeSalin kode ke clipboard
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Tambahkan semua locale yang sudah ada di sini ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // 'icu' cocok dengan sintaks placeholder ICU next-intl: {name}, {count, plural, ...} format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], }; export default config;sourcememetakan locale ke jalur file JSON-nya.locationmemberitahu watcher Intlayer folder mana yang dipantau untuk perubahan. Opsiformat: 'icu'memastikan placeholder ICU seperti{name}dan{count, plural, one {# item} other {# items}}diuraikan dengan benar.Untuk daftar lengkap opsi konfigurasi, lihat dokumentasi konfigurasi.
Tambahkan Plugin Intlayer ke Next.js
Bungkus konfigurasi Next.js yang ada dengan
createNextIntlPlugindari@intlayer/next-intl/plugin. Wrapper ini mengomposisiwithIntlayerdan mendaftarkan aliasnext-intl→@intlayer/next-intluntuk Anda:next.config.tsSalin kodeSalin kode ke clipboard
import type { NextConfig } from "next"; import { createNextIntlPlugin } from "@intlayer/next-intl/plugin"; const withIntlayer = createNextIntlPlugin(); const nextConfig: NextConfig = { /* opsi konfigurasi yang sudah ada */ }; export default withIntlayer(nextConfig);createNextIntlPlugin()membungkuswithIntlayer, secara otomatis mendeteksi Webpack atau Turbopack, mengatur pengawasan konten, kompilasi kamus, dan — secara kritis — menyuntikkan alias modul sehingga panggilanimport … from 'next-intl'yang sudah ada dialihkan secara transparan ke@intlayer/next-intlpada waktu build. Entri routingnext-intl/routingdibiarkan menunjuk ke paket aslinya. Tidak ada perubahan file sumber yang diperlukan.Lebih suka
withIntlayerbiasa darinext-intlayer/server? Ini akan mengkompilasi kamus Anda, tetapi tidak menambahkan aliasnext-intl— Anda kemudian harus mengganti nama impor ke@intlayer/next-intlsecara manual (lihat Langkah 4).Anda tidak lagi memerlukan
getRequestConfigatauloadMessages. Dengannext-intl, Anda harus menulis filesrc/i18n.tsyang memuat bundle pesan JSON pada setiap permintaan melaluigetRequestConfig. Intlayer mengkompilasi semua kamus pada waktu build, jadi tidak ada langkah loading runtime. Anda dapat menghapus file itu sepenuhnya (atau pertahankan hanya bagian routing jika Anda masih menggunakancreateNavigation).
Itu saja untuk migrasi cepat. Aplikasi Anda sekarang berjalan di Intlayer sambil mempertahankan setiap impor dan API next-intl.
Kunci terjemahan yang diketik — otomatis. Setelah Intlayer mengkompilasi kamus Anda,
useTranslationsdangetTranslationsdiketik terhadap konten aktual Anda. Kunci secara otomatis dilengkapi di IDE Anda dan jalur yang tidak valid menyebabkan kesalahan TypeScript pada waktu build — tidak ada setup tambahan yang diperlukan.tsxSalin kodeSalin kode ke clipboard
// Komponen klien — 'about' adalah kunci kamus yang terdaftarconst t = useTranslations("about");t("counter.label"); // ✓ autocompletedt("does.not.exist"); // ✗ kesalahan TypeScript// Komponen serverconst t = await getTranslations("about");t("counter.label"); // ✓ diketik
Migrasi Lengkap
Langkah-langkah di bawah ini bersifat opsional dan dapat dilakukan secara bertahap. Mereka membuka akses ke seluruh fitur Intlayer: visual editor, CMS, typed content files, AI-powered translation, dan banyak lagi.
Explicit import renaming (optional)
OpsionalWrapper
createNextIntlPlugin()sudah menangani aliasingnext-intl→@intlayer/next-intldi level bundler. Jika Anda lebih suka membuat dependensi eksplisit di file sumber Anda (dan menggunakan pluginwithIntlayerbiasa), Anda dapat mengganti nama imports secara manual:Tampilkan semua isi tabelBuka tabel dalam modal untuk melihat semua isi data dengan jelas
Sebelum Sesudah import { useTranslations } from 'next-intl'import { useTranslations } from '@intlayer/next-intl'import { useLocale } from 'next-intl'import { useLocale } from '@intlayer/next-intl'import { NextIntlClientProvider } from 'next-intl'import { NextIntlClientProvider } from '@intlayer/next-intl'import { getTranslations } from 'next-intl/server'import { getTranslations } from '@intlayer/next-intl/server'import { getLocale } from 'next-intl/server'import { getLocale } from '@intlayer/next-intl/server'import { setLocale } from 'next-intl/server'import { setLocale } from '@intlayer/next-intl/server'import { getMessages } from 'next-intl/server'import { getMessages } from '@intlayer/next-intl/server'Selalu pertahankan routing imports dari
next-intlyang asli — compat adapter tidak mengganti URL routing layer:tsSalin kodeSalin kode ke clipboard
// ✅ Selalu pertahankan imports ini dari 'next-intl' yang asliimport { createNavigation } from "next-intl/routing";import { createMiddleware } from "next-intl/server";import { defineRouting } from "next-intl/routing";Alternatifnya, Anda dapat menggunakan
defineRoutingdari@intlayer/next-intl/routingyang secara otomatis menggabungkan konfigurasi locale dariintlayer.config.tsAnda.Enable AI-Powered Translation Automation
OpsionalSetelah Intlayer terhubung, Anda dapat menggunakan CLI-nya untuk mengisi terjemahan yang hilang secara otomatis menggunakan LLM pilihan Anda:
bashSalin kodeSalin kode ke clipboard
# Test for missing translations (add to CI)npx intlayer test# Fill missing translations with AInpx intlayer fillTambahkan
OPENAI_API_KEY(atau kunci provider pilihan Anda) ke file.envAnda, kemudian perluasintlayer.config.tsAnda:intlayer.config.tsSalin kodeSalin kode ke clipboard
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // default // model: "gpt-4o-mini", // default }, }; export default config;Lihat dokumentasi Intlayer CLI untuk semua opsi yang tersedia.
Apa yang dapat Anda hapus setelah migrasi
Setelah @intlayer/next-intl diterapkan, boilerplate next-intl berikut dapat dihapus:
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| File / pattern | Mengapa tidak lagi diperlukan |
|---|---|
src/i18n.ts → getRequestConfig export | Intlayer mengompilasi kamus pada waktu build; tidak ada pemuatan pesan per-request. Pertahankan file hanya jika juga mengekspor createNavigation routing helpers. |
loadMessages() / getMessages() call in layout | NextIntlClientProvider dari @intlayer/next-intl membaca dari output yang dikompilasi; tidak ada props messages yang diperlukan. |
locales/{locale}/*.json imports in layout | Bundle JSON hanya diperlukan jika Anda masih menggunakan plugin syncJSON. Setelah bermigrasi ke file .content.ts Anda dapat menghapus folder JSON. |
Ketika Anda siap untuk melangkah lebih jauh, Intlayer secara otomatis menemukan semua file .content.ts dan .content.json di mana pun dalam codebase Anda (secara default, di mana pun di dalam ./src). Anda dapat menempatkan file about.content.ts tepat di samping about/page.tsx Anda dan Intlayer akan mengambilnya pada waktu build tanpa konfigurasi tambahan — tidak ada imports, tidak ada registrasi, tidak ada file indeks terpusat yang diperlukan. Ini membuat co-locating translations dengan pages dan components menjadi sepenuhnya frictionless.
Konfigurasi TypeScript
Intlayer menggunakan module augmentation untuk memberikan full TypeScript intellisense untuk translation keys Anda. Pastikan tsconfig.json Anda mencakup jenis yang di-generate secara otomatis:
Salin kode ke clipboard
{ // ... Konfigurasi TypeScript yang sudah ada "include": [ // ... Konfigurasi TypeScript yang sudah ada ".intlayer/**/*.ts", // Sertakan jenis yang di-generate secara otomatis ],}Konfigurasi Git
Tambahkan direktori yang dihasilkan Intlayer ke .gitignore Anda:
Salin kode ke clipboard
# Ignore the files generated by Intlayer.intlayerSelanjutnya
- Visual Editor — Kelola terjemahan secara visual di browser Anda: Intlayer Visual Editor
- CMS — Externalize dan kelola konten dari jarak jauh: Intlayer CMS
- VS Code Extension — Dapatkan autocompletion dan deteksi error terjemahan real-time: Intlayer VS Code Extension
- CLI Reference — Daftar lengkap perintah CLI: Intlayer CLI
- Intlayer with Next.js — Panduan setup lengkap untuk Next.js: intlayerwithnextjs_16.md