xPulse
🇩🇪 DE

API-Referenz

`i18n.init()`

Wird vom Service-Loader automatisch aufgerufen. Nicht manuell nötig.


`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:

  1. req.lang — gesetzt vom Routen-Middleware (URL-Prefix /en/...)
  2. Accept-Language-Header — erste unterstützte Sprache
  3. i18n.default aus xpulse.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:

  1. Eintrag in der angeforderten Sprache
  2. Eintrag in der Default-Sprache (i18n.default)
  3. 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:

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)
de/api.md 2026-04-22