Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Aktualizacja użycia API useIntlayer w Solid do bezpośredniego dostępu do właściwości"v8.9.04.05.2026
- "Początkowa historia"v8.4.1023.03.2026
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimIf 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
Przetłumacz swoją stronę Vite i Lit za pomocą Intlayer | Internacjonalizacja (i18n)
Spis treści
Czym jest Intlayer?
Intlayer to innowacyjna biblioteka internacjonalizacji (i18n) typu open-source, zaprojektowana w celu uproszczenia obsługi wielojęzyczności w nowoczesnych aplikacjach internetowych.
Dzięki Intlayer możesz:
- Łatwo zarządzać tłumaczeniami za pomocą deklaratywnych słowników na poziomie komponentów.
- Dynamicznie lokalizować metadane, trasy i treści.
- Zapewnić obsługę TypeScript dzięki automatycznie generowanym typom, poprawiając autouzupełnianie i wykrywanie błędów.
- Korzystać z zaawansowanych funkcji, takich jak dynamiczne wykrywanie i przełączanie języka.
Przewodnik krok po kroku dotyczący konfiguracji Intlayer w aplikacji Vite i Lit
Krok 1: Instalacja zależności
Zainstaluj niezbędne pakiety za pomocą npm:
Skopiuj kod do schowka
npm install intlayer lit-intlayernpm install vite-intlayer --save-devnpx intlayer initintlayer
Podstawowy pakiet, który zapewnia narzędzia do internacjonalizacji do zarządzania konfiguracją, tłumaczenia, deklarowania treści, transpilacji i poleceń CLI.
lit-intlayer Pakiet integrujący Intlayer z aplikacjami Lit. Zapewnia hooki oparte na
ReactiveController(useIntlayer,useLocaleitp.), dzięki czemu elementy LitElement automatycznie renderują się ponownie po zmianie języka.vite-intlayer Zawiera wtyczkę Vite do integracji Intlayer z bundlerem Vite, a także middleware do wykrywania preferowanego języka użytkownika, zarządzania plikami cookie i obsługi przekierowań adresów URL.
Krok 2: Konfiguracja Twojego projektu
Utwórz plik konfiguracyjny, aby skonfigurować języki Twojej aplikacji:
Skopiuj kod do schowka
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [
Locales.ENGLISH,
Locales.FRENCH,
Locales.SPANISH,
// Twoje inne języki
],
defaultLocale: Locales.ENGLISH,
},
};
export default config;Za pomocą tego pliku konfiguracyjnego możesz ustawić zlokalizowane adresy URL, przekierowania middleware, nazwy plików cookie, lokalizację i rozszerzenie deklaracji treści, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w dokumentacji konfiguracji.
Krok 3: Zintegruj Intlayer z konfiguracją Vite
Dodaj wtyczkę intlayer do swojej konfiguracji.
Skopiuj kod do schowka
import { defineConfig } from "vite";
import { intlayer } from "vite-intlayer";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [intlayer()],
});Wtyczka Vite intlayer() służy do integracji Intlayer z Vite. Zapewnia budowanie plików deklaracji treści i monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer wewnątrz aplikacji Vite. Dodatkowo zapewnia aliasy w celu optymalizacji wydajności.
Krok 4: Uruchomienie Intlayer w punkcie wejścia
Wywołaj installIntlayer() przed zarejestrowaniem jakichkolwiek niestandardowych elementów, aby globalny singleton języka był gotowy, gdy pierwszy element się połączy.
Skopiuj kod do schowka
import { installIntlayer } from "lit-intlayer";// Musi być wywołane przed podłączeniem dowolnego elementu LitElement do DOM.installIntlayer();// Zaimportuj i zarejestruj swoje niestandardowe elementy.import "./my-element.js";Jeśli używasz również deklaracji treści md() (Markdown), zainstaluj także renderer markdown:
Skopiuj kod do schowka
import { installIntlayer, installIntlayerMarkdown } from "lit-intlayer";installIntlayer();installIntlayerMarkdown();import "./my-element.js";Krok 5: Zadeklaruj swoją treść
Twórz i zarządzaj deklaracjami treści w celu przechowywania tłumaczeń:
Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const appContent = {
key: "app",
content: {
title: "Vite + Lit",
viteLogo: t({
en: "Vite logo",
fr: "Logo Vite",
es: "Logo Vite",
}),
litLogo: t({
en: "Lit logo",
fr: "Logo Lit",
es: "Logo Lit",
}),
count: t({
en: "count is {{count}}",
fr: "le compte est {{count}}",
es: "el recuento es {{count}}",
}),
readTheDocs: t({
en: "Click on the Vite and Lit logos to learn more",
fr: "Cliquez sur les logos Vite et Lit pour en savoir plus",
es: "Haga clic en los logotipos de Vite y Lit para obtener más información",
}),
},
} satisfies Dictionary;
export default appContent;Deklaracje treści mogą być definiowane w dowolnym miejscu aplikacji, o ile są zawarte w katalogu
contentDir(domyślnie./src) i pasują do rozszerzenia pliku deklaracji treści (domyślnie.content.{json,ts,tsx,js,jsx,mjs,cjs}).Więcej szczegółów znajdziesz w dokumentacji deklaracji treści.
Krok 6: Wykorzystaj Intlayer w swoim LitElement
Użyj useIntlayer wewnątrz LitElement. Zwraca proxy ReactiveController, który automatycznie wyzwala ponowne renderowanie przy każdej zmianie aktywnego języka - nie jest wymagana żadna dodatkowa konfiguracja.
Skopiuj kod do schowka
import { LitElement, html } from "lit";import { customElement, property } from "lit/decorators.js";import { useIntlayer } from "lit-intlayer";@customElement("my-element")export class MyElement extends LitElement { @property({ type: Number }) count = 0; // useIntlayer rejestruje się jako ReactiveController. // Element renderuje się ponownie automatycznie po zmianie języka. private content = useIntlayer(this, "app"); override render() { const { content } = this; return html` <h1>${content.title}</h1> <img src="/vite.svg" alt=${content.viteLogo.value} /> <img src="/lit.svg" alt=${content.litLogo.value} /> <button @click=${() => this.count++}> ${content.count({ count: this.count })} </button> <p>${content.readTheDocs}</p> `; }}Gdy potrzebujesz przetłumaczonego ciągu znaków w natywnym atrybucie HTML (np.
alt,aria-label,title), wywołaj.valuena węźle typu liść (leaf node):typescriptKopiuj kodSkopiuj kod do schowka
html`<img alt=${content.viteLogo.value} />`;html`<img alt=${content.viteLogo.toString()} />`;html`<img alt=${String(content.viteLogo)} />`;
(Opcjonalnie) Krok 7: Zmiana języka treści
Aby zmienić język treści, użyj metody setLocale udostępnionej przez kontroler useLocale.
Skopiuj kod do schowka
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { getLocaleName } from "intlayer";import { useLocale } from "lit-intlayer";@customElement("locale-switcher")export class LocaleSwitcher extends LitElement { private locale = useLocale(this); private _onChange(e: Event) { const select = e.target as HTMLSelectElement; this.locale.setLocale(select.value as any); } override render() { return html` <select @change=${this._onChange}> ${this.locale.availableLocales.map( (loc) => html` <option value=${loc} ?selected=${loc === this.locale.locale}> ${getLocaleName(loc)} </option> ` )} </select> `; }}(Opcjonalnie) Krok 8: Renderowanie treści Markdown i HTML
Intlayer obsługuje deklaracje treści md() i html(). W Lit skompilowane wyjście jest wstrzykiwane jako surowy kod HTML za pomocą dyrektywy unsafeHTML.
Wyrenderuj skompilowany kod HTML w swoim elemencie:
Skopiuj kod do schowka
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { unsafeHTML } from "lit/directives/unsafe-html.js";import { useIntlayer } from "lit-intlayer";import { compileMarkdown } from "lit-intlayer/markdown";@customElement("my-element")export class MyElement extends LitElement { private content = useIntlayer(this, "app"); override render() { return html` <div class="edit-note"> ${unsafeHTML(compileMarkdown(String(this.content.editNote)))} </div> `; }}TIP String(content.editNote)wywołujetoString()naIntlayerNode, co zwraca surowy ciąg znaków Markdown. Przekaż go docompileMarkdown, aby uzyskać ciąg znaków HTML, a następnie wyrenderuj go za pomocą dyrektywyunsafeHTMLz biblioteki Lit.
(Opcjonalnie) Krok 9: Dodaj zlokalizowany routing do swojej aplikacji
Aby stworzyć unikalne trasy dla każdego języka (przydatne dla SEO), możesz użyć routera po stronie klienta wraz z pomocnikami Intlayer localeMap / localeFlatMap oraz wtyczką Vite intlayerProxy do wykrywania języka po stronie serwera.
Najpierw dodaj intlayerProxy do konfiguracji Vite:
Pamiętaj, że aby korzystać zintlayerProxyw środowisku produkcyjnym, musisz przenieśćvite-intlayerzdevDependenciesdodependencies.
Skopiuj kod do schowka
import { defineConfig } from "vite";
import { intlayer, intlayerProxy } from "vite-intlayer";
export default defineConfig({
plugins: [intlayer(), intlayerProxy()],
});(Opcjonalnie) Krok 10: Zmiana adresu URL po zmianie języka
Aby zaktualizować adres URL w przeglądarce po zmianie języka, użyj useRewriteURL wraz z przełącznikiem języka:
Skopiuj kod do schowka
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale, useRewriteURL } from "lit-intlayer";@customElement("locale-switcher")export class LocaleSwitcher extends LitElement { private locale = useLocale(this); // Automatycznie przepisuje bieżący adres URL przy zmianie języka. private _rewriteURL = useRewriteURL(this); private _onChange(e: Event) { const select = e.target as HTMLSelectElement; this.locale.setLocale(select.value as any); } override render() { return html` <select @change=${this._onChange}> ${this.locale.availableLocales.map( (loc) => html` <option value=${loc} ?selected=${loc === this.locale.locale}> ${getLocaleName(loc)} </option> ` )} </select> `; }}(Opcjonalnie) Krok 11: Przełączanie atrybutów języka i kierunku HTML
Zaktualizuj atrybuty lang i dir tagu <html>, aby odpowiadały bieżącemu językowi w celu zapewnienia dostępności i SEO.
Skopiuj kod do schowka
import { LitElement, html } from "lit";import { customElement } from "lit/decorators.js";import { getHTMLTextDir } from "intlayer";import { useLocale } from "lit-intlayer";@customElement("my-element")export class MyElement extends LitElement { private locale = useLocale(this, { onLocaleChange: (loc) => { document.documentElement.lang = loc; document.documentElement.dir = getHTMLTextDir(loc); }, }); override render() { return html`<!-- Twoja treść -->`; }}(Opcjonalnie) Krok 12: Wyodrębnij treść swoich komponentów
Jeśli masz istniejącą bazę kodu, transformacja tysięcy plików może być czasochłonna.
Aby ułatwić ten proces, Intlayer proponuje kompilator / ekstraktor do przekształcania komponentów i wyodrębniania treści.
Aby go skonfigurować, możesz dodać sekcję compiler w pliku intlayer.config.ts:
Skopiuj kod do schowka
import { type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { // ... reszta Twojej konfiguracji compiler: { /** * Wskazuje, czy kompilator powinien być włączony. */ enabled: true, /** * Definiuje ścieżkę do plików wyjściowych */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Wskazuje, czy komponenty powinny zostać zapisane po transformacji. * W ten sposób kompilator można uruchomić tylko raz, aby przekształcić aplikację, a następnie można go usunąć. */ saveComponents: false, /** * Prefiks klucza słownika */ dictionaryKeyPrefix: "", },};export default config;(Opcjonalnie) Sitemap i robots.txt (generacja przy buildzie)
Intlayer udostępnia generateSitemap i getMultilingualUrls - narzędzia do formatowania wielojęzycznych plików sitemap.xml i robots.txt dla crawlerów i automatycznego zapisu do public/. Zwykle uruchamia się mały skrypt Node przed Vite (np. hooki npm predev / prebuild).
Sitemap
Generator sitemap uwzględnia locale i dodaje metadane dla crawlerów.
Sitemap obsługuje przestrzeń nazwxhtml:link(hreflang). Zamiast płaskiej listy URL Intlayer tworzy dwukierunkowe powiązania wszystkich wersji językowych strony (np./about,/fr/aboutlub/about?lang=frw zależności od routingu).
Robots.txt
Użyj getMultilingualUrls, by reguły Disallow obejmowały wszystkie zlokalizowane warianty ścieżek.
1. Plik generate-seo.mjs w katalogu głównym
Skopiuj kod do schowka
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.");Pakiet intlayer musi być zainstalowany. W produkcji ustaw SITE_URL w środowisku (np. w CI).
Preferujgenerate-seo.mjsdla ESM w Node. Przygenerate-seo.jsustaw"type": "module"wpackage.jsonlub włącz ESM inaczej.
2. Uruchom skrypt przed Vite
Skopiuj kod do schowka
{ "scripts": { "dev": "vite", "prebuild": "node generate-seo.mjs", "build": "vite build", "preview": "vite preview" }}Dostosuj polecenia dla pnpm lub yarn. Możesz też wywołać skrypt z CI.
Konfiguracja TypeScript
Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.
Skopiuj kod do schowka
{ "compilerOptions": { // ... "experimentalDecorators": true, "useDefineForClassFields": false, }, "include": ["src", ".intlayer/**/*.ts"],}experimentalDecoratorsorazuseDefineForClassFields: falsesą wymagane przez Lit do obsługi dekoratorów.
Konfiguracja Git
Zaleca się ignorowanie plików generowanych przez Intlayer. Pozwala to uniknąć zatwierdzania ich w repozytorium Git.
Aby to zrobić, możesz dodać następujące instrukcje do pliku .gitignore:
Skopiuj kod do schowka
# Ignoruj pliki generowane przez Intlayer.intlayerRozszerzenie VS Code
Aby poprawić wrażenia z programowania z Intlayer, możesz zainstalować oficjalne rozszerzenie Intlayer VS Code.
Zainstaluj z VS Code Marketplace
To rozszerzenie zapewnia:
- Autouzupełnianie dla kluczy tłumaczeń.
- Wykrywanie błędów w czasie rzeczywistym dla brakujących tłumaczeń.
- Podglądy w tekście przetłumaczonej treści.
- Szybkie akcje ułatwiające tworzenie i aktualizowanie tłumaczeń.
Więcej szczegółów na temat korzystania z rozszerzenia znajdziesz w dokumentacji rozszerzenia Intlayer VS Code.
Dowiedz się więcej
Aby dowiedzieć się więcej, możesz zaimplementować edytor wizualny lub wyeksportować treść za pomocą CMS.