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 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 Vite dan Preact 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.
Dengan Intlayer, Anda dapat:
- Mengelola terjemahan dengan mudah menggunakan kamus deklaratif di tingkat komponen.
- Melokalkan metadata, rute, dan konten secara dinamis.
- Menjamin dukungan TypeScript dengan tipe yang dihasilkan secara otomatis, meningkatkan autocompletion và deteksi kesalahan.
- Memanfaatkan fitur canggih, seperti deteksi dan pergantian locale secara dinamis.
Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi Vite dan Preact
Lihat Template Aplikasi di GitHub.
Langkah 1: Instalasi Dependensi
Instal paket yang diperlukan menggunakan npm:
Salin 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.
Langkah 2: Konfigurasi 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,
},
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.
Langkah 3: Integrasikan Intlayer dalam Konfigurasi Vite Anda
Tambahkan plugin intlayer ke trong konfigurasi Anda.
Salin 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.
Langkah 4: Deklarasikan Konten Anda
Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:
Salin 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 direktoricontentDir(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.
Langkah 5: Gunakan Intlayer dalam Kode Anda
Akses kamus konten Anda di seluruh aplikasi:
Salin 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 atributstring, 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 hookuseIntlayer, 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.
(Opsional) Langkah 6: Ubah bahasa konten Anda
Untuk mengubah bahasa konten Anda, Anda dapat menggunakan fungsi setLocale yang disediakan oleh hook useLocale. Fungsi ini memungkinkan Anda để thiết lập locale ứng dụng và cập nhật nội dung tương ứng.
Salin 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ề hookuseLocale, hãy tham khảo tài liệu (API serupa chopreact-intlayer).
(Opsional) Langkah 7: Tambahkan Perutean yang Dilokalkan ke aplikasi Anda
Tujuan 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ụ:
Salin 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ọnrouting.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 LocaleRouter bao 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:
Salin 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 LocaleRouter trong ứng dụng của mình:
Salin 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;(Opsional) Langkah 8: Ubah URL saat locale berubah
Để 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 hook useLocale. Đồng thời, bạn có thể sử dụng phương thức route từ useLocation của preact-iso để cập nhật đường dẫn URL.
Salin 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:
- HookuseLocale(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 API
(Opsional) Langkah 9: Ganti atribut bahasa dan arah HTML
Khi ứ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 lang và dir củ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:
Salin 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:
Salin 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;(Opsional) Langkah 10: Membuat Komponen Link yang Dilokalkan
Để đả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 Link tù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:
Salin 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.
(Opsional) Langkah 11: Render Markdown dan HTML
Intlayer 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ể.
Salin 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>);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) Langkah 1 : Ekstrak konten komponen Anda
Jika 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 compiler di file intlayer.config.ts Anda:
Salin 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
Salin kode ke clipboard
npx intlayer extract(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.