Internationalisierung
Xingluo wird mit zweisprachiger UI-Unterstützung (zh-CN / en) ausgeliefert und verwendet die Routing-Strategie prefixDefaultLocale: false, sodass die Standardsprache kein URL-Präfix hat.
Routing-Strategie
Astros i18n-Konfiguration (siehe astro.config.ts):
tsi18n: { locales: ["zh-cn", "en"], defaultLocale: "zh-cn", routing: { prefixDefaultLocale: false }, }
Wichtig: prefixDefaultLocale: false generiert keine lokalisierten Seitenkopien automatisch — Sie müssen [locale]/-Spiegel-Routen manuell pflegen.
Xingluos Ansatz:
- Root-Seiten = Standardsprache (
zh-cn), kein URL-Präfix, z. B./posts/welcome/ src/pages/[locale]/spiegelt alle Seiten;getStaticPathsverwendetgetLocaleParams(), um nur nicht-standard-Sprachen zu generieren, z. B./en/posts/welcome/- Spiegel-Seiten sind ebenfalls dünne Wrapper und verwenden dieselbe View-Komponente für die Rendering-Logik
/ → startseite (zh-cn) /en/ → startseite (en) /posts/welcome/ → beitrag (zh-cn) /en/posts/welcome/ → beitrag (en)
Sprachauflösung
View-Komponenten verwenden Astro.currentLocale zur automatischen Auflösung:
- Root-Seiten →
zh-cn [locale]-Segment-Seiten →en(oder andere nicht-standard-Sprachen)
Auf der Komponentenebene sind keine Pfadprüfungen erforderlich; useTranslations(locale) ruft die entsprechenden Zeichenfolgen direkt ab.
i18n-Modulstruktur
| Datei | Verantwortung |
|---|---|
index.ts | import.meta.glob("./lang/*.ts", {eager:true}) lädt Sprachen; exportiert DEFAULT_LOCALE, LOCALES, useTranslations(locale), tplStr |
types.ts | Vollständiges UIStrings-Interface (alle zu lokalisierenden Zeichenfolgen) |
routing.ts | getLocalePrefix, withLocale(path, locale), parseLocaleFromPath(pathname) |
staticPaths.ts | NON_DEFAULT_LOCALES, getLocaleParams() |
format.ts | tplStr(template, vars) — {{key}}-Platzhalterersetzung |
lang/zh-cn.ts | Vereinfachtes Chinesisch (Standard) |
lang/en.ts | Englisch |
UIStrings-Struktur
Das UIStrings-Interface definiert alle zu lokalisierenden UI-Zeichenfolgen, gruppiert in Kategorien:
nav: Navigation (Startseite/Beiträge/Tags/Über/Archive/Suche/RSS)post: Beitrag (Datum, Teilen, Tags, Zurück, Bearbeiten, Inhaltsverzeichnis, Code kopieren, Bild-Lightbox, usw.)pagination: Seitennummerierunghome: Startseite (soziale Links, Hervorgehoben, Neueste)archives: Archive (Anzahl, Monate)footer: Fußzeile (Copyright)pages: Seitentitel und -beschreibungena11y: Barrierefreiheits-LabelslanguageSwitcher: SprachumschalternotFound: 404comments: Kommentarbereich
Vorlagenzeichenfolgen
Zeichenfolgen mit Platzhaltern verwenden {{key}}, ersetzt über tplStr:
tsimport { tplStr } from "@/i18n"; // archives.postCount = "{{count}} Beiträge" tplStr(t.archives.postCount, { count: 5 }); // "5 Beiträge"
SEO-Mehrsprachigkeitsdeklarationen
Der <head> von Layout.astro gibt aus:
<link rel="alternate" hreflang="..." href="...">für jede Sprachex-defaultverweist auf die Standardsprache- Die Sitemap-Integration ermöglicht der i18n-Konfiguration die automatische Generierung von hreflang
- Nicht-standard-Sprachbeiträge haben canonical, das auf das Original in der Standardsprache verweist (um Duplicate-Content-Strafen zu vermeiden; siehe SEO)
Sprache hinzufügen
Beispiel: Hinzufügen von Japanisch ja:
astro.config.ts: fügen Sie"ja"zui18n.localesund die Zuordnung"ja": "ja-JP"zur Sitemapi18n.localeshinzusrc/i18n/lang/: erstellen Sieja.ts, das ein vollständigesUIStringsexportiert (en.tskopieren und übersetzen)src/i18n/staticPaths.ts:NON_DEFAULT_LOCALESenthält automatischja(berechnet ausLOCALES)src/pages/[locale]/: Spiegel-Seiten generieren automatisch dieja-Version (getLocaleParamsdeckt dies ab)- Language switcher: fügen Sie
"ja": "日本語"zulanguageSwitcher.namesinzh-cn.tsunden.tshinzu
Übersetzung auf Inhaltsebene
Xingluo unterstützt mehrsprachige Beitragsinhalte über die Frontmatter-Felder locale und translationKey.
Grundlegende Verwendung
- Beitrag in Standardsprache: ablegen unter
src/content/posts/<slug>.md,translationKeyals Gruppenkennung setzen:
yaml# src/content/posts/welcome.md --- title: "欢迎来到星罗" locale: zh-cn translationKey: welcome-to-xingluo tags: [公告, Astro] ---
- Übersetzung: ablegen in einem Sprachunterverzeichnis
src/content/posts/<locale>/<slug>.md, mit demselbentranslationKey:
yaml# src/content/posts/en/welcome.md --- title: "Welcome to Xingluo" locale: en translationKey: welcome-to-xingluo tags: [announcement, Astro] ---
Verzeichnisstruktur
src/content/posts/ ├── welcome.md # Standardsprache (zh-cn) ├── en/ │ └── welcome.md # Englische Übersetzung ├── ja/ │ └── welcome.md # Japanische Übersetzung └── another-post.md # Eigenständiger Beitrag (kein translationKey)
- Namen der Sprachunterverzeichnisse müssen mit den Sprachcodes in
astro.config.ts’si18n.localesübereinstimmen - Sprachunterverzeichnisse werden aus dem URL-Slug herausgefiltert (z. B.
/posts/welcome/, nicht/posts/en/welcome/) - Beiträge ohne
translationKeysind eigenständig und nicht sprachübergreifend verknüpft
Routing-Verhalten
| Szenario | Verhalten |
|---|---|
Standardsprache-Zugriff auf einen zh-cn Beitrag | Rendert das Standardsprachen-Original |
| Nicht-Standardsprache mit Übersetzung | Rendert die entsprechende Übersetzung |
| Nicht-Standardsprache ohne Übersetzung | Fällt auf das Standardsprachen-Original zurück (identischer Inhalt, canonical schützt SEO) |
Listendeduplizierung
Listenseiten (Startseite, Beitragsliste, Tags, Archiv, RSS) verwenden getPostsForLocale, um repräsentative Beiträge pro Sprache auszuwählen: jede Übersetzungsgruppe zeigt nur eine Karte in der Zielsprache, um doppelte Einträge für dasselbe Thema zu vermeiden.
canonical & SEO
- Hat eine unabhängige Übersetzung: canonical zeigt auf die eigene URL der Übersetzung, von Suchmaschinen separat indizierbar
- Keine Übersetzung (Fallback): canonical zeigt auf das Standardsprachen-Original, um Duplicate-Content-Strafen zu vermeiden
- hreflang-Deklarationen decken alle Sprachen ab und teilen Suchmaschinen die Beziehungen zwischen den Sprachversionen mit
Siehe SEO.
Verwandte Beiträge
Bereitstellung
2 Min. LesezeitBereitstellungsleitfaden für Xingluo mit statischen Hosting-Plattformen (Netlify/Vercel/GitHub Pages), Nginx-Self-Hosting, Docker und Umgebungsvariablen.
Suche
1 Min. LesezeitSuchleitfaden für Xingluo mit Flexsearch-Volltextsuche-Integration, Indexgenerierung, UI, mehrsprachiger Suche und Leistung.