Übersetzen Sie React-Apps mit KI in menschlicher Qualität

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.

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 dev

Dadurch wird ein Entwicklungsserver gestartet und die Standardseite von Vite + React in Ihrem Browser geöffnet.

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:

  1. Installieren Sie i18next und react-i18next
  2. Erstellen Sie Ihre englische Übersetzungsdatei (en.json)
  3. Aktualisieren Sie Ihre Komponente, um den useTranslation Hook zu verwenden

3.1 Installieren der i18n-Bibliotheken

Installieren Sie die Bibliotheken aus Ihrem Projektordner:

npm install i18next react-i18next

In diesem Beispiel:

  • i18next ist die zentrale Internationalisierungsbibliothek
  • react-i18next fügt React-Bindungen wie den useTranslation-Hook hinzu

3.2 Erstellen der englischen Quelldatei für die Übersetzung (en.json)

Erstellen Sie die folgende Ordnerstruktur:

src/
  i18n/
    locales/
      en.json

Fü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üssels
  • i18n – 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;

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.json lebt
  • 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.ts

Fü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 zu src/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.

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.

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.

  1. Befolgen Sie die Schritte im Leitfaden für die ersten Schritte, um ein neues Projekt zu erstellen.
  2. 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}}.json

Dieses 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 … verwendenWas als Nächstes geschieht
Git-IntegrationPTC öffnet eine Pull/Merge Request mit neuen Sprachdateien
Manuelles Hochladen von DateienLaden Sie die JSON-Datei herunter und platzieren Sie sie in src/i18n/locales/
PTC APIVerwenden 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.

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.

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.

  1. Fügen Sie das i18next-browser-languagedetector-Paket hinzu:
npm install i18next-browser-languagedetector
  1. 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.

  1. Installieren Sie das HTTP-Backend:
npm install i18next-http-backend
  1. 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;
  1. 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.json

Mit 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.

Nach oben scrollen