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
- "Tambahkan perintah init"v7.5.930/12/2025
- "Memperbarui komponen LocaleRouter untuk menggunakan konfigurasi rute baru"v7.0.028/10/2025
- "Inisialisasi riwayat"v5.5.1029/6/2025
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 web Vite dan Preact Anda menggunakan Intlayer | Internasionalisasi (i18n)
Daftar Isi
Mengapa Intlayer dibandingkan alternatif?
Dibandingkan dengan solusi utama seperti preact-i18n atau i18next, Intlayer adalah solusi yang hadir dengan pengoptimalan terintegrasi seperti:
Intlayer dioptimalkan untuk bekerja sempurna dengan Preact dengan menawarkan pelingkupan konten tingkat komponen, terjemahan yang lambat dimuat, dan semua fitur yang diperlukan untuk meningkatkan 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 Mengatur Intlayer dalam Aplikasi Vite dan Preact
Lihat Template Aplikasi di GitHub.
Instalasi Dependensi
Instal paket yang diperlukan menggunakan npm:
bashSalin kodeSalin kode ke clipboard
npm install intlayer preact-intlayernpm install vite-intlayer --save-devnpx intlayer initintlayer
Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, deklarasi konten, kompilasi, và perintah CLI.
preact-intlayer
Paket yang mengintegrasikan Intlayer dengan aplikasi Preact. Ini menyediakan context providers dan hooks untuk internasionalisasi Preact.
vite-intlayer
Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan Vite bundler, serta middleware untuk mendeteksi locale yang dipilih pengguna, mengelola cookie, dan menangani pengalihan URL.
Konfigurasi proyek Anda
Buat file konfigurasi untuk mengatur 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, // Locale lain milik Anda ], defaultLocale: Locales.ENGLISH, }, routing: { mode: "prefix-no-default", // Default: prefix semua locale kecuali locale default storage: ["cookie", "header"], // Default: simpan locale di cookie dan deteksi dari header }, }; export default config;Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, mode routing, opsi penyimpanan, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan lainnya. Untuk daftar lengkap parameter yang tersedia, lihat dokumentasi konfigurasi.
Integrasikan Intlayer dalam Konfigurasi Vite Anda
Tambahkan plugin intlayer ke trong konfigurasi Anda.
vite.config.tsSalin kodeSalin kode ke clipboard
import { defineConfig } from "vite"; import preact from "@preact/preset-vite"; import { intlayer } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [preact(), intlayer()], });Plugin Vite
intlayer()digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini juga mendefinisikan variabel lingkungan Intlayer di dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.Deklarasikan Konten Anda
Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:
src/app.content.tsxSalin kodeSalin kode ke clipboard
import { t, type Dictionary } from "intlayer"; import type { ComponentChildren } from "preact"; const appContent = { key: "app", content: { viteLogo: t({ en: "Vite logo", fr: "Logo Vite", es: "Logo Vite", }), preactLogo: t({ en: "Preact logo", fr: "Logo Preact", es: "Logo Preact", }), title: "Vite + Preact", count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es ", }), edit: t<ComponentChildren>({ en: ( <> Edit <code>src/app.tsx</code> and save to test HMR </> ), fr: ( <> Éditez <code>src/app.tsx</code> et enregistrez pour tester HMR </> ), es: ( <> Edita <code>src/app.tsx</code> y guarda para probar HMR </> ), }), readTheDocs: t({ en: "Click on the Vite and Preact logos to learn more", fr: "Cliquez sur les logos Vite et Preact pour en savoir plus", es: "Haga clic en los logotipos de Vite y Preact para obtener más información", }), }, } satisfies Dictionary; export default appContent;Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama sudah dimasukkan ke trong direktori
contentDir(secara default,./src). Dan sesuai dengan ekstensi file deklarasi konten (secara default,.content.{json,ts,tsx,js,jsx,mjs,cjs}).Untuk detail lebih lanjut, lihat dokumentasi deklarasi konten.
Jika file konten Anda menyertakan kode TSX, Anda mungkin perlu mengimpor
import { h } from "preact";hoặc đảm bảo pragma JSX Anda sudah diatur dengan benar untuk Preact.Gunakan Intlayer dalam Kode Anda
Akses kamus konten Anda di seluruh aplikasi:
src/app.tsxSalin kodeSalin kode ke clipboard
import { useState } from "preact/hooks"; import type { FunctionalComponent } from "preact"; import preactLogo from "./assets/preact.svg"; // Mengasumsikan Anda memiliki preact.svg import viteLogo from "/vite.svg"; import "./app.css"; // Mengasumsikan file CSS Anda bernama app.css import { IntlayerProvider, useIntlayer } from "preact-intlayer"; const AppContent: FunctionalComponent = () => { const [count, setCount] = useState(0); const content = useIntlayer("app"); return ( <> <div> <a href="https://vitejs.dev" target="_blank"> <img src={viteLogo} class="logo" alt={content.viteLogo.value} /> </a> <a href="https://preactjs.com" target="_blank"> <img src={preactLogo} class="logo preact" alt={content.preactLogo.value} /> </a> </div> <h1>{content.title}</h1> <div class="card"> <button onClick={() => setCount((count) => count + 1)}> {content.count} {count} </button> <p>{content.edit}</p> </div> {/* Konten Markdown */} <div>{content.myMarkdownContent}</div> {/* Konten HTML */} <div>{content.myHtmlContent}</div> <p class="read-the-docs">{content.readTheDocs}</p> </> ); }; const App: FunctionalComponent = () => ( <IntlayerProvider> <AppContent /> </IntlayerProvider> ); export default App;Jika Anda ingin menggunakan konten Anda dalam atribut
string, sepertialt,title,href,aria-label, dll., Anda harus memanggil nilai fungsi tersebut, 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: Dalam Preact,
classNamebiasanya ditulis sebagaiclass.Untuk mempelajari lebih lanjut tentang hook
useIntlayer, lihat dokumentasi (API-nya serupa untukpreact-intlayer).Jika aplikasi Anda sudah ada, Anda dapat menggunakan Intlayer Compiler secara kombinasi dengan perintah extract untuk mengonversi ribuan komponen dalam satu detik.
Ubah bahasa konten Anda
OpsionalUntuk mengubah bahasa konten Anda, Anda dapat menggunakan fungsi
setLocaleyang disediakan oleh hookuseLocale. Fungsi ini memungkinkan Anda để thiết lập locale ứng dụng và cập nhật nội dung tương ứng.src/components/LocaleSwitcher.tsxSalin kodeSalin kode ke clipboard
import type { FunctionalComponent } from "preact"; import { Locales } from "intlayer"; import { useLocale } from "preact-intlayer"; const LocaleSwitcher: FunctionalComponent = () => { const { setLocale } = useLocale(); return ( <button onClick={() => setLocale(Locales.ENGLISH)}> Ubah Bahasa ke Bahasa Inggris </button> ); }; export default LocaleSwitcher;Để tìm hiểu thêm về hook
useLocale, hãy tham khảo tài liệu (API serupa chopreact-intlayer).Tambahkan Perutean yang Dilokalkan ke aplikasi Anda
OpsionalTujuan dari langkah ini adalah untuk membuat rute unik cho mỗi ngôn ngữ. Điều này hữu ích cho SEO và các URL thân thiện với SEO. Ví dụ:
plaintextSalin kodeSalin kode ke clipboard
- https://example.com/about- https://example.com/es/about- https://example.com/fr/aboutSecara default, rute tidak diberi awalan cho locale mặc định. Nếu bạn muốn thêm tiền tố cho locale mặc định, bạn có thể đặt tùy chọn
routing.modethành"prefix-all"trong cấu hình của mình. Xem tài liệu cấu hình để biết thêm thông tin.Để thêm perutean được bản địa hóa vào ứng dụng của bạn, bạn có thể tạo một thành phần
LocaleRouterbao bọc các tuyến đường của ứng dụng và xử lý định tuyến dựa trên ngôn ngữ. Dưới đây là một ví dụ sử dụng preact-iso:src/components/LocaleRouter.tsxSalin kodeSalin kode ke clipboard
import { localeMap } from "intlayer"; import { IntlayerProvider } from "preact-intlayer"; import { LocationProvider, Router, Route } from "preact-iso"; import type { ComponentChildren, FunctionalComponent } from "preact"; /** * Một thành phần định tuyến thiết lập các tuyến đường cụ thể cho từng ngôn ngữ. * Nó sử dụng preact-iso để quản lý điều hướng và hiển thị các thành phần cục bộ. */ export const LocaleRouter: FunctionalComponent<{ children: ComponentChildren; }> = ({ children }) => ( <LocationProvider> <Router> {localeMap(({ locale, urlPrefix }) => ({ locale, urlPrefix })) .sort((a, b) => b.urlPrefix.length - a.urlPrefix.length) .map(({ locale, urlPrefix }) => ( <Route key={locale} path={`${urlPrefix}/:rest*`} component={() => ( <IntlayerProvider locale={locale}>{children}</IntlayerProvider> )} /> ))} </Router> </LocationProvider> );Sau đó, bạn có thể sử dụng thành phần
LocaleRoutertrong ứng dụng của mình:src/app.tsxSalin kodeSalin kode ke clipboard
import { LocaleRouter } from "./components/LocaleRouter"; import type { FunctionalComponent } from "preact"; // ... Thành phần AppContent của bạn const App: FunctionalComponent = () => ( <LocaleRouter> <AppContent /> </LocaleRouter> ); export default App;Ubah URL saat locale berubah
OpsionalĐể thay đổi URL khi ngôn ngữ thay đổi, bạn có thể sử dụng thuộc tính
onLocaleChangeđược cung cấp bởi hookuseLocale. Đồng thời, bạn có thể sử dụng phương thứcroutetừuseLocationcủapreact-isođể cập nhật đường dẫn URL.src/components/LocaleSwitcher.tsxSalin kodeSalin kode ke clipboard
import { useLocation } from "preact-iso"; import { Locales, getHTMLTextDir, getLocaleName, getLocalizedUrl, } from "intlayer"; import { useLocale } from "preact-intlayer"; import type { FunctionalComponent } from "preact"; const LocaleSwitcher: FunctionalComponent = () => { const { url, route } = useLocation(); const { locale, availableLocales, setLocale } = useLocale({ onLocaleChange: (newLocale) => { // Xây dựng URL với ngôn ngữ đã cập nhật // Ví dụ: /es/about?foo=bar const pathWithLocale = getLocalizedUrl(url, newLocale); // Cập nhật đường dẫn URL route(pathWithLocale, true); // true để thay thế (replace) }, }); return ( <div> <button popovertarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <a href={getLocalizedUrl(url, localeItem)} hreflang={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={(e) => { e.preventDefault(); setLocale(localeItem); // Điều hướng theo lập trình sau khi thiết lập ngôn ngữ sẽ được xử lý bởi onLocaleChange }} key={localeItem} > <span> {/* Locale - ví dụ: FR */} {localeItem} </span> <span> {/* Ngôn ngữ trong chính Locale đó - ví dụ: Français */} {getLocaleName(localeItem, localeItem)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* Ngôn ngữ trong Locale hiện tại - ví dụ: Francés với ngôn ngữ hiện tại được đặt thành Locales.SPANISH */} {getLocaleName(localeItem, locale)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* Ngôn ngữ bằng tiếng Anh - ví dụ: French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </a> ))} </div> </div> ); }; export default LocaleSwitcher;Tham khảo tài liệu:
- Hook
useLocale(API tương tự chopreact-intlayer)> - HookgetLocaleName> - HookgetLocalizedUrl> - HookgetHTMLTextDir> - Thuộc tínhhreflang> - Thuộc tínhlang> - Thuộc tínhdir> - Thuộc tínharia-current> - Popover APIGanti atribut bahasa dan arah HTML
OpsionalKhi ứng dụng của bạn hỗ trợ nhiều ngôn ngữ, việc cập nhật các thuộc tính
langvàdircủa thẻ<html>để khớp với locale hiện tại là rất quan trọng. Làm như vậy đảm bảo:- Khả năng truy cập: Trình đọc màn hình và các công nghệ hỗ trợ dựa trên thuộc tính
langchính xác để phát âm và diễn giải nội dung một cách chính xác. - Hiển thị văn bản: Thuộc tính
dir(hướng) đảm bảo văn bản được hiển thị theo thứ tự thích hợp (ví dụ: từ trái sang phải cho tiếng Anh, từ phải sang trái cho tiếng Ả Rập hoặc tiếng Do Thái), điều này rất cần thiết cho khả năng đọc. - SEO: Mesin pencari menggunakan atribut
languntuk menentukan bahasa halaman Anda, membantu menyajikan konten lokal yang tepat dalam hasil pencarian.
Bằng cách cập nhật các thuộc tính này một cách động khi locale thay đổi, bạn đảm bảo trải nghiệm nhất quán và dễ tiếp cận cho người dùng trên tất cả các ngôn ngữ được hỗ trợ.
Triển khai Hook
Tạo một hook tùy chỉnh để quản lý các thuộc tính HTML. Hook này lắng nghe các thay đổi về ngôn ngữ và cập nhật các thuộc tính cho phù hợp:
src/hooks/useI18nHTMLAttributes.tsxSalin kodeSalin kode ke clipboard
import { useEffect } from "preact/hooks"; import { useLocale } from "preact-intlayer"; import { getHTMLTextDir } from "intlayer"; /** * Cập nhật các thuộc tính `lang` và `dir` của phần tử HTML <html> dựa trên ngôn ngữ hiện tại. * - `lang`: Thông báo cho trình duyệt và công cụ tìm kiếm về ngôn ngữ của trang. * - `dir`: Đảm bảo thứ tự đọc chính xác (ví dụ: 'ltr' cho tiếng Anh, 'rtl' cho tiếng Ả Rập). * * Bản cập nhật động này rất cần thiết để hiển thị văn bản, khả năng truy cập và SEO thích hợp. */ export const useI18nHTMLAttributes = () => { const { locale } = useLocale(); useEffect(() => { // Cập nhật thuộc tính ngôn ngữ thành ngôn ngữ hiện tại. document.documentElement.lang = locale; // Đặt hướng văn bản dựa trên ngôn ngữ hiện tại. document.documentElement.dir = getHTMLTextDir(locale); }, [locale]); };Sử dụng Hook trong ứng dụng của bạn
Tích hợp hook vào thành phần chính của bạn để các thuộc tính HTML cập nhật bất cứ khi nào ngôn ngữ thay đổi:
src/app.tsxSalin kodeSalin kode ke clipboard
import type { FunctionalComponent } from "preact"; import { IntlayerProvider } from "preact-intlayer"; // useIntlayer đã được nhập nếu AppContent cần nó import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes"; import "./app.css"; // Định nghĩa AppContent từ Bước 5 const AppWithHooks: FunctionalComponent = () => { // Áp dụng hook để cập nhật các thuộc tính lang và dir của thẻ <html> dựa trên ngôn ngữ. useI18nHTMLAttributes(); // Giả sử AppContent là thành phần hiển thị nội dung chính của bạn từ Bước 5 return <AppContent />; }; const App: FunctionalComponent = () => ( <IntlayerProvider> <AppWithHooks /> </IntlayerProvider> ); export default App;- Khả năng truy cập: Trình đọc màn hình và các công nghệ hỗ trợ dựa trên thuộc tính
Membuat Komponen Link yang Dilokalkan
OpsionalĐể đảm bảo rằng điều hướng của ứng dụng của bạn tôn trọng ngôn ngữ hiện tại, bạn có thể tạo một thành phần
Linktùy chỉnh. Thành phần này tự động thêm tiền tố ngôn ngữ hiện tại vào các URL nội bộ.Hành vi này hữu ích vì một số lý do:
- SEO và Trải nghiệm người dùng: URL được bản địa hóa giúp công cụ tìm kiếm lập chỉ mục các trang dành riêng cho ngôn ngữ một cách chính xác và cung cấp cho người dùng nội dung bằng ngôn ngữ ưa thích của họ.
- Tính nhất quán: Bằng cách sử dụng một liên kết được bản địa hóa trong toàn bộ ứng dụng của mình, bạn đảm bảo rằng điều hướng vẫn nằm trong ngôn ngữ hiện tại, ngăn chặn các thay đổi ngôn ngữ không mong muốn.
- Khả năng bảo trì: Centralizing logic bản địa hóa trong một component duy nhất giúp đơn giản hóa việc quản lý các URL.
Dưới đây là cách triển khai thành phần
Linkđược bản địa hóa trong Preact:src/components/Link.tsxSalin kodeSalin kode ke clipboard
import { getLocalizedUrl } from "intlayer"; import { useLocale } from "preact-intlayer"; import { forwardRef } from "preact/compat"; import type { JSX } from "preact"; export interface LinkProps extends JSX.HTMLAttributes<HTMLAnchorElement> { href: string; } /** * Hàm tiện ích để kiểm tra xem một URL nhất định có phải là bên ngoài hay không. * Nếu URL bắt đầu bằng http:// hoặc https://, nó được coi là bên ngoài. */ export const checkIsExternalLink = (href?: string): boolean => /^https?:\/\//.test(href ?? ""); /** * Một thành phần Link tùy chỉnh thích ứng với thuộc tính href dựa trên ngôn ngữ hiện tại. * Đối với các liên kết nội bộ, nó sử dụng `getLocalizedUrl` để thêm tiền tố ngôn ngữ vào URL (ví dụ: /fr/about). * Điều này đảm bảo rằng điều hướng vẫn nằm trong cùng một bối cảnh ngôn ngữ. */ export const Link = forwardRef<HTMLAnchorElement, LinkProps>( ({ href, children, ...props }, ref) => { const { locale } = useLocale(); const isExternalLink = checkIsExternalLink(href); // Nếu liên kết là nội bộ và một href hợp lệ được cung cấp, hãy lấy URL được bản địa hóa. const hrefI18n = href && !isExternalLink ? getLocalizedUrl(href, locale) : href; return ( <a href={hrefI18n} ref={ref} {...props}> {children} </a> ); } ); Link.displayName = "Link";Cara Kerjanya
- Mendeteksi Tautan Eksternal:
Fungsi pembantucheckIsExternalLinkmenentukan apakah sebuah URL adalah eksternal. Tautan eksternal dibiarkan tanpa perubahan karena tidak memerlukan lokalisasi. - Mengambil Locale Saat Ini:
HookuseLocalemenyediakan locale saat ini (misalnya,fruntuk bahasa Prancis). - Melokalkan URL:
Untuk tautan internal (yaitu, non-eksternal),getLocalizedUrldigunakan untuk secara otomatis menambahkan prefix locale saat ini ke URL. Ini berarti jika pengguna Anda dalam bahasa Prancis, meneruskan/aboutsebagaihrefakan mengubahnya menjadi/fr/about. - Mengembalikan Tautan:
Komponen mengembalikan elemen<a>dengan URL yang sudah dilokalkan, memastikan navigasi konsisten dengan locale.
Render Markdown dan HTML
OpsionalIntlayer mendukung rendering konten Markdown và HTML dalam Preact.
Bạn có thể tùy chỉnh việc hiển thị nội dung Markdown và HTML bằng cách sử dụng phương thức
.use(). Phương thức này cho phép bạn ghi đè việc hiển thị mặc định của các thẻ cụ thể.tsxSalin kodeSalin kode ke clipboard
import { useIntlayer } from "preact-intlayer";const { myMarkdownContent, myHtmlContent } = useIntlayer("my-component");// ...return ( <div> {/* Rendering dasar */} {myMarkdownContent} {/* Rendering kustom cho Markdown */} {myMarkdownContent.use({ h1: (props) => <h1 style={{ color: "red" }} {...props} />, })} {/* Rendering dasar cho HTML */} {myHtmlContent} {/* Rendering kustom cho HTML */} {myHtmlContent.use({ b: (props) => <strong style={{ color: "blue" }} {...props} />, })} </div>);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 module augmentation để tận dụng lợi ích của TypeScript và làm cho codebase của bạn mạnh mẽ hơn.


Pastikan konfigurasi TypeScript Anda menyertakan tipe yang dihasilkan secara otomatis.
Salin kode ke clipboard
{ // ... Konfigurasi TypeScript Anda yang sudah ada "compilerOptions": { // ... "jsx": "react-jsx", "jsxImportSource": "preact", // Direkomendasikan cho Preact 10+ // ... }, "include": [ // ... Konfigurasi TypeScript Anda yang sudah ada ".intlayer/**/*.ts", // Sertakan tipe yang dihasilkan secara otomatis ],}Pastikantsconfig.jsonAnda diatur cho Preact, terutamajsxvàjsxImportSourcehoặcjsxFactory/jsxFragmentFactorycho các phiên bản Preact cũ hơn nếu không sử dụng mặc định củapreset-vite.
Konfigurasi Git
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda menghindari meng-commit file tersebut ke repository 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 cho các khóa dịch.
- Deteksi kesalahan waktu nyata cho các bản dịch còn thiếu.
- Pratinjau inline dari konten yang diterjemahkan.
- Tindakan cepat để dễ dàng tạo và cập nhật bản dịch.
Để biết thêm chi tiết về cách sử dụng tiện ích mở rộng, hãy tham khảo tài liệu Tiện ích mở rộng Intlayer cho VS Code.
(Opsional) Sitemap dan robots.txt (generate saat build)
Intlayer menyediakan generateSitemap dan getMultilingualUrls untuk memformat sitemap.xml multibahasa dan robots.txt yang siap untuk crawler, lalu menulisnya secara otomatis ke public/. Biasanya skrip Node kecil dijalankan sebelum Vite (misalnya hook npm predev / prebuild).
Sitemap
Generator sitemap Intlayer menghormati konfigurasi locale dan menambahkan metadata untuk crawler.
Sitemap mendukung namespacexhtml:link(hreflang). Alih-alih hanya daftar URL datar, Intlayer menghubungkan semua varian bahasa setiap halaman secara dua arah (mis./about,/fr/about, atau/about?lang=frtergantung mode routing).
Robots.txt
Gunakan getMultilingualUrls agar aturan Disallow mencakup semua varian URL jalur sensitif.
1. Buat generate-seo.mjs di root proyek
Salin kode ke clipboard
import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace( /\/$/, "");const pathList = [ { path: "/", changefreq: "daily", priority: 1.0 }, { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) => urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [ "User-agent: *", "Allow: /", ...disallowedPaths.map((path) => `Disallow: ${path}`), "", `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");Paket intlayer harus terpasang. Setel SITE_URL di lingkungan produksi (misalnya di CI).
Disarankangenerate-seo.mjsuntuk ESM Node. Jika memakaigenerate-seo.js, pastikan"type": "module"dipackage.jsonatau aktifkan ESM lainnya.
2. Jalankan skrip sebelum Vite
Salin kode ke clipboard
{ "scripts": { "dev": "vite", "prebuild": "node generate-seo.mjs", "build": "vite build", "preview": "vite preview" }}Sesuaikan perintah jika memakai pnpm atau yarn. Skrip juga bisa dipanggil dari CI.
Melangkah Lebih Jauh
Để đi xa hơn, bạn có thể triển khai trình soạn thảo trực quan hoặc mengeksternalisasi konten Anda menggunakan CMS.