Set up i18next with German translations

Initialise i18next and react-i18next, add the German translation file
(locales/de/translation.json), and import the i18n config in main.jsx
so it is available before the app renders.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
francesco448
2026-03-18 16:45:46 +01:00
parent fc8f8385bd
commit 66280e7b7c
3 changed files with 82 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import de from './locales/de/translation.json'
i18n.use(initReactI18next).init({
resources: {
de: { translation: de },
},
lng: 'de',
fallbackLng: 'de',
interpolation: {
escapeValue: false, // React already escapes values
},
})
export default i18n
+65
View File
@@ -0,0 +1,65 @@
{
"app": {
"title": "Realtime Chat",
"headline": "Dein Raum, deine Unterhaltung"
},
"status": {
"idle": "Offline",
"connecting": "Verbindung wird aufgebaut…",
"connected": "Verbunden",
"reconnecting": "Verbindung wird wiederhergestellt…",
"error": "Verbindung unterbrochen"
},
"hint": {
"noSession": "Verbinde dich mit einem Chatraum, um loszulegen.",
"connecting": "Verbindung wird aufgebaut…",
"reconnecting": "Wir versuchen, dich wieder zu verbinden.",
"error": "Verbindung unterbrochen. Bitte versuche es erneut.",
"joined": "Im Raum \"{{room}}\" angemeldet als {{username}}."
},
"form": {
"username": "Benutzername",
"usernamePlaceholder": "z.B. PixelPanda",
"room": "Chatraum",
"roomPlaceholder": "z.B. general",
"connect": "Verbinden",
"update": "Aktualisieren",
"leave": "Verlassen"
},
"chat": {
"title": "Nachrichten",
"liveFeed": "Live-Feed für #{{room}}",
"messageCount": "{{count}} Beiträge",
"empty": "Noch keine Nachrichten. Sag als Erste*r hallo!",
"placeholder": "Schreib eine Nachricht…",
"placeholderDisabled": "Verbinde dich, um zu schreiben",
"send": "Senden"
},
"participants": {
"title": "Aktive Teilnehmer",
"empty": "Niemand ist aktiv",
"online": "online",
"lastActive": "zuletzt aktiv {{time}}"
},
"error": {
"form": {
"usernameRequired": "Benutzername ist erforderlich.",
"roomRequired": "Chatraum ist erforderlich.",
"usernameAndRoomRequired": "Bitte gib einen Benutzernamen und einen Raum an.",
"userIdRequired": "userId ist erforderlich.",
"messageTextRequired": "Nachrichtentext ist erforderlich."
},
"connection": {
"failed": "Verbindung fehlgeschlagen.",
"noActiveConnection": "Keine aktive Verbindung. Bitte verbinde dich erneut.",
"interrupted": "Verbindung unterbrochen. Bitte versuche es erneut.",
"sendFailed": "Nachricht konnte nicht gesendet werden."
},
"api": {
"joinFailed": "Beitritt fehlgeschlagen. Bitte erneut versuchen.",
"noUserReturned": "Backend hat keinen Benutzer für die Beitrittsanfrage zurückgegeben.",
"snapshotFailed": "Konnte Raumübersicht nicht laden.",
"leaveFailed": "Fehler beim Verlassen des Raums."
}
}
}
+1
View File
@@ -1,5 +1,6 @@
import { StrictMode } from 'react' import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client' import { createRoot } from 'react-dom/client'
import './i18n'
import './index.css' import './index.css'
import App from './App.jsx' import App from './App.jsx'