12 - Internationalisierung (i18n)¶
Dokument: Mehrsprachigkeits-System Stand: 28.02.2026 Scope: next-intl Integration, Übersetzungen Status: Audit-ready
1. Konfiguration¶
| Parameter | Wert |
|---|---|
| Library | next-intl v4.8.2 |
| Unterstützte Sprachen | Englisch (en), Deutsch (de) |
| Standard-Sprache | Englisch (en) |
| Routing | URL-basiert (/en/play, /de/play) |
Dateien¶
| Datei | Zweck |
|---|---|
i18n/config.ts |
Locale-Liste, DO_NOT_TRANSLATE |
i18n/request.ts |
Server-seitige Locale-Auflösung |
messages/en.json |
Englische Übersetzungen |
messages/de.json |
Deutsche Übersetzungen |
next.config.ts |
next-intl Plugin |
2. Locale-Erkennung¶
Prioritätsreihenfolge (proxy.ts)¶
1. URL-Pfad → /de/play → locale = de
2. Cookie → NEXT_LOCALE = de → locale = de
3. Accept-Language → de-DE,de;q=0.9 → locale = de
4. Default → locale = en
URL-Verhalten¶
| Sprache | URL | Verhalten |
|---|---|---|
| Englisch (Default) | /play |
URL bleibt clean, intern rewritten |
| Deutsch | /de/play |
Expliziter Prefix |
3. Provider-Integration¶
Datei: app/[locale]/layout.tsx
const messages = await import(`../../messages/${locale}.json`);
<NextIntlClientProvider messages={messages.default}>
{children}
</NextIntlClientProvider>
Server-seitige Locale¶
// i18n/request.ts
export default getRequestConfig(async ({ requestLocale }) => {
let locale = await requestLocale;
if (!locale || !locales.includes(locale)) locale = 'en';
return {
locale,
messages: (await import(`../messages/${locale}.json`)).default
};
});
Static Params¶
4. Nicht übersetzte Begriffe¶
Die folgenden Terme werden in allen Sprachen unverändert beibehalten:
Markennamen¶
- ChainBETs, ChainBETs.win
Kryptowährungen & Blockchain¶
- USDT, ETH, USDC, DAI
- Arbitrum, Ethereum, L2
- Gas, Gwei, Wei
- MetaMask, Web3Auth, Wallet
Technische Begriffe¶
- Merkle, Merkle Tree, Merkle Proof
- RNG, VRF, API, EIP-712, ERC-20
- Smart Contract
Spielbegriffe¶
- Pari-Mutuel, Jackpot, Rollover
5. Übersetzungsdatei-Struktur¶
Schlüssel-Namenskonvention¶
Hierarchische Struktur nach Feature-Bereich:
{
"common": {
"loading": "Loading...",
"error": "An error occurred",
"retry": "Try again"
},
"play": {
"title": "Play",
"selectNumbers": "Select 6 numbers",
"quickPick": "Quick Pick"
},
"dashboard": {
"title": "Dashboard",
"totalTickets": "Total Tickets"
},
"claim": { ... },
"account": { ... },
"auth": { ... }
}
6. Verwendung in Komponenten¶
Client-Komponenten¶
import { useTranslations } from 'next-intl';
function PlayPage() {
const t = useTranslations('play');
return <h1>{t('title')}</h1>;
}
Locale-Navigation¶
import { useLocale } from 'next-intl';
import { useRouter } from 'next/navigation';
const locale = useLocale();
router.push(`/${locale}/dashboard`);
Weiterführende Dokumente: - 03 - Seitenstruktur - 09 - UI Komponenten