Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Riwayat Versi
- "Perbarui penggunaan API useIntlayer Solid ke akses properti langsung"v8.9.04/5/2026
- "Dokumentasi awal untuk Astro + Vanilla JS"v8.7.724/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
Terjemahkan Situs Astro + Vanilla JS Anda dengan Intlayer | Internasionalisasi (i18n)
Daftar Isi
Mengapa Intlayer dibandingkan alternatif?
Dibandingkan dengan solusi utama seperti astro-i18n atau i18next, Intlayer adalah solusi yang hadir dengan pengoptimalan terintegrasi seperti:
Intlayer dioptimalkan untuk bekerja sempurna dengan Astro dengan menawarkan perutean multibahasa, peta situs, dan semua fitur yang diperlukan untuk penskalaan internasionalisasi (i18n).
Daripada memuat file JSON berukuran besar ke halaman Anda, muat saja konten yang diperlukan. Intlayer membantu mengurangi ukuran bundle dan halaman Anda hingga 50%.
Mencakup konten aplikasi Anda memfasilitasi pemeliharaan untuk aplikasi berskala besar. Anda dapat menduplikasi atau menghapus satu folder fitur tanpa beban mental untuk meninjau seluruh basis kode konten Anda. Selain itu, Intlayer diketik sepenuhnya untuk memastikan keakuratan konten Anda.
Menempatkan konten bersama mengurangi konteks yang diperlukan dengan Model Bahasa Besar (LLM). Intlayer juga dilengkapi dengan serangkaian alat, seperti CLI untuk menguji terjemahan yang hilang,LSP, MCP, dan agent skill, untuk menjadikan pengalaman pengembang (DX) lebih lancar bagi agen AI.
Gunakan otomatisasi untuk menerjemahkan dalam saluran CI/CD Anda menggunakan LLM pilihan Anda dengan biaya penyedia AI Anda. Intlayer juga menawarkan compiler untuk mengotomatiskan ekstraksi konten, serta platform web untuk membantu menerjemahkan di latar belakang.
Menghubungkan file JSON berukuran besar ke komponen dapat menyebabkan masalah kinerja dan reaktivitas. Intlayer mengoptimalkan pemuatan konten Anda pada waktu pembuatan.
Lebih dari sekedar solusi i18n, Intlayer menyediakan editor visual yang dihosting sendiri dan CMS lengkap untuk membantu Anda mengelola konten multibahasa secara real-time, membuat kolaborasi dengan penerjemah, copywriter, dan anggota tim lainnya menjadi lancar. Konten dapat disimpan secara lokal dan/atau jarak jauh.
Panduan Langkah-demi-Langkah untuk Mengonfigurasi Intlayer di Astro + Vanilla JS
Lihat templat aplikasi di GitHub.
Instal Dependensi
Instal paket yang diperlukan menggunakan manajer paket pilihan Anda:
bashSalin kodeSalin kode ke clipboard
npm install intlayer astro-intlayer vanilla-intlayernpx intlayer initintlayer Paket inti yang menyediakan alat i18n untuk manajemen konfigurasi, terjemahan, deklarasi konten, transpilasi, dan perintah CLI.
astro-intlayer Plugin integrasi Astro untuk menghubungkan Intlayer dengan bundler Vite; juga mencakup middleware untuk mendeteksi bahasa pilihan pengguna, mengelola cookie, dan menangani pengalihan URL.
vanilla-intlayer Paket untuk mengintegrasikan Intlayer ke dalam aplikasi Vanilla JavaScript / TypeScript. Paket ini menyediakan singleton Pub/Sub (
IntlayerClient) dan pembantu berbasis callback (useIntlayer,useLocale, dll.) agar bagian mana pun dari Astro<script>Anda dapat bereaksi terhadap perubahan bahasa tanpa memerlukan framework UI.
Konfigurasikan Proyek Anda
Buat file konfigurasi untuk menentukan bahasa aplikasi Anda:
intlayer.config.tsSalin kodeSalin kode ke clipboard
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.INDONESIAN, // Bahasa Anda yang lain ], 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, menonaktifkan log Intlayer di konsole, dan banyak lagi. Untuk daftar lengkap parameter yang tersedia, lihat dokumentasi konfigurasi.
Integrasikan Intlayer ke dalam konfigurasi Astro Anda
Tambahkan plugin
intlayerke konfigurasi Astro Anda. Tidak diperlukan integrasi framework UI tambahan untuk Vanilla JS.astro.config.tsSalin kodeSalin kode ke clipboard
// @ts-checkimport { intlayer } from "astro-intlayer";import { defineConfig } from "astro/config";// https://astro.build/configexport default defineConfig({ integrations: [intlayer()],});Plugin integrasi
intlayer()digunakan untuk mengintegrasikan Intlayer dengan Astro. Plugin ini memastikan pembuatan file deklarasi konten dan memantaunya dalam mode pengembangan. Plugin ini mendefinisikan variabel lingkungan Intlayer di dalam aplikasi Astro dan menyediakan alias untuk mengoptimalkan kinerja.Deklarasikan Konten Anda
Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:
src/app.content.tsSalin kodeSalin kode ke clipboard
import { t, type Dictionary } from "intlayer";const appContent = { key: "app", content: { greeting: t({ en: "Hello World", fr: "Bonjour le monde", es: "Hola mundo", id: "Halo Dunia", }), description: t({ en: "Welcome to my multilingual Astro site.", fr: "Bienvenue sur mon site Astro multilingue.", es: "Bienvenido a mi sitio Astro multilingüe.", id: "Selamat datang di situs Astro multibahasa saya.", }), switchLocale: t({ en: "Switch language:", fr: "Changer de langue :", es: "Cambiar idioma:", id: "Ganti bahasa:", }), },} satisfies Dictionary;export default appContent;Deklarasi konten dapat didefinisikan di mana saja dalam aplikasi Anda, asalkan disertakan dalam
contentDir(secara default./src) dan cocok dengan ekstensi file deklarasi konten (secara default.content.{json,ts,tsx,js,jsx,mjs,cjs}).Untuk informasi selengkapnya, lihat dokumentasi deklarasi konten.
Menggunakan Konten di Astro
Dengan Vanilla JS, semua server-side rendering (SSR) terjadi langsung di file
.astromenggunakangetIntlayer. Kemudian, di sisi klien, blok<script>menginisialisasi pustakavanilla-intlayeruntuk mengaktifkan peralihan bahasa.src/pages/[...locale]/index.astroSalin kodeSalin kode ke clipboard
---import { getIntlayer, getLocaleFromPath, getLocalizedUrl, getPrefix, getLocaleName, localeMap, locales, defaultLocale, getPathWithoutLocale, type LocalesValues,} from "intlayer";export const getStaticPaths = () => { return localeMap(({ locale }) => ({ params: { locale: getPrefix(locale).localePrefix }, }));};const locale = getLocaleFromPath(Astro.url.pathname) as LocalesValues;const pathWithoutLocale = getPathWithoutLocale(Astro.url.pathname);const { greeting, description, switchLocale } = getIntlayer("app", locale);---<!doctype html><html lang={locale} dir={getHTMLTextDir(locale)}> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <title>{greeting}</title> <!-- Tautan Kanonikal --> <link rel="canonical" href={new URL(getLocalizedUrl(Astro.url.pathname, locale), Astro.site)} /> <!-- Tautan Hreflang --> { localeMap(({ locale: mapLocale }) => ( <link rel="alternate" hreflang={mapLocale} href={new URL( getLocalizedUrl(Astro.url.pathname, mapLocale), Astro.site )} /> )) } <link rel="alternate" hreflang="x-default" href={new URL( getLocalizedUrl(Astro.url.pathname, defaultLocale), Astro.site )} /> </head> <body> <main> <h1 id="greeting">{greeting}</h1> <p id="description">{description}</p> <div class="locale-switcher"> <span class="switcher-label">{switchLocale}</span> <div class="locale-buttons"> { locales.map((localeItem) => ( <a href={localeItem === locale ? undefined : getLocalizedUrl(pathWithoutLocale, localeItem)} class={`locale-btn ${localeItem === locale ? "active" : ""}`} data-locale={localeItem} aria-disabled={localeItem === locale} > {getLocaleName(localeItem)} </a> )) } </div> </div> </main> </body></html>Jika Anda ingin menggunakan konten Anda dalam atribut
string, sepertialt,title,href,aria-label, dll., Anda dapat menggunakan nilai fungsi, seperti:htmlSalin kodeSalin kode ke clipboard
<img src="{content.image.src.value}" alt="{content.image.value}" /><img src="{content.image.src.toString()}" alt="{content.image.toString()}" /><img src="{String(content.image.src)}" alt="{String(content.image)}" />Catatan tentang Penyiapan Perutean: Struktur direktori yang Anda gunakan bergantung pada pengaturan
middleware.routingdiintlayer.config.ts:prefix-no-default(default): Mempertahankan bahasa default di root (tanpa awalan) dan mengawali bahasa lainnya. Gunakan[...locale]untuk menangkap semua kasus.prefix-all: Semua URL mendapatkan awalan bahasa. Anda dapat menggunakan[locale]standar jika tidak perlu menangani root secara terpisah.search-paramatauno-prefix: Direktori bahasa tidak diperlukan. Bahasa dikelola melalui parameter kueri atau cookie.
Menambahkan Pengalih Bahasa
Di Astro dengan Vanilla JS, pengalih bahasa dihasilkan di server sebagai tautan biasa dan diaktifkan di sisi klien melalui blok
<script>. Saat pengguna mengklik tautan bahasa,vanilla-intlayermenyetel cookie bahasa melaluisetLocalesebelum menavigasi ke URL yang dilokalkan.src/pages/[...locale]/index.astroSalin kodeSalin kode ke clipboard
<!-- Sertakan markup sisi server dari Langkah 5 di sini --><script> import { installIntlayer, useLocale } from "vanilla-intlayer"; import { getLocaleFromPath, getLocalizedUrl, type LocalesValues } from "intlayer"; // Inisialisasi Intlayer di klien dengan bahasa yang diambil dari jalur saat ini const locale = getLocaleFromPath(window.location.pathname); installIntlayer({ locale: locale as LocalesValues }); const { setLocale } = useLocale({ onLocaleChange: (newLocale: LocalesValues) => { window.location.href = getLocalizedUrl(window.location.pathname, newLocale); }, }); // Hubungkan peristiwa klik pada tautan pengalih bahasa const localeLinks = document.querySelectorAll("[data-locale]"); localeLinks.forEach((link) => { link.addEventListener("click", (e) => { const localeValue = link.getAttribute("data-locale") as LocalesValues; if (localeValue && localeValue !== locale) { e.preventDefault(); setLocale(localeValue); } }); });</script>Catatan tentang Persistensi:
installIntlayermenginisialisasi singleton Intlayer dengan bahasa yang ditentukan server.useLocalebersama denganonLocaleChangememastikan bahwa cookie bahasa disetel sebelum pengalihan melalui middleware, memungkinkan preferensi bahasa pengguna diingat untuk kunjungan mendatang.Catatan tentang Progressive Enhancement: Tautan di dalam pengalih bahasa akan berfungsi sebagai tag
<a>standar bahkan tanpa JavaScript. Saat JavaScript tersedia, panggilansetLocalememperbarui cookie sebelum mengarahkan ulang, memastikan middleware menangani pilihan bahasa dengan benar.Sitemap dan Robots.txt
Intlayer menawarkan utilitas untuk secara dinamis membuat peta situs yang dilokalkan dan file robots.txt Anda.
Sitemap
Intlayer comes with a built-in sitemap generator to help you create a sitemap for your application easily. It handles localized routes and adds the necessary metadata for search engines.
The Intlayer generated sitemap supports the
xhtml:linknamespace (Hreflang XML Extensions). Unlike the default sitemap generators that only list raw URLs, Intlayer automatically creates the required bidirectional links between all language versions of a page (e.g.,/about,/about?lang=fr, and/about?lang=es). This ensures search engines correctly index and serve the right language version to the right audience.Buat
src/pages/sitemap.xml.tsuntuk menghasilkan peta situs yang mencakup semua rute yang dilokalkan.src/pages/sitemap.xml.tsSalin kodeSalin kode ke clipboard
import type { APIRoute } from "astro";import { generateSitemap, type SitemapUrlEntry } from "intlayer";const pathList: SitemapUrlEntry[] = [ { path: "/", changefreq: "daily", priority: 1.0 }, { path: "/about", changefreq: "monthly", priority: 0.7 },];const SITE_URL = import.meta.env.SITE ?? "http://localhost:4321";export const GET: APIRoute = async ({ site }) => { const xmlOutput = generateSitemap(pathList, { siteUrl: SITE_URL }); return new Response(xmlOutput, { headers: { "Content-Type": "application/xml" }, });};Robots.txt
Buat
src/pages/robots.txt.tsuntuk mengontrol perayapan mesin pencari.src/pages/robots.txt.tsSalin kodeSalin kode ke clipboard
import type { APIRoute } from "astro";import { getMultilingualUrls } from "intlayer";const getAllMultilingualUrls = (urls: string[]) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)) as string[]);const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);export const GET: APIRoute = ({ site }) => { const robotsTxt = [ "User-agent: *", "Allow: /", ...disallowedPaths.map((path) => `Disallow: ${path}`), "", `Sitemap: ${new URL("/sitemap.xml", site).href}`, ].join("\n"); return new Response(robotsTxt, { headers: { "Content-Type": "text/plain" }, });};Ekstrak konten komponen Anda
OpsionalJika Anda memiliki basis kode yang ada, mengubah ribuan file bisa memakan waktu lama.
Untuk memudahkan proses ini, Intlayer mengusulkan compiler / extractor untuk mengubah komponen Anda dan mengekstrak kontennya.
Untuk mengaturnya, Anda dapat menambahkan bagian
compilerdi fileintlayer.config.tsAnda:intlayer.config.tsSalin kodeSalin kode ke clipboard
import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... Sisa konfigurasi Anda compiler: { /** * Menunjukkan apakah compiler harus diaktifkan. */ enabled: true, /** * Menentukan jalur file output */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Menunjukkan apakah komponen harus disimpan setelah diubah. Dengan begitu, compiler dapat dijalankan satu kali saja untuk mengubah aplikasi, lalu dapat dihapus. */ saveComponents: false, /** * Prefiks kunci kamus */ dictionaryKeyPrefix: "", }, }; export default config;Jalankan extractor untuk mengubah komponen Anda dan mengekstrak kontennya
bashSalin kodeSalin kode ke clipboard
npx intlayer extract
Konfigurasi TypeScript
Intlayer menggunakan augmentasi modul (module augmentation) untuk memanfaatkan TypeScript, membuat basis kode Anda lebih kuat.


Pastikan konfigurasi TypeScript Anda menyertakan tipe yang dibuat secara otomatis.
Salin kode ke clipboard
{ // ... konfigurasi TypeScript Anda yang sudah ada "include": [ // ... konfigurasi TypeScript Anda yang sudah ada ".intlayer/**/*.ts", // Sertakan tipe yang dibuat secara otomatis ],}Konfigurasi Git
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini mencegah file tersebut di-commit ke repositori Git Anda.
Untuk melakukannya, tambahkan 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 resmi Intlayer untuk VS Code.
Instalasi dari VS Code Marketplace
Ekstensi ini menyediakan:
- Autocompletion untuk kunci terjemahan.
- Deteksi kesalahan waktu nyata untuk terjemahan yang hilang.
- Pratinjau inline untuk konten yang diterjemahkan.
- Tindakan cepat untuk membuat dan memperbarui terjemahan dengan mudah.
Untuk informasi selengkapnya tentang cara menggunakan ekstensi, lihat dokumentasi ekstensi VS Code.
Perdalam Pengetahuan Anda
Jika Anda ingin mempelajari lebih lanjut, Anda juga dapat menerapkan Editor Visual atau menggunakan CMS untuk mengeksternalisasi konten Anda.