Seiten
Inhalt
API-Referenz
`i18n.init()`
Wird vom Service-Loader automatisch aufgerufen. Nicht manuell nötig.
- Wrapped
router.register()— alle nachfolgenden Routen-Registrierungen erhalten/:lang/-Varianten - Lädt Übersetzungsdateien aus
i18n.paths.translations - Registriert den
http:response:before-Listener (FOUC-Script, optional SEO-Tags) - Emittiert
i18n:init→i18n:ready
`i18n.lang(req)`
Gibt die aktive Sprache für einen Request zurück. Immer gesetzt.
| import i18n from '@xpulse/i18n'; |
| const lang = i18n.lang(req); // → 'de' | 'en' |
Priorität:
req.lang— gesetzt vom Routen-Middleware (URL-Prefix/en/...)Accept-Language-Header — erste unterstützte Sprachei18n.defaultausxpulse.json
`i18n.t(key, lang, vars?)`
Gibt den übersetzten String zurück.
| i18n.t('tagline', 'en') |
| // → 'Private Tools. No Server. No Compromises.' |
| i18n.t('status.days', 'de', { n: 3, s: 'e' }) |
| // → 'noch 3 Tage verfügbar' |
| i18n.t('unknown.key', 'de') |
| // → 'unknown.key' (Key-Fallback) |
Fallback-Reihenfolge:
- Eintrag in der angeforderten Sprache
- Eintrag in der Default-Sprache (
i18n.default) - Der Key selbst als String
Interpolation: Variablen im Translations-String werden als {key} geschrieben und über vars befüllt:
| { "status.days": "noch {n} Tag{s} verfügbar" } |
| i18n.t('status.days', 'de', { n: 3, s: 'e' }) // → 'noch 3 Tage verfügbar' |
| i18n.t('status.days', 'de', { n: 1, s: '' }) // → 'noch 1 Tag verfügbar' |
Typischer Einsatz im Route-Handler:
| import i18n from '@xpulse/i18n'; |
| const lang = i18n.lang(req); |
| const tagline = i18n.t('tagline', lang); |
| const status = i18n.t('status.days', lang, { n: 3, s: 'e' }); |
Template-Methoden
Stehen zur Verfügung wenn @xpulse/template installiert ist.
`{% langSwitcher(path) %}`
Rendert einen Sprachumschalter mit Links zur /:lang/-Variante der aktuellen Seite.
Setzt localStorage.xpulse_lang beim Klick.
| {% langSwitcher(_route.path) %} |
Parameter: aktueller Pfad als String — _route.path ist in jedem Template verfügbar.
`{% htmlLang(route) %}`
Gibt den aktiven Sprachcode zurück — für <html lang="...">.
| <html lang="{% htmlLang(_route) %}"> |
Parameter: _route-Objekt oder Pfad-String.
`{% t(key, route, vars?) %}`
Gibt den übersetzten String zurück — direkt im Template nutzbar.
| {% t('tagline', _route) %} |
| {% t('status.days', _route, {n: 3, s: 'e'}) %} |
| {% t('cta', 'en') %} |
Der zweite Parameter akzeptiert:
_routeoder Pfad-String — Sprache wird aus dem Pfad abgeleitet- expliziter Sprachcode
'de'/'en'
Fällt der Key nicht gefunden → Key-String als Fallback (kein leeres Element).
Events
| Event | Zeitpunkt |
|---|---|
i18n:init |
Init beginnt, router.register() wird gewrapped |
i18n:ready |
Locale-Dateien geladen, bereit |
xpulse.json Optionen
| Key | Default | Beschreibung |
|---|---|---|
i18n.supported |
["de", "en"] |
Unterstützte Sprachen |
i18n.default |
"de" |
Default-Sprache (keine URL-Prefix-Route) |
i18n.use-seo |
false |
<link rel="canonical"> + <link rel="alternate" hreflang> in <head> injizieren |
i18n.exclude |
["/_theme/*", ...] |
Pfade ohne /:lang/-Variante |
i18n.paths.translations |
"src/translations/" |
Pfad zu den Locale-Dateien |
app.url |
"" |
Basis-URL für absolute SEO-Links, z.B. "https://xpulse.one" — bei leerem Wert werden relative Pfade erzeugt (ungültig für Google hreflang) |