Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Dokumen ini sudah usang, versi dasar telah diperbarui pada 3 April 2026.
Buka dokumen bahasa InggrisRiwayat Versi
- "Tambahkan perutean lokal berbasis domain melalui konfigurasi routing.domains."v8.5.02/4/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
Domain Kustom
Intlayer mendukung perutean lokal berbasis domain, yang memungkinkan Anda menyajikan lokal tertentu dari nama host khusus. Misalnya, pengunjung dari Tiongkok dapat diarahkan ke intlayer.zh daripada intlayer.org/zh.
Cara Kerjanya
Peta domains di dalam routing mengaitkan setiap lokal dengan nama host. Intlayer menggunakan peta ini di dua tempat:
- Pembuatan URL (
getLocalizedUrl): saat lokal target berada pada domain yang berbeda dari halaman saat ini, URL absolut akan dikembalikan (misalnyahttps://intlayer.zh/about). Saat kedua domain cocok, URL relatif akan dikembalikan (misalnya/fr/about). - Proksi server (Next.js & Vite): permintaan masuk akan dialihkan atau ditulis ulang berdasarkan domain tempat mereka tiba.
Domain eksklusif vs. bersama
Perbedaan utamanya adalah eksklusivitas:
- Domain eksklusif - hanya satu lokal yang memetakan ke nama host tersebut (misalnya
zh → intlayer.zh). Domain itu sendiri bertindak sebagai pengidentifikasi lokal, sehingga tidak ada awalan lokal yang ditambahkan ke jalur.https://intlayer.zh/aboutmenyajikan konten bahasa Mandarin. - Domain bersama - beberapa lokal memetakan ke nama host yang sama (misalnya
endanfrkeduanya memetakan keintlayer.org). Perutean berbasis awalan normal berlaku.intlayer.org/fr/aboutmenyajikan konten bahasa Prancis.
Konfigurasi
Salin kode ke clipboard
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.CHINESE, ], defaultLocale: Locales.ENGLISH, }, routing: { mode: "prefix-no-default", domains: { // Domain bersama - en dan fr menggunakan perutean awalan pada intlayer.org en: "intlayer.org", // Domain eksklusif - zh memiliki nama host sendiri, tidak perlu awalan /zh/ zh: "intlayer.zh", }, },};export default config;Lokal yang tidak tercantum dalam domains terus menggunakan perutean awalan standar tanpa penggantian domain apa pun.
Pembuatan URL
getLocalizedUrl secara otomatis menghasilkan jenis URL yang benar berdasarkan konteks pemanggilan.
Lokal domain yang sama (URL relatif)
Salin kode ke clipboard
// Halaman saat ini: intlayer.org/aboutgetLocalizedUrl("/about", "fr", { currentDomain: "intlayer.org" });// → "/fr/about"getLocalizedUrl("/about", "en", { currentDomain: "intlayer.org" });// → "/about" (lokal default, tanpa awalan)Lokal lintas domain (URL absolut)
Salin kode ke clipboard
// Halaman saat ini: intlayer.org/aboutgetLocalizedUrl("/about", "zh", { currentDomain: "intlayer.org" });// → "https://intlayer.zh/about" (domain eksklusif, tanpa awalan /zh/)Menyajikan dari domain lokal itu sendiri
Salin kode ke clipboard
// Halaman saat ini: intlayer.zh/aboutgetLocalizedUrl("/about", "zh", { currentDomain: "intlayer.zh" });// → "/about" (sudah berada di domain yang benar - URL relatif)getLocalizedUrl("/about", "fr", { currentDomain: "intlayer.zh" });// → "https://intlayer.org/fr/about" (tautan lintas domain kembali ke intlayer.org)Deteksi otomatis domain saat ini
currentDomain bersifat opsional. Jika dihilangkan, getLocalizedUrl menyelesaikannya dalam urutan ini:
- Nama host dari URL input absolut (misalnya
https://intlayer.org/about→intlayer.org). window.location.hostnamedi lingkungan peramban.- Jika keduanya tidak tersedia (SSR tanpa opsi eksplisit), URL relatif akan dikembalikan untuk lokal domain yang sama dan tidak ada URL absolut yang dihasilkan - ini adalah fallback yang aman.
Salin kode ke clipboard
// Peramban - window.location.hostname === 'intlayer.org'getLocalizedUrl("/about", "zh");// → "https://intlayer.zh/about" (dideteksi otomatis dari jendela)// Dari URL absolut - domain terdeteksi secara otomatisgetLocalizedUrl("https://intlayer.org/about", "zh");// → "https://intlayer.zh/about"getMultilingualUrls dengan domain
getMultilingualUrls memanggil getLocalizedUrl untuk setiap lokal, sehingga menghasilkan campuran URL relatif dan absolut tergantung pada domain pemanggil:
Salin kode ke clipboard
// currentDomain: 'intlayer.org'getMultilingualUrls("/about", { currentDomain: "intlayer.org" });// {// en: "/about",// fr: "/fr/about",// es: "/es/about",// zh: "https://intlayer.zh/about",// }URL absolut ini siap digunakan dalam tag <link rel="alternate" hreflang="..."> untuk SEO.
Perilaku Proksi
Next.js
Middleware intlayerProxy menangani perutean domain secara otomatis. Tambahkan ke middleware.ts Anda:
Salin kode ke clipboard
export { intlayerProxy as default } from "next-intlayer/proxy";export const config = { matcher: "/((?!api|static|assets|robots|sitemap|.*\\..*|_next).*)",};Redirect - permintaan tiba di domain yang salah untuk awalan lokal tertentu:
Salin kode ke clipboard
GET intlayer.org/zh/about→ 301 https://intlayer.zh/aboutRewrite - permintaan tiba di domain eksklusif lokal tanpa awalan:
Salin kode ke clipboard
GET intlayer.zh/about→ tulis ulang ke /zh/about (hanya perutean internal Next.js, URL tetap bersih)Vite
Plugin Vite intlayerProxy menerapkan logika yang sama selama pengembangan:
Salin kode ke clipboard
import { defineConfig } from "vite";import { intlayerProxy } from "vite-intlayer";export default defineConfig({ plugins: [intlayerProxy()],});Catatan: dalam pengembangan lokal Anda biasanya menggunakanlocalhost, sehingga pengalihan lintas domain akan mengarah ke domain langsung alih-alih port lokal lainnya. Gunakan penggantian file hosts (misalnya127.0.0.1 intlayer.zh) atau proksi terbalik jika Anda perlu menguji perutean multi-domain secara lokal.
Pemilih Lokal (Locale Switcher)
Hook useLocale dari next-intlayer menangani navigasi sadar domain secara otomatis. Saat pengguna beralih ke lokal di domain yang berbeda, hook melakukan navigasi halaman penuh (window.location.href) alih-alih router push sisi klien, karena router Next.js tidak dapat melintasi asal (origins).
Salin kode ke clipboard
"use client";import { useLocale } from "next-intlayer";export const LocaleSwitcher = () => { const { availableLocales, locale, setLocale } = useLocale(); return ( <ul> {availableLocales.map((l) => ( <li key={l}> <button onClick={() => setLocale(l)} aria-current={l === locale ? "true" : undefined} > {l.toUpperCase()} </button> </li> ))} </ul> );};Tidak diperlukan konfigurasi tambahan - useLocale mendeteksi window.location.hostname secara internal dan memutuskan antara router.replace (domain yang sama) dan window.location.href (lintas domain).
SEO: Tautan Alternatif hreflang
Perutean berbasis domain biasanya digunakan bersama dengan hreflang untuk memberi tahu mesin telusur URL mana yang harus diindeks untuk setiap bahasa. Gunakan getMultilingualUrls untuk menghasilkan set lengkap URL alternatif:
Salin kode ke clipboard
import { getMultilingualUrls } from "intlayer";import type { Metadata } from "next";export const generateMetadata = (): Metadata => { const alternates = getMultilingualUrls("/", { currentDomain: process.env.NEXT_PUBLIC_DOMAIN, // mis. "intlayer.org" }); return { alternates: { languages: alternates, }, };};Ini menghasilkan:
Salin kode ke clipboard
<link rel="alternate" hreflang="en" href="https://intlayer.org/" /><link rel="alternate" hreflang="fr" href="https://intlayer.org/fr/" /><link rel="alternate" hreflang="es" href="https://intlayer.org/es/" /><link rel="alternate" hreflang="zh" href="https://intlayer.zh/" />Utilitas Inti
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| Utilitas | Deskripsi |
|---|---|
getLocalizedUrl(url, locale, { currentDomain }) | Mengembalikan URL relatif atau absolut tergantung pada apakah lokal target berada di domain saat ini. |
getMultilingualUrls(url, { currentDomain }) | Mengembalikan peta URL lokal yang diberi kunci lokal, mencampur relatif dan absolut sesuai kebutuhan. |
getPrefix(locale, { domains }) | Mengembalikan awalan kosong untuk lokal domain eksklusif, awalan normal jika sebaliknya. |