{{ title }}
\n \nZadaj 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 dokumentacja dla Astro + Vue"v8.7.724.04.2026
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimJeśli masz pomysł na ulepszenie tej dokumentacji, zachęcamy do przesłania pull requesta na GitHubie.
Link do dokumentacji na GitHubieKopiuj dokument Markdown do schowka
Przetłumacz swoją witrynę Astro + Vue za pomocą Intlayer | Międzynarodowość (i18n)
Spis treści
Czym jest Intlayer?
Intlayer to innowacyjna biblioteka międzynarodowości (i18n) o otwartym kodzie źródłowym, zaprojektowana w celu uproszczenia obsługi wielojęzyczności w nowoczesnych aplikacjach internetowych.
Dzięki Intlayer możesz:
- Łatwo zarządzać tłumaczeniami: Korzystając z deklaratywnych słowników na poziomie komponentów.
- Dynamicznie lokalizować metadane, trasy i treści.
- Zapewnić obsługę TypeScript: Dzięki automatycznie generowanym typom dla lepszego autouzupełniania i wykrywania błędów.
- Korzystać z zaawansowanych funkcji: Takich jak dynamiczne wykrywanie języka i przełączanie języków.
Przewodnik krok po kroku po konfiguracji Intlayer w Astro + Vue
Sprawdź szablon aplikacji na GitHubie.
Krok 1: Zainstaluj zależności
Zainstaluj niezbędne pakiety za pomocą preferowanego menedżera pakietów:
Skopiuj kod do schowka
npm install intlayer astro-intlayer vue vue-intlayer @astrojs/vuenpx intlayer initintlayer Główny pakiet zapewniający narzędzia i18n do zarządzania konfiguracją, tłumaczeniami, deklaracją treści, transpilacją i poleceniami CLI.
astro-intlayer Wtyczka integracyjna Astro służąca do połączenia Intlayer z bundlerem Vite; zawiera również oprogramowanie pośredniczące (middleware) do wykrywania preferowanego języka użytkownika, zarządzania plikami cookie i obsługi przekierowań URL.
vue Podstawowy pakiet Vue.
vue-intlayer Pakiet do integracji Intlayer z aplikacjami Vue. Zapewnia
installIntlayeroraz composableuseIntlayeriuseLocaledla międzynarodowości w Vue.@astrojs/vue Oficjalna integracja Astro pozwalająca na używanie islandów komponentów Vue.
Krok 2: Skonfiguruj swój projekt
Utwórz plik konfiguracyjny, aby zdefiniować języki swojej aplikacji:
Skopiuj kod do schowka
import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.POLISH, // Twoje inne języki ], defaultLocale: Locales.ENGLISH, },};export default config;Za pośrednictwem tego pliku konfiguracyjnego możesz ustawić zlokalizowane adresy URL, przekierowania oprogramowania pośredniczącego, nazwy plików cookie, lokalizację i rozszerzenia deklaracji treści, wyłączyć dzienniki Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w dokumentacji konfiguracji.
Krok 3: Zintegruj Intlayer ze swoją konfiguracją Astro
Dodaj wtyczkę intlayer do konfiguracji Astro oraz integrację Vue.
Skopiuj kod do schowka
// @ts-checkimport { intlayer } from "astro-intlayer";import vue from "@astrojs/vue";import { defineConfig } from "astro/config";// https://astro.build/configexport default defineConfig({ integrations: [intlayer(), vue()],});Wtyczka integracyjna intlayer() służy do integracji Intlayer z Astro. Zapewnia ona generowanie plików deklaracji treści i monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w aplikacji Astro i udostępnia aliasy w celu optymalizacji wydajności.
Integracjavue()pozwala na używanie islandów komponentów Vue poprzezclient:only="vue".
Krok 4: Zadeklaruj swoją treść
Twórz i zarządzaj swoimi deklaracjami treści, aby przechowywać tłumaczenia:
Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";const appContent = { key: "app", content: { title: t({ en: "Hello World", fr: "Bonjour le monde", es: "Hola mundo", pl: "Witaj świecie", }), },} satisfies Dictionary;export default appContent;Deklaracje treści mogą być definiowane w dowolnym miejscu aplikacji, pod warunkiem, że są zawarte wcontentDir(domyślnie./src) i pasują do rozszerzenia pliku deklaracji treści (domyślnie.content.{json,ts,tsx,js,jsx,mjs,cjs}).
Więcej informacji znajdziesz w dokumentacji deklaracji treści.
Krok 5: Korzystanie z treści w Astro
Możesz konsumować słowniki bezpośrednio w swoich plikach .astro, używając podstawowych pomocników wyeksportowanych z intlayer. Powinieneś również dodać metadane SEO (takie jak linki hreflang i kanoniczne) na każdej stronie oraz wprowadzić island Vue dla interaktywnej treści po stronie klienta.
Skopiuj kod do schowka
---import { getIntlayer, getLocaleFromPath, getLocalizedUrl, getHTMLTextDir, getPrefix, localeMap, defaultLocale, type LocalesValues,} from "intlayer";import VueIsland from "../../components/vue/VueIsland.vue";export const getStaticPaths = () => { return localeMap(({ locale }) => ({ params: { locale: getPrefix(locale).localePrefix }, }));};const locale = getLocaleFromPath(Astro.url.pathname) as LocalesValues;const { title } = 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>{title}</title> <!-- Link kanoniczny: Informuje wyszukiwarki o głównej wersji tej strony --> <link rel="canonical" href={new URL(getLocalizedUrl(Astro.url.pathname, locale), Astro.site)} /> <!-- Hreflang: Informuje Google o wszystkich zlokalizowanych wersjach --> { localeMap(({ locale: mapLocale }) => ( <link rel="alternate" hreflang={mapLocale} href={new URL( getLocalizedUrl(Astro.url.pathname, mapLocale), Astro.site )} /> )) } <!-- x-default: Opcja rezerwowa, gdy język nie pasuje do języka użytkownika --> <link rel="alternate" hreflang="x-default" href={new URL( getLocalizedUrl(Astro.url.pathname, defaultLocale), Astro.site )} /> </head> <body> <!-- Island Vue renderuje całą interaktywną treść, w tym przełącznik języków --> <VueIsland locale={locale} client:only="vue" /> </body></html>Uwaga na temat konfiguracji routingu: Używana przez Ciebie struktura katalogów zależy od ustawienia
middleware.routingwintlayer.config.ts:
prefix-no-default(domyślnie): Zachowuje domyślny język w katalogu głównym (bez prefiksu) i dodaje prefiksy do pozostałych. Użyj[...locale], aby obsłużyć wszystkie przypadki.prefix-all: Wszystkie adresy URL otrzymują prefiks języka. Możesz użyć standardowego[locale], jeśli nie musisz traktować katalogu głównego oddzielnie.search-paramlubno-prefix: Katalogi językowe nie są wymagane. Język jest zarządzany za pomocą parametrów zapytania lub plików cookie.
Krok 6: Utworzenie komponentu Vue Island
Utwórz komponent island, który opakowuje Twoją aplikację Vue i otrzymuje język wykryty przez serwer. Musisz wywołać installIntlayer, aby zarejestrować wtyczkę Intlayer w instancji Vue przed użyciem jakichkolwiek composables.
Skopiuj kod do schowka
<script setup lang="ts">import { ref, getCurrentInstance } from "vue";import { useIntlayer, useLocale, installIntlayer } from "vue-intlayer";import { getLocalizedUrl, getLocaleName, type LocalesValues } from "intlayer";const props = defineProps<{ locale: LocalesValues }>();const app = getCurrentInstance()?.appContext.app;if (app) { installIntlayer(app, { locale: props.locale });}const { locale: currentLocale, availableLocales, setLocale,} = useLocale({ onLocaleChange: (newLocale: LocalesValues) => { window.location.href = getLocalizedUrl(window.location.pathname, newLocale); },});const count = ref(0);const { title } = useIntlayer("app");</script><template> <div> <h1>{{ title }}</h1> <!-- Przełącznik języków renderowany bezpośrednio w szablonie island --> <div class="locale-switcher"> <span class="switcher-label">Zmień język:</span> <div class="locale-buttons"> <button v-for="localeItem in availableLocales" :key="localeItem" :class="['locale-btn', { active: localeItem === currentLocale }]" :disabled="localeItem === currentLocale" @click="setLocale(localeItem)" > <span class="ls-own-name">{{ getLocaleName(localeItem) }}</span> <span class="ls-current-name">{{ getLocaleName(localeItem, currentLocale) }}</span> <span class="ls-code">{{ localeItem.toUpperCase() }}</span> </button> </div> </div> </div></template>Proplocalejest przekazywany ze strony Astro (wykrywanie po stronie serwera) i używany do zainicjowaniainstallIntlayer, ustawiając początkowy język dla wszystkich composables wewnątrz drzewa.
Krok 7: Dodanie przełącznika języków
Funkcjonalność przełączania języków jest zintegrowana bezpośrednio z szablonem island Vue (patrz krok 6 powyżej). Wykorzystuje composable useLocale z vue-intlayer i przechodzi do zlokalizowanego adresu URL, gdy użytkownik wybierze nowy język:
Skopiuj kod do schowka
<script setup lang="ts">import { useLocale } from "vue-intlayer";import { getLocalizedUrl, getLocaleName, type LocalesValues } from "intlayer";// Przejmij tę samą logikę prop/setup app z kroku 6...const { locale: currentLocale, availableLocales, setLocale,} = useLocale({ onLocaleChange: (newLocale: LocalesValues) => { // Przekieruj do zlokalizowanego adresu URL przy zmianie języka window.location.href = getLocalizedUrl(window.location.pathname, newLocale); },});</script><template> <div class="locale-switcher"> <span class="switcher-label">Zmień język:</span> <div class="locale-buttons"> <button v-for="localeItem in availableLocales" :key="localeItem" :class="['locale-btn', { active: localeItem === currentLocale }]" :disabled="localeItem === currentLocale" @click="setLocale(localeItem)" > <span class="ls-own-name">{{ getLocaleName(localeItem) }}</span> <span class="ls-current-name">{{ getLocaleName(localeItem, currentLocale) }}</span> <span class="ls-code">{{ localeItem.toUpperCase() }}</span> </button> </div> </div></template>Uwaga na temat trwałości: Użycie
onLocaleChangedo przekierowania przezwindow.location.hrefzapewnia, że nowy adres URL z prefiksem językowym zostanie odwiedzony. Pozwala to oprogramowaniu pośredniczącemu Intlayer ustawić plik cookie języka i zapamiętać preferencje użytkownika przy przyszłych wizytach.
Krok 8: Sitemap i Robots.txt
Intlayer oferuje narzędzia do dynamicznego generowania zlokalizowanej mapy witryny oraz pliku robots.txt.
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 thexhtml: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.
Utwórz plik src/pages/sitemap.xml.ts, aby wygenerować mapę witryny obejmującą wszystkie Twoje zlokalizowane trasy.
Skopiuj kod do schowka
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
Utwórz plik src/pages/robots.txt.ts, aby kontrolować indeksowanie przez wyszukiwarki.
Skopiuj kod do schowka
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" }, });};Konfiguracja TypeScript
Intlayer wykorzystuje rozszerzenie modułów (module augmentation), aby skorzystać z TypeScript, czyniąc bazę kodu bardziej solidną.


Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.
Skopiuj kod do schowka
{ // ... Twoja istniejąca konfiguracja TypeScript "include": [ // ... Twoja istniejąca konfiguracja TypeScript ".intlayer/**/*.ts", // Uwzględnij automatycznie generowane typy ],}Konfiguracja Git
Zaleca się ignorowanie plików generowanych przez Intlayer. Zapobiega to ich przesyłaniu do repozytorium Git.
Aby to zrobić, dodaj 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 dla VS Code.
Instalacja z VS Code Marketplace
To rozszerzenie zapewnia:
- Autouzupełnianie kluczy tłumaczeń.
- Wykrywanie błędów w czasie rzeczywistym dla brakujących tłumaczeń.
- Podgląd inline przetłumaczonej treści.
- Szybkie akcje do łatwego tworzenia i aktualizowania tłumaczeń.
Więcej informacji na temat korzystania z rozszerzenia znajdziesz w dokumentacji rozszerzenia VS Code.
(Opcjonalnie) Krok 17 : Wyodrębnij zawartość 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, aby przetransformować komponenty i wyodrębnić zawartość.
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ę 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 przetransformować aplikację, a następnie go usunąć.
*/
saveComponents: false,
/**
* Prefiks klucza słownika
*/
dictionaryKeyPrefix: "",
},
};
export default config;Uruchom ekstraktor, aby przetransformować komponenty i wyodrębnić zawartość
Skopiuj kod do schowka
npx intlayer extractPogłębiaj swoją wiedzę
Jeśli chcesz dowiedzieć się więcej, możesz również wdrożyć Edytor Wizualny lub użyć CMS, aby wyeksternalizować swoją treść.