Skip to main content

Angular-i18n mit Transloco: Einrichtungs- und Übersetzungsleitfaden

Von der Installation bis zur Produktion: Konfigurieren Sie Transloco, verarbeiten Sie Pluralformen mit ICU-Syntax, ergänzen Sie intelligente Locale-Fallbacks und automatisieren Sie Übersetzungen mit KI.

1

Transloco installieren

Transloco ist die beliebteste i18n-Bibliothek eines Drittanbieters für Angular. Sie bietet das Laden von Übersetzungen zur Laufzeit, Unterstützung des ICU-Nachrichtenformats, verzögert geladene Bereiche und eine übersichtliche Vorlagen-API mit strukturellen Direktiven und Pipes.

Warum Transloco statt der integrierten i18n-Lösung von Angular? Die integrierte Lösung erfordert einen eigenen Build pro Sprache und unterstützt keinen Sprachwechsel zur Laufzeit. Transloco lädt Übersetzungen zur Laufzeit, sodass Sie einen Build ausliefern und die Sprache unmittelbar wechseln können.
Terminal
npm install @jsverse/transloco
2

Transloco konfigurieren

Registrieren Sie Transloco in Ihrer Anwendungskonfiguration. Geben Sie die verfügbaren Sprachen an, legen Sie eine Standardsprache fest und konfigurieren Sie den Übersetzungs-Loader. Transloco unterstützt sowohl eigenständige Komponenten (Angular 14+) als auch NgModule-Muster.

Eigenständige Komponenten (empfohlen)

app.config.ts
// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideHttpClient } from '@angular/common/http';
import {
  provideTransloco,
  TranslocoHttpLoader,
} from '@jsverse/transloco';

export const appConfig: ApplicationConfig = {
  providers: [
    provideHttpClient(),
    provideTransloco({
      config: {
        availableLangs: ['en', 'de', 'ja', 'es', 'fr'],
        defaultLang: 'en',
        fallbackLang: 'en',
        reRenderOnLangChange: true,
        prodMode: true,
      },
      loader: TranslocoHttpLoader,
    }),
  ],
};

NgModule-Muster

app.module.ts
// app.module.ts
import { NgModule } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {
  TranslocoModule,
  TRANSLOCO_LOADER,
  TranslocoHttpLoader,
  provideTransloco,
} from '@jsverse/transloco';

@NgModule({
  imports: [TranslocoModule],
  providers: [
    provideTransloco({
      config: {
        availableLangs: ['en', 'de', 'ja', 'es', 'fr'],
        defaultLang: 'en',
        fallbackLang: 'en',
        reRenderOnLangChange: true,
        prodMode: true,
      },
      loader: TranslocoHttpLoader,
    }),
  ],
})
export class AppModule {}
Wenn Übersetzungen unverarbeitete Schlüssel wie „nav.home“ statt „Home“ anzeigen, findet TranslocoHttpLoader meist Ihre JSON-Dateien nicht. Prüfen Sie, ob sich Ihre Übersetzungsdateien in src/assets/i18n/ befinden und das assets-Array Ihrer angular.json diesen Pfad enthält.

Übersetzungsdateien erstellen

Erstellen Sie in src/assets/i18n/ eine JSON-Datei pro Sprache. Gliedern Sie Zeichenfolgen mit verschachtelten Schlüsseln nach Funktion. Transloco verwendet das ICU-Nachrichtenformat für Pluralformen und Variablen.

assets/i18n/*.json
// assets/i18n/en.json
{
  "nav": {
    "home": "Home",
    "about": "About",
    "settings": "Settings"
  },
  "greeting": "Hello, {{ name }}!",
  "cart": {
    "itemCount": "{count, plural, one {# item} other {# items}}"
  }
}

// assets/i18n/de.json
{
  "nav": {
    "home": "Startseite",
    "about": "Uber uns",
    "settings": "Einstellungen"
  },
  "greeting": "Hallo, {{ name }}!",
  "cart": {
    "itemCount": "{count, plural, one {# Artikel} other {# Artikel}}"
  }
}
3

Übersetzungen in Vorlagen und Diensten verwenden

Transloco bietet drei Übersetzungswege in Vorlagen: die strukturelle Direktive (*transloco), die Pipe (| transloco) und den Dienst TranslocoService für TypeScript-Code. Die strukturelle Direktive wird für die meisten Anwendungsfälle empfohlen, da sie ein einzelnes Abonnement erstellt und dem gesamten Vorlagenblock die Übersetzungsfunktion bereitstellt.

Vorlagenübersetzung

component.html
<!-- Using the transloco directive (recommended) -->
<ng-container *transloco="let t">
  <h1>{{ t('greeting', { name: userName }) }}</h1>
  <nav>
    <a routerLink="/">{{ t('nav.home') }}</a>
    <a routerLink="/about">{{ t('nav.about') }}</a>
  </nav>
</ng-container>

<!-- Using the transloco pipe -->
<h1>{{ 'greeting' | transloco:{ name: userName } }}</h1>

<!-- Using the structural directive with read -->
<ng-container *transloco="let t; read: 'nav'">
  <a routerLink="/">{{ t('home') }}</a>
  <a routerLink="/about">{{ t('about') }}</a>
</ng-container>
Verwenden Sie den read-Parameter der strukturellen Direktive, um Übersetzungen auf einen verschachtelten Schlüssel zu begrenzen. So müssen Sie das Präfix nicht in jedem t()-Aufruf wiederholen und die Vorlagen bleiben übersichtlicher.

Dienstübersetzung (TypeScript)

notification.component.ts
import { Component, inject } from '@angular/core';
import { TranslocoService } from '@jsverse/transloco';

@Component({
  selector: 'app-notification',
  template: '<span>{{ message }}</span>',
})
export class NotificationComponent {
  private translocoService = inject(TranslocoService);
  message = '';

  showSuccess() {
    // Translate in TypeScript
    this.message = this.translocoService.translate('notifications.saved');
  }

  switchLanguage(lang: string) {
    this.translocoService.setActiveLang(lang);
  }
}
Die transloco-Pipe erstellt bei jeder Verwendung ein neues Abonnement. Bevorzugen Sie in Vorlagen mit vielen übersetzten Zeichenfolgen die strukturelle Direktive *transloco, die für den gesamten Block nur ein Abonnement erstellt.
4

Pluralformen mit dem ICU-Nachrichtenformat verarbeiten

Transloco verwendet das ICU-Nachrichtenformat für Pluralformen und Auswahlausdrücke. ICU verarbeitet komplexe Pluralregeln automatisch – Arabisch (sechs Formen), Russisch (drei Formen), Japanisch (eine Form) – aus einer einzigen Nachrichtenzeichenfolge. Definieren Sie die Pluralregeln in den Übersetzungsdateien; Transloco wählt zur Laufzeit die richtige Form aus.

ICU plural syntax
// assets/i18n/en.json
{
  "cart": {
    "itemCount": "{count, plural, one {# item} other {# items}}",
    "emptyMessage": "Your cart is empty"
  },
  "notifications": {
    "unread": "{count, plural, =0 {No new notifications} one {# new notification} other {# new notifications}}"
  }
}

// assets/i18n/ar.json — Arabic has 6 plural forms
{
  "cart": {
    "itemCount": "{count, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}"
  }
}

// Template usage:
// <span>{{ t('cart.itemCount', { count: cartItems.length }) }}</span>
Implementieren Sie niemals eigene Plurallogik in Ihren Komponenten. Sprachen besitzen sehr unterschiedliche Pluralregeln, die die ICU-Spezifikation bereits verarbeitet. Überlassen Sie Transloco und ICU diese Aufgabe und definieren Sie die richtigen Pluralformen in Ihren Übersetzungsdateien.

Intelligente Locale-Fallbacks mit angular-locale-chain

Standardmäßig wechselt Transloco zur Standard-Locale, wenn ein Übersetzungsschlüssel fehlt. Eine Person mit pt-BR sieht Englisch statt vollständig geeigneter pt-PT-Übersetzungen. angular-locale-chain behebt dies, indem es Übersetzungen aus einer konfigurierbaren Fallback-Kette rekursiv zusammenführt, bevor sie an Transloco übergeben werden. Jeder Schlüssel wird ausgefüllt – keine Lücken, keine fehlenden Übersetzungen.

Terminal
npm install angular-locale-chain
app.config.ts (with locale chain)
// app.config.ts — with angular-locale-chain
import { ApplicationConfig } from '@angular/core';
import { provideHttpClient } from '@angular/common/http';
import {
  provideTransloco,
  TranslocoHttpLoader,
  TRANSLOCO_LOADER,
  TRANSLOCO_FALLBACK_STRATEGY,
} from '@jsverse/transloco';
import {
  LocaleChainLoader,
  LocaleChainFallbackStrategy,
} from 'angular-locale-chain';

export const appConfig: ApplicationConfig = {
  providers: [
    provideHttpClient(),
    provideTransloco({
      config: {
        availableLangs: ['en', 'fr', 'fr-CA', 'pt', 'pt-BR', 'de', 'de-AT'],
        defaultLang: 'en',
        fallbackLang: 'en',
        reRenderOnLangChange: true,
        prodMode: true,
      },
    }),
    {
      provide: TRANSLOCO_LOADER,
      useFactory: () => {
        const inner = new TranslocoHttpLoader();
        return new LocaleChainLoader(inner, {
          defaultLocale: 'en',
        });
      },
    },
    {
      provide: TRANSLOCO_FALLBACK_STRATEGY,
      useFactory: () => new LocaleChainFallbackStrategy(),
    },
  ],
};
angular-locale-chain ist eine quelloffene Bibliothek, die Transloco-Fehler Nr. 574 behebt: fehlender schlüsselbezogener Fallback bei einer teilweise vollständigen Übersetzungsdatei.

Empfohlene Dateistruktur

Project Structure
my-angular-app/
├── src/
│   ├── assets/
│   │   └── i18n/
│   │       ├── en.json           # Source language
│   │       ├── de.json           # German
│   │       ├── ja.json           # Japanese
│   │       ├── es.json           # Spanish
│   │       └── fr.json           # French
│   ├── app/
│   │   ├── app.config.ts         # Transloco provider config
│   │   ├── app.component.ts
│   │   └── components/
│   │       └── lang-switcher/
│   │           └── lang-switcher.component.ts
│   └── main.ts
├── angular.json
└── package.json

Übersetzungen automatisieren

Wenn Ihre Transloco-Einrichtung abgeschlossen ist, übersetzen Sie Ihre Locale-Dateien mit KI. Bitten Sie Ihren KI-Assistenten in Ihrer IDE, Ihre JSON-Ausgangsdatei zu übersetzen, oder verwenden Sie die CLI von i18n Agent in Ihrer CI/CD-Pipeline für vollständig automatisierte Lokalisierung.

Terminal
# In your IDE, ask your AI assistant:
> Translate src/assets/i18n/en.json to German, Japanese, and Spanish

✓ de.json created (1.2s)
✓ ja.json created (1.5s)
✓ es.json created (1.1s)

# Or use the CLI in CI/CD:
npx i18n-agent translate src/assets/i18n/en.json --lang de,ja,es
Übersetzen Sie schrittweise: Wenn Sie Ihrer Ausgangsdatei neue Schlüssel hinzufügen, übersetzen Sie nur die Änderungen, statt alle Dateien neu zu erzeugen. So bleiben von Menschen geprüfte Übersetzungen erhalten und unnötige Änderungen werden vermieden.

Übersetzungsqualität automatisieren

Erkennen Sie mit i18n-validate fehlende Schlüssel und beschädigte Platzhalter vor der Veröffentlichung. Testen Sie Ihre Benutzeroberfläche mit i18n-pseudo und Pseudoübersetzungen, bevor echte Übersetzungen vorliegen.

Häufige Fallstricke

Übersetzungen zeigen unverarbeitete Schlüssel

TranslocoHttpLoader findet Ihre JSON-Dateien nicht. Prüfen Sie, ob sich die Dateien in src/assets/i18n/ befinden, das assets-Array in angular.json diesen Pfad enthält und die Dateinamen exakt Ihrer availableLangs-Konfiguration entsprechen (Groß-/Kleinschreibung beachten).

Bereichsbezogene Schlüssel werden nicht aufgelöst

Bei Transloco-Bereichen müssen Übersetzungsdateien unter assets/i18n/[scope]/[lang].json und nicht im i18n-Stammordner liegen. Stellen Sie außerdem sicher, dass der Bereich mit TRANSLOCO_SCOPE im providers-Array der Komponente registriert ist.

Konsolenwarnungen in der Produktion

Setzen Sie für Produktions-Builds prodMode: true in Ihrer Transloco-Konfiguration. Andernfalls protokolliert Transloco Warnungen zu fehlenden Schlüsseln in der Konsole. Außerdem werden Prüfungen für die Entwicklung deaktiviert, die zusätzlichen Aufwand verursachen.

Übersetzungen blitzen bei der Routennavigation auf

Verzögert geladene Routen rufen Übersetzungen erst nach dem Rendern der Komponente ab, wodurch kurz nicht übersetzte Schlüssel aufblitzen. Zeigen Sie mit dem integrierten TRANSLOCO_LOADING_TEMPLATE von Transloco einen Ladezustand an oder laden Sie Übersetzungen in einem Route Guard vor.

Regionale Personen sehen Englisch statt der übergeordneten Locale

Der integrierte Fallback von Transloco wird nur ausgelöst, wenn eine ganze Locale-Datei fehlt, nicht bei einzelnen fehlenden Schlüsseln. Verwenden Sie angular-locale-chain, um Übersetzungen aus verwandten Locales rekursiv zusammenzuführen, beispielsweise pt-BR zu pt-PT, dann pt und schließlich Englisch.

i18n Agent jetzt testen

Legen Sie Ihre Übersetzungsdatei hier ab

JSON, YAML, PO, XML, CSV, Markdown, Properties

oder zum Auswählen klicken

Zielsprachen

Keine Registrierung erforderlichSofortiges Angebot

Locale-Fallback mit angular-locale-chain

Fehlt ein Übersetzungsschlüssel in einer regionalen Locale wie pt-BR, wechselt Angulars TranslocoLoader direkt zur Standard-Locale, statt zuerst die übergeordnete Locale pt zu prüfen.

Terminal
npm install angular-locale-chain
Configuration
import { LocaleChainLoader } from 'angular-locale-chain';

new LocaleChainLoader(innerLoader, {
  fallbacks: {
    'pt-BR': ['pt', 'en'],
    'zh-Hant-HK': ['zh-Hant', 'zh', 'en'],
  },
  defaultLocale: 'en',
});

In unserem Leitfaden zu Locale-Fallbacks finden Sie die vollständige Liste unterstützter Frameworks und 75 integrierter Ketten. Learn more →

Häufig gestellte Fragen zu Angular-i18n