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
Dlaczego Interlayer zamiast alternatyw?
W porównaniu do głównych rozwiązań, takich jak „lit-localize” czy „i18next”, Intlayer jest rozwiązaniem wyposażonym w zintegrowane optymalizacje, takie jak:
Pełne pokrycie światłem
Intlayer jest zoptymalizowany do doskonałej współpracy z Lit, oferując zakres treści na poziomie komponentów sieciowych, obsługę TypeScript i wszystkie funkcje potrzebne do skalowania umiędzynarodowienia (i18n).
Rozmiar bundle'a
Zamiast ładować ogromne pliki JSON na swoje strony, ładuj tylko niezbędną treść. Intlayer pomaga zmniejszyć rozmiary bundle'a i stron nawet o 50%.
Łatwość konserwacji
Określanie zakresu zawartości aplikacji ułatwia konserwację aplikacji na dużą skalę. Możesz powielić lub usunąć pojedynczy folder funkcji bez obciążania psychicznego koniecznością przeglądania całej bazy kodu zawartości. Dodatkowo Inlayer jest w pełni napisany, aby zapewnić dokładność treści.
Agent AI
Wspólna lokalizacja treści zmniejsza potrzebny kontekst dzięki modelom dużego języka (LLM). Intlayer zawiera także zestaw narzędzi, taki jak CLI do sprawdzania brakujących tłumaczeńLSP, MCP i umiejętności agenta, aby praca programisty (DX) była jeszcze płynniejsza dla agentów AI.
Automatyzacja
Korzystaj z automatyzacji, aby tłumaczyć w swoim potoku CI/CD przy użyciu wybranego LLM na koszt dostawcy sztucznej inteligencji. Intlayer oferuje także kompilator do automatyzacji ekstrakcji treści, a także [platformę internetową] (/pl/doc/concept/cms), która pomaga tłumaczyć w tle.
Wydajność
Łączenie ogromnych plików JSON z komponentami może prowadzić do problemów z wydajnością i reaktywnością. Inlayer optymalizuje ładowanie treści w czasie kompilacji.
Skalowanie bez użycia dewelopera
Więcej niż tylko rozwiązanie i18n, Intlayer zapewnia samodzielny edytor wizualny i pełny CMS, który pomoże Ci zarządzać wielojęzyczną treścią w w czasie rzeczywistym, dzięki czemu współpraca z tłumaczami, copywriterami i innymi członkami zespołu będzie płynna. Treść może być przechowywana lokalnie i/lub zdalnie.
Przewodnik krok po kroku dotyczący konfiguracji Intlayer w aplikacji Vite i Lit
Instalacja zależności
Zainstaluj niezbędne pakiety za pomocą npm:
bashKopiuj kodSkopiuj 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.
Konfiguracja Twojego projektu
Utwórz plik konfiguracyjny, aby skonfigurować języki Twojej aplikacji:
intlayer.config.tsKopiuj kodSkopiuj 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.
Zintegruj Intlayer z konfiguracją Vite
Dodaj wtyczkę intlayer do swojej konfiguracji.
vite.config.tsKopiuj kodSkopiuj 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.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.src/main.tsKopiuj kodSkopiuj 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:src/main.tsKopiuj kodSkopiuj kod do schowka
import { installIntlayer, installIntlayerMarkdown } from "lit-intlayer";installIntlayer();installIntlayerMarkdown();import "./my-element.js";Zadeklaruj swoją treść
Twórz i zarządzaj deklaracjami treści w celu przechowywania tłumaczeń:
src/app.content.tsKopiuj kodSkopiuj 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,md,mdx,yaml,yml}).Więcej szczegółów znajdziesz w dokumentacji deklaracji treści.
Wykorzystaj Intlayer w swoim LitElement
Użyj
useIntlayerwewnątrzLitElement. Zwraca proxyReactiveController, który automatycznie wyzwala ponowne renderowanie przy każdej zmianie aktywnego języka - nie jest wymagana żadna dodatkowa konfiguracja.src/my-element.tsKopiuj kodSkopiuj 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)} />`;Zmiana języka treści
OpcjonalneAby zmienić język treści, użyj metody
setLocaleudostępnionej przez kontroleruseLocale.src/locale-switcher.tsKopiuj kodSkopiuj 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> `; }}Renderowanie treści Markdown i HTML
OpcjonalneIntlayer obsługuje deklaracje treści
md()ihtml(). W Lit skompilowane wyjście jest wstrzykiwane jako surowy kod HTML za pomocą dyrektywyunsafeHTML.Wyrenderuj skompilowany kod HTML w swoim elemencie:
src/my-element.tsKopiuj kodSkopiuj 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.Dodaj zlokalizowany routing do swojej aplikacji
OpcjonalneAby stworzyć unikalne trasy dla każdego języka (przydatne dla SEO), możesz użyć routera po stronie klienta wraz z pomocnikami Intlayer
localeMap/localeFlatMaporaz wtyczką ViteintlayerProxydo wykrywania języka po stronie serwera.Najpierw dodaj
intlayerProxydo konfiguracji Vite:Pamiętaj, że aby korzystać z
intlayerProxyw środowisku produkcyjnym, musisz przenieśćvite-intlayerzdevDependenciesdodependencies.vite.config.tsKopiuj kodSkopiuj kod do schowka
import { defineConfig } from "vite"; import { intlayer, intlayerProxy } from "vite-intlayer"; export default defineConfig({ plugins: [intlayer(), intlayerProxy()], });Zmiana adresu URL po zmianie języka
OpcjonalneAby zaktualizować adres URL w przeglądarce po zmianie języka, użyj
useRewriteURLwraz z przełącznikiem języka:src/locale-switcher.tsKopiuj kodSkopiuj 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> `; }}Przełączanie atrybutów języka i kierunku HTML
OpcjonalneZaktualizuj atrybuty
langidirtagu<html>, aby odpowiadały bieżącemu językowi w celu zapewnienia dostępności i SEO.src/my-element.tsKopiuj kodSkopiuj 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ść -->`; }}Wyodrębnij treść swoich komponentów
OpcjonalneJeś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ę
compilerw plikuintlayer.config.ts:intlayer.config.tsKopiuj kodSkopiuj 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.