xPulse
🇩🇪 DE

Guide — App mehrsprachig machen

1. Paket installieren

npm install @xpulse/i18n --registry=https://npm.xpulse.one

2. `xpulse.json` in der App anpassen

Minimale Konfiguration (DE als Default, DE + EN unterstützt):

{
"i18n": {
"supported": ["de", "en"],
"default": "de"
}
}

Vollständige Optionen:

{
"i18n": {
"supported": ["de", "en"],
"default": "de",
"use-seo": true,
"exclude": ["/_theme/*", "/_logger/*", "/_debug/*", "/api/*", "/health"],
"paths": {
"translations": "src/translations/"
}
}
}

3. `@xpulse/app` / Service-Loader konfigurieren

@xpulse/i18n wird automatisch über den Service-Loader geladen, wenn das Package installiert ist. xpulse.json des Packages enthält bereits den passenden Eintrag:

{
"service": {
"xpulse-i18n": { "load": true, "depends": ["xpulse-router"] }
}
}

Kein manueller init()-Aufruf nötig.

4. Übersetzungsdateien anlegen

Struktur unter src/translations/:

src/translations/
de/
platform.index.json
platform.footer.json
en/
platform.index.json
platform.footer.json

Format: Flat Key-Value, Variablen als {key}:

{
"tagline": "Private Tools. Kein Server. Keine Kompromisse.",
"cta": "Jetzt starten",
"status.days": "noch {n} Tag{s} verfügbar"
}

5. Lang-Switcher ins Template einbauen

Im Template <html>-Tag:

<html lang="{% htmlLang(_route) %}">

Lang-Switcher an beliebiger Stelle im Layout:

{% langSwitcher(_route.path) %}

Das ergibt:

<div class="xpulse-lang-switcher">
<a href="/tool/chat/"
onclick="localStorage.setItem('xpulse_lang','de')"
class="xpulse-lang-switcher__option xpulse-lang-switcher__option--active"
aria-current="true">DE</a>
<a href="/en/tool/chat/"
onclick="localStorage.setItem('xpulse_lang','en')"
class="xpulse-lang-switcher__option">EN</a>
</div>

6. CSS für den Switcher

Die Klassen xpulse-lang-switcher, xpulse-lang-switcher__option und xpulse-lang-switcher__option--active können frei gestylt werden, z.B.:

.xpulse-lang-switcher {
display: flex;
gap: 0.5rem;
}
.xpulse-lang-switcher__option {
opacity: 0.5;
text-decoration: none;
}
.xpulse-lang-switcher__option--active {
opacity: 1;
font-weight: bold;
}

7. Strings im Handler abrufen

import i18n from '@xpulse/i18n';
// In einem Route-Handler:
const lang = i18n.lang(req);
const tagline = i18n.t('tagline', lang);
const status = i18n.t('status.days', lang, { n: 3, s: 'e' });

Was passiert automatisch

de/guide.md 2026-04-22