Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Dengan mengintegrasikan Intlayer MCP Server ke AI assistant favorit Anda, Anda dapat mengambil seluruh dokumentasi langsung dari ChatGPT, DeepSeek, Cursor, VSCode, dll.
Lihat dokumentasi MCP ServerRiwayat Versi
- Menambahkan penyebutan `x-default` dalam objek `alternates`v7.0.61/11/2025
- Menambahkan penyebutan fungsi `withIntlayerSync()`v7.0.025/10/2025
- v6.2.09/10/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
Terjemahkan situs web Next.js 15 Anda menggunakan Intlayer | Internasionalisasi (i18n)
Daftar Isi
Apa itu Intlayer?
Intlayer adalah perpustakaan internasionalisasi (i18n) open-source yang inovatif, dirancang untuk menyederhanakan dukungan multibahasa dalam aplikasi web modern. Intlayer terintegrasi dengan mulus dengan framework Next.js 15 terbaru, termasuk App Router yang kuat. Ini dioptimalkan untuk bekerja dengan Server Components agar rendering lebih efisien dan sepenuhnya kompatibel dengan Turbopack.
Dengan Intlayer, Anda dapat:
- Mengelola terjemahan dengan mudah menggunakan kamus deklaratif di tingkat komponen.
- Melokalisasi metadata, rute, dan konten secara dinamis.
- Mengakses terjemahan di komponen sisi klien dan sisi server.
- Memastikan dukungan TypeScript dengan tipe yang dihasilkan secara otomatis, meningkatkan autocompletion dan deteksi kesalahan.
- Manfaatkan fitur canggih, seperti deteksi dan pergantian locale secara dinamis.
Intlayer kompatibel dengan Next.js 12, 13, 14, dan 15. Jika Anda menggunakan Next.js Page Router, Anda dapat merujuk ke panduan ini. Untuk Next.js 12, 13, 14 dengan App Router, lihat panduan ini.
Panduan Langkah demi Langkah untuk Mengatur Intlayer di Aplikasi Next.js
Lihat Application Template di GitHub.
Langkah 1: Instalasi Dependencies
Instal paket yang diperlukan menggunakan npm:
npm install intlayer next-intlayerintlayer
intlayer
Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, deklarasi konten, transpile, dan perintah CLI.
next-intlayer
Paket yang mengintegrasikan Intlayer dengan Next.js. Paket ini menyediakan context provider dan hooks untuk internasionalisasi Next.js. Selain itu, paket ini juga menyertakan plugin Next.js untuk mengintegrasikan Intlayer dengan Webpack atau Turbopack, serta middleware untuk mendeteksi locale yang dipilih pengguna, mengelola cookie, dan menangani pengalihan URL.
Langkah 2: Konfigurasikan Proyek Anda
Buat file konfigurasi untuk mengatur bahasa aplikasi Anda:
Salin kode ke clipboard
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Locale lain milik Anda ], defaultLocale: Locales.ENGLISH, },};export default config;Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan lainnya. Untuk daftar lengkap parameter yang tersedia, lihat dokumentasi konfigurasi.
Langkah 3: Integrasikan Intlayer dalam Konfigurasi Next.js Anda
Konfigurasikan setup Next.js Anda untuk menggunakan Intlayer:
Salin kode ke clipboard
import type { NextConfig } from "next";import { withIntlayer } from "next-intlayer/server";const nextConfig: NextConfig = { /* opsi konfigurasi di sini */};export default withIntlayer(nextConfig);Plugin Next.js withIntlayer() digunakan untuk mengintegrasikan Intlayer dengan Next.js. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini mendefinisikan variabel lingkungan Intlayer dalam lingkungan Webpack atau Turbopack. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa dan memastikan kompatibilitas dengan komponen server.
Fungsi withIntlayer() adalah fungsi promise. Fungsi ini memungkinkan persiapan kamus intlayer sebelum proses build dimulai. Jika Anda ingin menggunakannya bersama plugin lain, Anda dapat menggunakan await. Contoh:
const nextConfig = await withIntlayer(nextConfig);const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);export default nextConfigWithOtherPlugins;Jika Anda ingin menggunakannya secara sinkron, Anda dapat menggunakan fungsi withIntlayerSync(). Contoh:
const nextConfig = withIntlayerSync(nextConfig);const nextConfigWithOtherPlugins = withOtherPlugins(nextConfig);export default nextConfigWithOtherPlugins;
Langkah 4: Definisikan Rute Locale Dinamis
Hapus semua dari RootLayout dan ganti dengan kode berikut:
Salin kode ke clipboard
import type { PropsWithChildren, FC } from "react";import "./globals.css";const RootLayout: FC<PropsWithChildren> = ({ children }) => ( // Anda masih dapat membungkus children dengan provider lain, seperti `next-themes`, `react-query`, `framer-motion`, dll. <>{children}</>);export default RootLayout;Menjaga komponen RootLayout tetap kosong memungkinkan untuk mengatur atribut lang dan dir pada tag <html>.
Untuk mengimplementasikan routing dinamis, sediakan path untuk locale dengan menambahkan layout baru di direktori [locale] Anda:
Salin kode ke clipboard
import type { NextLayoutIntlayer } from "next-intlayer";import { Inter } from "next/font/google";import { getHTMLTextDir } from "intlayer";const inter = Inter({ subsets: ["latin"] });const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => { const { locale } = await params; return ( <html lang={locale} dir={getHTMLTextDir(locale)}> <body className={inter.className}>{children}</body> </html> );};export default LocaleLayout;Segmen path [locale] digunakan untuk menentukan locale. Contoh: /en-US/about akan merujuk ke en-US dan /fr/about ke fr.
Pada tahap ini, Anda akan menemui error: Error: Missing <html> and <body> tags in the root layout.. Ini diharapkan karena file /app/page.tsx tidak lagi digunakan dan dapat dihapus. Sebagai gantinya, segmen path [locale] akan mengaktifkan halaman /app/[locale]/page.tsx. Akibatnya, halaman akan dapat diakses melalui path seperti /en, /fr, /es di browser Anda. Untuk mengatur locale default sebagai halaman root, lihat pengaturan middleware pada langkah 7.
Kemudian, implementasikan fungsi generateStaticParams di Layout aplikasi Anda.
Salin kode ke clipboard
export { generateStaticParams } from "next-intlayer"; // Baris untuk disisipkanconst LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => { /*... Sisa kode*/};export default LocaleLayout;generateStaticParams memastikan bahwa aplikasi Anda membangun terlebih dahulu halaman-halaman yang diperlukan untuk semua locale, mengurangi komputasi saat runtime dan meningkatkan pengalaman pengguna. Untuk detail lebih lanjut, lihat dokumentasi Next.js tentang generateStaticParams.
Intlayer bekerja dengan export const dynamic = 'force-static'; untuk memastikan bahwa halaman-halaman dibangun terlebih dahulu untuk semua locale.
Langkah 5: Deklarasikan Konten Anda
Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:
Salin kode ke clipboard
import { t, type Dictionary } from "intlayer";const pageContent = { key: "page", content: { getStarted: { main: t({ en: "Get started by editing", fr: "Commencez par éditer", es: "Comience por editar", }), pageLink: "src/app/page.tsx", }, },} satisfies Dictionary;export default pageContent;Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama sudah dimasukkan ke dalam direktori contentDir (secara default, ./src). Dan sesuai dengan ekstensi file deklarasi konten (secara default, .content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}).
Untuk detail lebih lanjut, lihat dokumentasi deklarasi konten.
Langkah 6: Memanfaatkan Konten dalam Kode Anda
Akses kamus konten Anda di seluruh aplikasi:
Salin kode ke clipboard
import type { FC } from "react";import { ClientComponentExample } from "@components/ClientComponentExample";import { ServerComponentExample } from "@components/ServerComponentExample";import { type NextPageIntlayer, IntlayerClientProvider } from "next-intlayer";import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";const PageContent: FC = () => { const content = useIntlayer("page"); return ( <> <p>{content.getStarted.main}</p> <code>{content.getStarted.pageLink}</code> </> );};const Page: NextPageIntlayer = async ({ params }) => { const { locale } = await params; return ( <IntlayerServerProvider locale={locale}> <PageContent /> <ServerComponentExample /> <IntlayerClientProvider locale={locale}> <ClientComponentExample /> </IntlayerClientProvider> </IntlayerServerProvider> );};export default Page;- IntlayerClientProvider digunakan untuk menyediakan locale ke komponen sisi klien. Ini dapat ditempatkan di komponen induk mana pun, termasuk layout. Namun, menempatkannya di layout direkomendasikan karena Next.js membagikan kode layout di seluruh halaman, sehingga lebih efisien. Dengan menggunakan IntlayerClientProvider di layout, Anda menghindari inisialisasi ulang untuk setiap halaman, meningkatkan performa dan menjaga konsistensi konteks lokalisasi di seluruh aplikasi Anda.
IntlayerServerProvider digunakan untuk menyediakan locale ke anak server. Ini tidak dapat disetel di layout.
Layout dan halaman tidak dapat berbagi konteks server yang sama karena sistem konteks server didasarkan pada penyimpanan data per permintaan (melalui mekanisme cache React), yang menyebabkan setiap "konteks" dibuat ulang untuk segmen aplikasi yang berbeda. Menempatkan provider di layout bersama akan memecah isolasi ini, sehingga mencegah propagasi nilai konteks server yang benar ke komponen server Anda.
Salin kode ke clipboard
"use client";import type { FC } from "react";import { useIntlayer } from "next-intlayer";export const ClientComponentExample: FC = () => { const content = useIntlayer("client-component-example"); // Membuat deklarasi konten terkait return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> );};Salin kode ke clipboard
import type { FC } from "react";import { useIntlayer } from "next-intlayer/server";export const ServerComponentExample: FC = () => { const content = useIntlayer("server-component-example"); // Membuat deklarasi konten terkait return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> );};Jika Anda ingin menggunakan konten Anda dalam atribut string, seperti alt, title, href, aria-label, dll., Anda harus memanggil nilai fungsi tersebut, seperti:
<img src={content.image.src.value} alt={content.image.value} />
Untuk mempelajari lebih lanjut tentang hook useIntlayer, lihat dokumentasi.
(Opsional) Langkah 7: Konfigurasikan Middleware untuk Deteksi Locale
Siapkan middleware untuk mendeteksi locale yang dipilih pengguna:
Salin kode ke clipboard
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";export const config = { matcher: "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",};src/middleware.tsSalin kodeSalin kode ke clipboard
export { intlayerMiddleware as middleware } from "next-intlayer/middleware";export const config = { matcher: "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",};intlayerMiddleware digunakan untuk mendeteksi locale yang dipilih pengguna dan mengarahkan mereka ke URL yang sesuai seperti yang ditentukan dalam konfigurasi. Selain itu, ini memungkinkan penyimpanan locale pilihan pengguna dalam cookie.
Jika Anda perlu menggabungkan beberapa middleware bersama-sama (misalnya, intlayerMiddleware dengan autentikasi atau middleware kustom), Intlayer sekarang menyediakan helper yang disebut multipleMiddlewares.
import { multipleMiddlewares, intlayerMiddleware,} from "next-intlayer/middleware";import { customMiddleware } from "@utils/customMiddleware";export const middleware = multipleMiddlewares([ intlayerMiddleware, customMiddleware,]);(Opsional) Langkah 8: Internasionalisasi metadata Anda
Jika Anda ingin menginternasionalkan metadata Anda, seperti judul halaman Anda, Anda dapat menggunakan fungsi generateMetadata yang disediakan oleh Next.js. Di dalamnya, Anda dapat mengambil konten dari fungsi getIntlayer untuk menerjemahkan metadata Anda.
Salin kode ke clipboard
import { type Dictionary, t } from "intlayer";import { Metadata } from "next";const metadataContent = { key: "page-metadata", content: { title: t({ en: "Create Next App", fr: "Créer une application Next.js", es: "Crear una aplicación Next.js", id: "Buat Aplikasi Next", }), description: t({ en: "Generated by create next app", fr: "Généré par create next app", es: "Generado por create next app", id: "Dihasilkan oleh create next app", }), },} satisfies Dictionary<Metadata>;export default metadataContent;Salin kode ke clipboard
import { getIntlayer, getMultilingualUrls } from "intlayer";import type { Metadata } from "next";import type { LocalPromiseParams } from "next-intlayer";export const generateMetadata = async ({ params,}: LocalPromiseParams): Promise<Metadata> => { const { locale } = await params; const metadata = getIntlayer("page-metadata", locale); /** * Menghasilkan objek yang berisi semua url untuk setiap locale. * * Contoh: * ```ts * getMultilingualUrls('/about'); * * // Mengembalikan * // { * // en: '/about', * // fr: '/fr/about', * * es: '/es/about', * // } * ``` */ const multilingualUrls = getMultilingualUrls("/"); const localizedUrl = multilingualUrls[locale as keyof typeof multilingualUrls]; return { ...metadata, alternates: { canonical: localizedUrl, languages: { ...multilingualUrls, "x-default": "/" }, }, openGraph: { url: localizedUrl, }, };};// ... Sisa kodePerlu dicatat bahwa fungsi getIntlayer yang diimpor dari next-intlayer mengembalikan konten Anda yang dibungkus dalam IntlayerNode, memungkinkan integrasi dengan editor visual. Sebaliknya, fungsi getIntlayer yang diimpor dari intlayer mengembalikan konten Anda secara langsung tanpa properti tambahan.
Sebagai alternatif, Anda dapat menggunakan fungsi getTranslation untuk mendeklarasikan metadata Anda. Namun, menggunakan file deklarasi konten direkomendasikan untuk mengotomatisasi terjemahan metadata Anda dan mengeksternalisasi konten pada suatu titik.
Salin kode ke clipboard
import { type IConfigLocales, getTranslation, getMultilingualUrls,} from "intlayer";import type { Metadata } from "next";import type { LocalPromiseParams } from "next-intlayer";export const generateMetadata = async ({ params,}: LocalPromiseParams): Promise<Metadata> => { const { locale } = await params; const t = <T>(content: IConfigLocales<T>) => getTranslation(content, locale); return { title: t<string>({ en: "My title", fr: "Mon titre", es: "Mi título", }), description: t({ en: "My description", fr: "Ma description", es: "Mi descripción", }), };};// ... Sisa kodePelajari lebih lanjut tentang optimasi metadata di dokumentasi resmi Next.js.
(Opsional) Langkah 9: Internasionalisasi sitemap.xml dan robots.txt Anda
Untuk menginternasionalisasi sitemap.xml dan robots.txt Anda, Anda dapat menggunakan fungsi getMultilingualUrls yang disediakan oleh Intlayer. Fungsi ini memungkinkan Anda untuk menghasilkan URL multibahasa untuk sitemap Anda.
Salin kode ke clipboard
import { getMultilingualUrls } from "intlayer";import type { MetadataRoute } from "next";const sitemap = (): MetadataRoute.Sitemap => [ { url: "https://example.com", alternates: { languages: { ...getMultilingualUrls("https://example.com"), "x-default": "https://example.com", }, }, }, { url: "https://example.com/login", alternates: { languages: { ...getMultilingualUrls("https://example.com/login"), "x-default": "https://example.com/login", }, }, }, { url: "https://example.com/register", alternates: { languages: { ...getMultilingualUrls("https://example.com/register"), "x-default": "https://example.com/register", }, }, },];export default sitemap;Salin kode ke clipboard
import type { MetadataRoute } from "next";import { getMultilingualUrls } from "intlayer";const getAllMultilingualUrls = (urls: string[]) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);const robots = (): MetadataRoute.Robots => ({ rules: { userAgent: "*", allow: ["/"], disallow: getAllMultilingualUrls(["/login", "/register"]), }, host: "https://example.com", sitemap: `https://example.com/sitemap.xml`,});export default robots;Pelajari lebih lanjut tentang optimasi sitemap di dokumentasi resmi Next.js. Pelajari lebih lanjut tentang optimasi robots.txt di dokumentasi resmi Next.js.
(Opsional) Langkah 10: Ubah bahasa konten Anda
Untuk mengubah bahasa konten Anda di Next.js, cara yang direkomendasikan adalah menggunakan komponen Link untuk mengarahkan pengguna ke halaman yang sesuai dengan lokal yang diinginkan. Komponen Link memungkinkan prefetching halaman, yang membantu menghindari pemuatan ulang halaman secara penuh.
Salin kode ke clipboard
"use client";import type { FC } from "react";import { Locales, getHTMLTextDir, getLocaleName, getLocalizedUrl,} from "intlayer";import { useLocale } from "next-intlayer";import Link from "next/link";export const LocaleSwitcher: FC = () => { const { locale, pathWithoutLocale, availableLocales, setLocale } = useLocale(); return ( <div> <button popoverTarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <Link href={getLocalizedUrl(pathWithoutLocale, localeItem)} key={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={() => setLocale(localeItem)} replace // Akan memastikan tombol "kembali" pada browser akan mengarahkan ke halaman sebelumnya > <span> {/* Lokalisasi - misalnya FR */} {localeItem} </span> <span> {/* Bahasa dalam Lokalisasi sendiri - misalnya Français */} {getLocaleName(localeItem, locale)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* Bahasa dalam Lokalisasi saat ini - misalnya Francés dengan lokalisasi saat ini disetel ke Locales.SPANISH */} {getLocaleName(localeItem)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* Bahasa dalam Bahasa Inggris - misalnya French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </Link> ))} </div> </div> );};Cara alternatif adalah menggunakan fungsi setLocale yang disediakan oleh hook useLocale. Fungsi ini tidak akan memungkinkan prefetching halaman. Lihat dokumentasi useLocale hook untuk detail lebih lanjut.
Anda juga dapat mengatur fungsi pada opsi onLocaleChange untuk memicu fungsi kustom saat locale berubah.
Salin kode ke clipboard
"use client";import { useRouter } from "next/navigation";import { useLocale } from "next-intlayer";import { getLocalizedUrl } from "intlayer";// ... Sisa kodeconst router = useRouter();const { setLocale } = useLocale({ onLocaleChange: (locale) => { router.push(getLocalizedUrl(pathWithoutLocale, locale)); },});return ( <button onClick={() => setLocale(Locales.FRENCH)}> Ganti ke Bahasa Perancis </button>);Referensi dokumentasi:
(Opsional) Langkah 11: Membuat Komponen Link yang Dilokalkan
Untuk memastikan navigasi aplikasi Anda menghormati locale saat ini, Anda dapat membuat komponen Link kustom. Komponen ini secara otomatis menambahkan prefix bahasa saat ini pada URL internal, sehingga. Misalnya, ketika pengguna berbahasa Prancis mengklik tautan ke halaman "About", mereka akan diarahkan ke /fr/about alih-alih /about.
Perilaku ini berguna untuk beberapa alasan:
- SEO dan Pengalaman Pengguna: URL yang dilokalkan membantu mesin pencari mengindeks halaman spesifik bahasa dengan benar dan menyediakan konten kepada pengguna dalam bahasa pilihan mereka.
- Konsistensi: Dengan menggunakan tautan yang dilokalkan di seluruh aplikasi Anda, Anda menjamin navigasi tetap berada dalam locale saat ini, mencegah perubahan bahasa yang tidak diinginkan.
- Maintainability: Memusatkan logika lokalisasi dalam satu komponen menyederhanakan pengelolaan URL, sehingga codebase Anda lebih mudah dipelihara dan dikembangkan seiring pertumbuhan aplikasi Anda.
Berikut adalah implementasi komponen Link yang dilokalisasi dalam TypeScript:
Salin kode ke clipboard
"use client";import { getLocalizedUrl } from "intlayer";import NextLink, { type LinkProps as NextLinkProps } from "next/link";import { useLocale } from "next-intlayer";import type { PropsWithChildren, FC } from "react";/** * Fungsi utilitas untuk memeriksa apakah URL yang diberikan adalah eksternal. * Jika URL dimulai dengan http:// atau https://, maka dianggap eksternal. */export const checkIsExternalLink = (href?: string): boolean => /^https?:\/\//.test(href ?? "");/** * Komponen Link kustom yang menyesuaikan atribut href berdasarkan locale saat ini. * Untuk tautan internal, menggunakan `getLocalizedUrl` untuk menambahkan prefix locale pada URL (misalnya, /fr/about). * Ini memastikan navigasi tetap dalam konteks locale yang sama. */export const Link: FC<PropsWithChildren<NextLinkProps>> = ({ href, children, ...props}) => { const { locale } = useLocale(); const isExternalLink = checkIsExternalLink(href.toString()); // Jika tautan bersifat internal dan href valid diberikan, dapatkan URL yang sudah dilokalkan. const hrefI18n: NextLinkProps["href"] = href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href; return ( <NextLink href={hrefI18n} {...props}> {children} </NextLink> );};Cara Kerjanya
Mendeteksi Tautan Eksternal: Fungsi pembantu checkIsExternalLink menentukan apakah sebuah URL bersifat eksternal. Tautan eksternal dibiarkan tidak berubah karena tidak memerlukan lokalisasi.
Mengambil Locale Saat Ini: Hook useLocale menyediakan locale saat ini (misalnya, fr untuk bahasa Perancis).
Melokalisasi URL: Untuk tautan internal (yaitu, bukan eksternal), getLocalizedUrl digunakan untuk secara otomatis menambahkan prefix locale pada URL. Ini berarti jika pengguna Anda menggunakan bahasa Perancis, memberikan /about sebagai href akan diubah menjadi /fr/about.
Mengembalikan Link: Komponen mengembalikan elemen <a> dengan URL yang sudah dilokalisasi, memastikan navigasi konsisten dengan locale.
Dengan mengintegrasikan komponen Link ini ke seluruh aplikasi Anda, Anda menjaga pengalaman pengguna yang koheren dan sadar bahasa sekaligus mendapatkan manfaat dari peningkatan SEO dan kegunaan.
(Opsional) Langkah 12: Mendapatkan locale saat ini di Server Actions
Jika Anda memerlukan locale aktif di dalam Server Action (misalnya, untuk melokalkan email atau menjalankan logika yang sadar locale), panggil getLocale dari next-intlayer/server:
Salin kode ke clipboard
"use server";import { getLocale } from "next-intlayer/server";export const myServerAction = async () => { const locale = await getLocale(); // Lakukan sesuatu dengan locale};Fungsi getLocale mengikuti strategi cascading untuk menentukan locale pengguna:
- Pertama, memeriksa header permintaan untuk nilai locale yang mungkin telah diatur oleh middleware
- Jika tidak ditemukan locale di header, mencari locale yang disimpan di cookie
- Jika tidak ditemukan cookie, mencoba mendeteksi bahasa yang dipilih pengguna dari pengaturan browser mereka
- Sebagai upaya terakhir, menggunakan locale default yang dikonfigurasi dalam aplikasi
Ini memastikan locale yang paling sesuai dipilih berdasarkan konteks yang tersedia.
(Opsional) Langkah 13: Optimalkan ukuran bundle Anda
Saat menggunakan next-intlayer, kamus disertakan dalam bundle untuk setiap halaman secara default. Untuk mengoptimalkan ukuran bundle, Intlayer menyediakan plugin SWC opsional yang secara cerdas menggantikan panggilan useIntlayer menggunakan makro. Ini memastikan kamus hanya disertakan dalam bundle untuk halaman yang benar-benar menggunakannya.
Untuk mengaktifkan optimasi ini, instal paket @intlayer/swc. Setelah terinstal, next-intlayer akan secara otomatis mendeteksi dan menggunakan plugin tersebut:
npm install @intlayer/swc --save-devCatatan: Optimasi ini hanya tersedia untuk Next.js 13 ke atas.
Catatan: Paket ini tidak diinstal secara default karena plugin SWC masih bersifat eksperimental di Next.js. Hal ini mungkin akan berubah di masa depan.
Catatan: Jika Anda mengatur opsi sebagai importMode: 'dynamic' atau importMode: 'live', maka akan bergantung pada Suspense, sehingga Anda harus membungkus pemanggilan useIntlayer Anda dalam boundary Suspense. Artinya, Anda tidak akan dapat menggunakan useIntlayer secara langsung di tingkat atas komponen Halaman / Layout Anda.
Memantau perubahan kamus pada Turbopack
Saat menggunakan Turbopack sebagai server pengembangan Anda dengan perintah next dev --turbopack, perubahan kamus tidak akan terdeteksi secara otomatis secara default.
Batasan ini terjadi karena Turbopack tidak dapat menjalankan plugin webpack secara paralel untuk memantau perubahan pada file konten Anda. Untuk mengatasinya, Anda perlu menggunakan perintah intlayer watch untuk menjalankan server pengembangan dan pengawas build Intlayer secara bersamaan.
Salin kode ke clipboard
{ // ... Konfigurasi package.json Anda yang sudah ada "scripts": { // ... Konfigurasi skrip Anda yang sudah ada "dev": "intlayer watch --with 'next dev --turbopack'", },}Konfigurasi TypeScript
Intlayer menggunakan module augmentation untuk mendapatkan manfaat dari TypeScript dan membuat codebase Anda lebih kuat.


Pastikan konfigurasi TypeScript Anda menyertakan tipe yang dihasilkan secara otomatis.
Salin kode ke clipboard
{ // ... Konfigurasi TypeScript Anda yang sudah ada "include": [ // ... Konfigurasi TypeScript Anda yang sudah ada ".intlayer/**/*.ts", // Sertakan tipe yang dihasilkan secara otomatis ],}Konfigurasi Git
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari meng-commit file tersebut ke repositori Git Anda.
Untuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file .gitignore Anda:
Salin kode ke clipboard
# Abaikan file yang dihasilkan oleh Intlayer.intlayerEkstensi VS Code
Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal Ekstensi VS Code Intlayer resmi.
Pasang dari VS Code Marketplace
Ekstensi ini menyediakan:
- Autocompletion untuk kunci terjemahan.
- Deteksi kesalahan waktu nyata untuk terjemahan yang hilang.
- Pratinjau inline dari konten yang diterjemahkan.
- Tindakan cepat untuk dengan mudah membuat dan memperbarui terjemahan.
Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat dokumentasi Ekstensi VS Code Intlayer.
Melangkah Lebih Jauh
Untuk melangkah lebih jauh, Anda dapat mengimplementasikan editor visual atau mengeksternalisasi konten Anda menggunakan CMS.