In dieser Schritt-für-Schritt-Anleitung zur Internationalisierung von React erfahren Sie, wie Sie eine React-App mithilfe von react-i18next und JSON-Dateien übersetzen.
Dieser Leitfaden verwendet ein kleines React + Vite-Projekt und bereitet es für die Lokalisierung vor, einschließlich:
- Laden von JSON-Übersetzungsdateien
- Verwenden der Funktion
t()für Übersetzungen - Verarbeiten von dynamischem Text (Interpolation, Plurale, Rich Text mit
<Trans />) - Übersetzen von JSON-Dateien mit KI
Sie können den Commit-Beispielen folgen oder dieselben Schritte auf Ihre bestehende React-App anwenden.
Auf dieser Seite
Was Sie zum Übersetzen einer React-App benötigen
Um diesem Tutorial zu folgen, benötigen Sie:
- Node.js und npm
- Grundlegende React-Kenntnisse
- Einen Code-Editor wie VS Code
Natürlich benötigen Sie auch ein Übersetzungstool. Wir verwenden Private Translation Cloud (PTC), um übersetzte JSON-Dateien zu erstellen. Sie können sich jetzt für eine kostenlose Testversion anmelden oder warten, bis wir den Übersetzungsschritt erreichen.
Einrichten der React-Internationalisierung (mit Commit-Beispielen)
1
Richten Sie Ihre React-App für die Übersetzung ein
Wenn Sie bereits eine React-Anwendung haben, fahren Sie mit Schritt 2 fort.
Um eine neue React + TypeScript-App zu erstellen, öffnen Sie Ihr Terminal, navigieren Sie zu dem Ordner, in dem Sie Ihre Projekte speichern, und führen Sie Folgendes aus:
npm create vite@latest react-localization-demo -- --template react-ts
cd react-localization-demo
npm install
npm run devDadurch wird ein Entwicklungsserver gestartet und die Standardseite von Vite + React in Ihrem Browser geöffnet.
Commit-Referenz: React-Projekt mit Vite und TypeScript erstellen
2
Fügen Sie Ihrer React-App benutzerseitigen Text hinzu
Bevor Sie react-i18next hinzufügen, müssen Sie den Quellsprachentext vorbereiten, den Sie übersetzen möchten. Öffnen Sie src/App.tsx und fügen Sie Ihre benutzerseitigen Zeichenfolgen hinzu:
function App() {
return (
<div>
<h1>Welcome</h1>
<p>This is a localization demo.</p>
<button onClick={() => alert('Click me')}>Click me</button>
</div>
);
}
Für unsere Demo haben wir unsere Benutzeroberfläche mit einer Überschrift, einer Beschreibung und einer Schaltfläche einfach gehalten.
3
Einrichten von react-i18next in Ihrer React-App
Nachdem Ihre React-App nun etwas einfachen englischen Text anzeigt, ist es an der Zeit, react-i18next zu verbinden, damit diese Zeichenfolgen aus einer Übersetzungsdatei stammen können, anstatt fest codiert zu sein.
Dieser Schritt besteht aus drei Teilen:
- Installieren Sie
i18nextundreact-i18next - Erstellen Sie Ihre englische Übersetzungsdatei (
en.json) - Aktualisieren Sie Ihre Komponente, um den
useTranslationHook zu verwenden
3.1 Installieren der i18n-Bibliotheken
Installieren Sie die Bibliotheken aus Ihrem Projektordner:
npm install i18next react-i18nextIn diesem Beispiel:
i18nextist die zentrale Internationalisierungsbibliothekreact-i18nextfügt React-Bindungen wie denuseTranslation-Hook hinzu
3.2 Erstellen der englischen Quelldatei für die Übersetzung (en.json)
Erstellen Sie die folgende Ordnerstruktur:
src/
i18n/
locales/
en.jsonFügen Sie dann Ihre englischen Zeichenfolgen zu src/i18n/locales/en.json hinzu:
{
"welcome": "Welcome",
"description": "This is a localization demo.",
"clickMe": "Click me"
}Jeder Schlüssel (welcome, description, clickMe) wird dem Text zugeordnet, den Sie in der Benutzeroberfläche anzeigen möchten.
3.3 Aktualisieren von app.tsx zur Verwendung von useTranslation
Ersetzen Sie Ihren fest codierten englischen Text durch Aufrufe der t()-Übersetzungsfunktion.
Der useTranslation()-Hook ermöglicht Ihrer Komponente den Zugriff auf:
t()– sucht eine Zeichenfolge anhand des Schlüsselsi18n– ermöglicht es Ihnen, Sprachen programmgesteuert zu ändern
Aktualisieren Sie src/App.tsx:
import { useTranslation } from 'react-i18next';
function App() {
const { t } = useTranslation();
return (
<div>
<h1>{t('welcome')}</h1>
<p>{t('description')}</p>
<button onClick={() => alert(t('clickMe'))}>{t('clickMe')}</button>
</div>
);
}
export default App;
Commit-Referenz: Erstellen der ersten englischen Datei für die Übersetzung
4
Initialisieren von i18next und automatisches Laden von JSON-Dateien
Im Moment ruft Ihre Komponente t('welcome') auf, aber i18next weiß noch nicht:
- Wo
en.jsonlebt - Welche Sprachen existieren
- Was die Standardsprache sein soll
In diesem Schritt initialisieren Sie i18next und weisen es an, alle JSON-Dateien aus Ihrem locales-Ordner automatisch mithilfe von Vites import.meta.glob zu laden.
4.1 Erstellen der i18n-Konfigurationsdatei
Erstellen Sie eine neue Datei unter:
src/i18n/index.tsFügen Sie das folgende Setup hinzu:
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
type TranslationResources = string | { [k: string]: TranslationResources } | TranslationResources[];
const modules = import.meta.glob<{default: Record<string, TranslationResources>}>('./locales/*.json', { eager: true })
const resources: Record<string, { translation: Record<string, TranslationResources> }> = {};
for (const path in modules) {
const lang = path.match(/\.\/locales\/(.*)\.json$/)?.[1];
if (lang) {
resources[lang] = { translation: modules[path].default };
}
}
i18n
.use(initReactI18next)
.init({
resources,
fallbackLng: 'en',
interpolation: { escapeValue: false },
});
export default i18n;Dieses Setup ist nützlich, weil:
- Jede
*.json-Datei, die Sie zusrc/i18n/locales/hinzufügen, wird automatisch verfügbar. - Wenn Private Translation Cloud neue Sprachdateien erstellt (z. B.
ar.json), werden diese automatisch von dieser Konfiguration geladen – es sind keine Importe oder Codeänderungen erforderlich.
Commit-Referenz: i18n-Konfiguration einrichten
4.2 Importieren von i18n in Ihrem App-Einstiegspunkt
Bevor React Ihre App rendert, muss i18next die Möglichkeit haben, sich zu initialisieren. Damit dies geschieht, müssen Sie Ihre i18n-Konfiguration in der Einstiegsdatei importieren.
Wenn Sie diesen Schritt überspringen, gibt t() nur Übersetzungsschlüssel anstelle von übersetztem Text zurück.
Öffnen Sie src/main.tsx und fügen Sie den hervorgehobenen Import hinzu:
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import './index.css'
import './i18n' // ← Add this import!
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>,
)
5
Verarbeiten von Pluralen, Interpolation und Rich Text
Bisher haben Sie nur statische Zeichenfolgen wie „Willkommen“ und „Klick mich“ verwendet. Echte Apps benötigen jedoch dynamische Inhalte:
- Einschließen von Links oder Formatierungen in übersetzten Text
- Begrüßen von Benutzern mit Namen
- Anzeigen von Zählungen („1 Nachricht“ vs. „3 Nachrichten“)
5.1 Interpolation: Hinzufügen von Variablen zu Übersetzungen
Anstatt Werte fest zu codieren, die sich zur Laufzeit ändern, können Sie diese in Ihre Übersetzungen interpolieren.
Fügen Sie dazu eine Variable in {{ }} in Ihrem JSON ein und übergeben Sie dann den tatsächlichen Wert, wenn Sie t() aufrufen.
Aktualisieren Sie src/i18n/locales/en.json:
{
"welcome": "Welcome",
"userGreeting": "Welcome back, {{firstName}}!",
"description": "This is a localization demo.",
"clickMe": "Click me"
}
Aktualisieren Sie nun Ihre Komponente, um die interpolierte Begrüßung zu verwenden:
import { useTranslation } from 'react-i18next';
function App() {
const { t } = useTranslation();
const user = { firstName: 'Sarah' };
return (
<div>
<h1>{t('welcome')}</h1>
<p>{t('userGreeting', { firstName: user.firstName })}</p>
<p>{t('description')}</p>
<button onClick={() => alert(t('clickMe'))}>{t('clickMe')}</button>
</div>
);
}
export default App;
Das zweite Argument für t() ist ein Objekt mit den Werten, die Sie ersetzen möchten. Sie können so viele Variablen haben, wie Sie benötigen – stellen Sie einfach sicher, dass jede in Ihren Übersetzungen vorkommt.
5.2 Hinzufügen von Pluralformen
Einige Texte ändern sich basierend auf einer Zahl. Zum Beispiel „1 neue Nachricht“ vs. „3 neue Nachrichten“. i18next verarbeitet dies automatisch, wenn Sie Pluralformen angeben.
Aktualisieren Sie src/i18n/locales/en.json:
{
"welcome": "Welcome",
"userGreeting": "Welcome back, {{firstName}}!",
"description": "This is a localization demo.",
"clickMe": "Click me",
"newMessages_one": "You have {{count}} new message.",
"newMessages_other": "You have {{count}} new messages."
}
Damit die Pluralisierung funktioniert, muss die interpolierte Variable count heißen. i18next verwendet diesen Wert, um die korrekte Pluralform für jede Sprache auszuwählen.
Verwenden Sie es nun in Ihrer Komponente:
import { useTranslation } from 'react-i18next';
function App() {
const { t } = useTranslation();
const user = { firstName: 'Sarah' };
const [messageCount, setMessageCount] = useState<number>(1);
const handleIncrement = () => {
setMessageCount(messageCount + 1);
};
return (
<div>
<h1>{t('welcome')}</h1>
<p>{t('userGreeting', { firstName: user.firstName })}</p>
<p>{t('newMessages', { count: messageCount })}</p>
<p>{t('description')}</p>
<button onClick={handleIncrement}>{t('clickMe')}</button>
</div>
);
}
export default App;
i18next wählt automatisch newMessages (Singular) aus, wenn count 1 ist, und newMessages_other (Plural) für jede andere Zahl.
5.3 trans-Komponente: Hinzufügen von Formatierungen und Links
Manchmal benötigen Sie Formatierungen (wie fettgedruckten Text) oder interaktive Elemente (wie Links) innerhalb einer übersetzten Zeichenfolge. Mit der Trans-Komponente können Sie JSX-Elemente (JavaScript XML) in Ihre Übersetzungen einfügen.
Importieren Sie zunächst die Trans-Komponente:
import { useTranslation, Trans } from 'react-i18next';Fügen Sie src/i18n/locales/en.json einen neuen Schlüssel hinzu:
{
"welcome": "Welcome",
"userGreeting": "Welcome back, {{firstName}}!",
"newMessages_one": "You have {{count}} new message.",
"newMessages_other": "You have {{count}} new messages.",
"description": "This is a localization demo.",
"termsText": "I agree to the <1>Terms of Service</1> and <3>Privacy Policy</3>.",
"clickMe": "Click me"
}
Beachten Sie die <1>– und <3>-Tags. Dies sind Platzhalter, die Kindkomponenten nach Index zuordnen (beginnend mit 0).
Verwenden Sie nun die Trans-Komponente in Ihrem JSX:
import { useTranslation, Trans } from 'react-i18next';
function App() {
const { t } = useTranslation();
const user = { firstName: "Sarah" };
const [messageCount, setMessageCount] = useState<number>(1);
const handleIncrement = () => {
setMessageCount(messageCount + 1);
};
return (
<div>
<h1>{t("welcome")}</h1>
<p>{t("userGreeting", { firstName: user.firstName })}</p>
<p>{t("newMessages", { count: messageCount })}</p>
<p>{t("description")}</p>
<p>
<Trans i18nKey="termsText">
I agree to the <a href="/terms">Terms of Service</a> and
<a href="/privacy">Privacy Policy</a>.
</Trans>
</p>
<button onClick={handleIncrement}>{t("clickMe")}</button>
</div>
);
}
export default App;
Übersetzen Sie Ihre React-App
An diesem Punkt ist Ihre App vollständig für die Internationalisierung vorbereitet. Jetzt ist es an der Zeit, Ihre en.json-Datei zu übersetzen.
Es gibt verschiedene Möglichkeiten, dies zu tun, aber wir konzentrieren uns auf die Verwendung von PTC, um übersetzte JSON-Dateien automatisch zu generieren. Es ermöglicht das manuelle Hochladen von Dateien, die Git-Integration oder die Verwendung der API.
Für unser Demoprojekt werden wir PTC in unser GitHub-Repository integrieren.
Schritt 1
Einrichten eines Projekts in PTC zum Übersetzen der JSON-Datei
Um Ihr Projekt mit PTC zu verbinden, melden Sie sich für eine kostenlose Testversion an.
- Befolgen Sie die Schritte im Leitfaden für die ersten Schritte, um ein neues Projekt zu erstellen.
- Wählen Sie im Setup-Assistenten Ihre Quelldatei (in unserem Fall
src/i18n/locales/en.json) aus und wählen Sie Ihren Ausgabepfad:
src/i18n/locales/{{lang}}.jsonDieses Muster erstellt eine Datei pro Sprache (z. B. fr.json, de.json) unter Verwendung derselben Ordnerstruktur, die Ihre App bereits erwartet.
Schritt 2
Abrufen übersetzter JSON-Dateien und Hinzufügen zu Ihrem Projekt
Wenn Ihre Übersetzungen fertig sind, benachrichtigt Sie PTC. Ihre nächsten Schritte hängen davon ab, wie Sie PTC verwenden:
| Wenn Sie … verwenden | Was als Nächstes geschieht |
|---|---|
| Git-Integration | PTC öffnet eine Pull/Merge Request mit neuen Sprachdateien |
| Manuelles Hochladen von Dateien | Laden Sie die JSON-Datei herunter und platzieren Sie sie in src/i18n/locales/ |
| PTC API | Verwenden Sie den Dateiwiederherstellungsendpunkt |
Wenn Sie beispielsweise ins Französische übersetzen und die Git-Integration verwenden, gibt PTC fr.json zurück und platziert die Datei in src/i18n/locales/fr.json.
Commit-Referenz: PTC ReactLocalizationDemo: automatische Übersetzungen
Schritt 3
Testen Sie Ihre übersetzte React-App mit einem Sprachumschalter
Nachdem Sie nun mindestens eine Übersetzungsdatei haben, fügen wir einen einfachen Sprachumschalter hinzu, um zu überprüfen, ob alles funktioniert.
Aktualisieren Sie src/App.tsx , um Sprachumschalter-Schaltflächen hinzuzufügen:
import { useTranslation } from 'react-i18next';
function App() {
const { t, i18n } = useTranslation();
return (
<div>
<h1>{t('welcome')}</h1>
<p>{t('userGreeting', { firstName: user.firstName })}</p>
<p>{t('newMessages', { count: messageCount })}</p>
<p>{t('description')}</p>
<p>
<Trans i18nKey="termsText">
I agree to the <a href="/terms">Terms of Service</a> and <a href="/privacy">Privacy Policy</a>.
</Trans>
</p>
<button onClick={() => alert(t('clickMe'))}>{t('clickMe')}</button>
<button onClick={() => i18n.changeLanguage('en')}>EN</button>
<button onClick={() => i18n.changeLanguage('fr')}>FR</button>
</div>
);
}
Führen Sie Ihre App (npm run dev) aus und klicken Sie auf die Schaltflächen EN / FR. Wenn Sie die App auf Französisch ausführen, sollte das Layout genau so aussehen wie auf Englisch – nur die Sprache des Textes ändert sich.
Commit-Referenz: Einen Sprachumschalter hinzufügen, um die Übersetzung zu testen
Optimieren des Ladens von Übersetzungen und der Spracherkennung
Nachdem Ihre Übersetzungen nun funktionieren, können Sie i18next optimieren, um Ihre App schneller und benutzerfreundlicher zu machen, insbesondere wenn Sie mehrere Sprachen unterstützen.
Automatische Erkennung der Benutzersprache
Standardmäßig startet Ihre App auf Englisch und erfordert, dass Benutzer die Sprache manuell wechseln. Mit der automatischen Spracherkennung überprüft i18next den Browser, die URL oder gespeicherte Einstellungen und lädt sofort die richtige Sprache.
- Fügen Sie das
i18next-browser-languagedetector-Paket hinzu:
npm install i18next-browser-languagedetector- Aktualisieren Sie Ihre
src/i18n/index.ts:
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import LanguageDetector from "i18next-browser-languagedetector";
type TranslationResources = string | { [k: string]: TranslationResources } | TranslationResources[];
const modules = import.meta.glob<{default: Record<string, TranslationResources>}>('./locales/*.json', { eager: true })
const resources: Record<string, { translation: Record<string, TranslationResources> }> = {};
for (const path in modules) {
const lang = path.match(/\.\/locales\/(.*)\.json$/)?.[1];
if (lang) {
resources[lang] = { translation: modules[path].default };
}
}
i18n
.use(LanguageDetector) // detect browser/localStorage/etc.
.use(initReactI18next)
.init({
resources,
fallbackLng: "en",
supportedLngs: ["en", "fr", "de", "ar"], // adjust to your languages
interpolation: { escapeValue: false },
detection: {
order: ["querystring", "localStorage", "cookie", "navigator"],
caches: ["localStorage", "cookie"],
}
});
export default i18n;
Auf diese Weise sehen Benutzer die App automatisch in ihrer bevorzugten Sprache, sofern verfügbar. Sie können bei Bedarf weiterhin manuell wechseln.
Lazy-Loading von Übersetzungen
Im Moment lädt i18next jede Übersetzungsdatei beim Start. Das ist in Ordnung für ein oder zwei Sprachen, aber wenn Sie viele Sprachen unterstützen, kann Ihre Bundle-Größe schnell wachsen.
Lazy Loading löst dies, indem nur die Sprachdateien heruntergeladen werden, die der Benutzer benötigt.
- Installieren Sie das HTTP-Backend:
npm install i18next-http-backend- Aktualisieren Sie Ihre
src/i18n/index.ts:
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import Backend from "i18next-http-backend";
import LanguageDetector from "i18next-browser-languagedetector";
i18n
.use(Backend) // load JSON over HTTP
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: "en",
supportedLngs: ["en", "fr"],
interpolation: { escapeValue: false },
backend: {
loadPath: "/locales/{{lng}}/{{ns}}.json"
}
});
export default i18n;
- Nach der Aktivierung des Backends lädt i18next Übersetzungsdateien über HTTP, anstatt sie zu bündeln. Damit dies funktioniert, müssen Ihre Übersetzungen von einem öffentlichen Pfad bereitgestellt werden, den der Browser anfordern kann:
public/
locales/
en/
translation.json
fr/
translation.jsonMit dieser Struktur befindet sich jede Sprache in einem eigenen Ordner, der den {{lng}} Teil Ihrer loadPath widerspiegelt. Wenn ein Benutzer beispielsweise zu Französisch wechselt, ruft i18next Folgendes ab:
/locales/fr/translation.json
Übersetzen Sie Ihre React App mit PTC
Ihre App ist bereit für die Lokalisierung mit i18next. Lassen Sie nun PTC die Übersetzungsarbeit für Sie erledigen.
Starten Sie Ihre kostenlose Testversion und übersetzen Sie bis zu 2.500 Wörter in 2 Sprachen. Aktivieren Sie anschließend die Zahlung nach Bedarf, um nur für das zu zahlen, was Sie übersetzen.


Übersetzen Sie JSON-Dateien in React Apps mit KI
Erhalten Sie kontextbezogene Übersetzungen in Minuten
Laden Sie Dateien hoch oder automatisieren Sie über API- oder Git-Integration
1
Starten Sie eine kostenlose Testversion
Übersetzen Sie 2500 Wörter kostenlos.
2
Fügen Sie schnell Projektdetails hinzu
Geben Sie Kontext zu Ihrer App und Ihren Nutzern an.
3
Übersetzungen erhalten
Laden Sie eine ZIP-Datei herunter oder führen Sie sie in Ihrem Repo zusammen.