Zum Inhalt springen
Angular i18n

Angular‑i18n‑Lösung

Standalone‑Components, Signals und SSR‑Support für Angular‑Anwendungen.

Setup

Laufzeit-Übersetzungen in Angular, in drei Schritten

Das eingebaute i18n von Angular kompiliert ein Bundle pro Sprache. Für Übersetzungen, die sich ohne Rebuild ändern, liest ngx-translate sie zur Laufzeit von Better I18N.

Loader-Abhängigkeiten installieren

ngx-translate liefert die Pipe, den Service und den Loader-Vertrag; core lädt die Messages und speichert sie im Cache.

terminalbash
npm install @ngx-translate/core @better-i18n/core

# @better-i18n/core ships zero dependencies —
# it is the same client our React SDKs are built on.

Einen TranslateLoader auf Basis des CDN schreiben

TranslateLoader erwartet ein Observable pro Sprache, deshalb ist rxjs from() um getMessages der ganze Adapter.

src/app/better-i18n.loader.tsts
import { Injectable } from '@angular/core'
import { TranslateLoader } from '@ngx-translate/core'
import { createI18nCore } from '@better-i18n/core'
import { from, Observable } from 'rxjs'

// Module scope: the 60s in-memory cache lives on the instance, so one
// client per app — not one per component.
const betterI18n = createI18nCore({
  projectId: 'your-org/your-project', // Settings → General → Project ID
  defaultLocale: 'en',
})

@Injectable({ providedIn: 'root' })
export class BetterI18nLoader implements TranslateLoader {
  // TranslateLoader's contract: one Observable of messages per language.
  getTranslation(lang: string): Observable<Record<string, unknown>> {
    return from(betterI18n.getMessages(lang))
  }
}

export { betterI18n }

Bereitstellen und zur Laufzeit wechseln

Ein Provider in bootstrapApplication, dann wechselt use() die Sprache ohne Seiten-Reload und ohne Build pro Sprache.

src/main.tsts
import { bootstrapApplication } from '@angular/platform-browser'
import { importProvidersFrom } from '@angular/core'
import { TranslateModule, TranslateLoader } from '@ngx-translate/core'
import { AppComponent } from './app/app.component'
import { BetterI18nLoader } from './app/better-i18n.loader'

bootstrapApplication(AppComponent, {
  providers: [
    importProvidersFrom(
      TranslateModule.forRoot({
        defaultLanguage: 'en',
        loader: { provide: TranslateLoader, useClass: BetterI18nLoader },
      })
    ),
  ],
})

How it works

Woher ein Angular-String kommt

Kein Bundle pro Sprache: Der Loader löst eine Sprache zur Laufzeit auf und das Edge liefert sie aus.

Read path — every locale load

Your Angular app

The translate pipe reads what TranslateService already loaded.

0 network calls per render

@better-i18n/core

getMessages(lang) inside the TranslateLoader — cached per language.

60s TTL · 0 deps

CDN edge

Cloudflare worker answers from the nearest edge cache.

max-age=60 · always 200

R2 object store

The published translation files the sync worker wrote.

source of truth

Fallback chain — tried in order when a hop fails

1In-memory TTL cache
2CDN fetch, with timeout and one retry
3Persistent storage, if configured
4staticData bundled with the app
5Throw — after everything above missed

Write path — dashboard to app

AI or translator

Proposal reviewed in the dashboard, glossary enforced.

MCP · dashboard · CLI

Publish

Sync worker writes the locale files to R2.

better-i18n publish

CDN purge

Fire-and-forget purge of the affected keys and the manifest.

non-critical by design

Live in the app

The next getMessages() past the TTL returns the new copy.

~60s worst case

0dependencies in core
60scache TTL, client and edge
200CDN status, even on failure
5fallback layers before an error
Switching locale

Schnellstart

Fügen Sie i18n zu Ihrer Angular‑App hinzu – mit Pipes und Services.

src/app/locale-switcher.component.tsts
import { Component, inject } from '@angular/core'
import { TranslateModule, TranslateService } from '@ngx-translate/core'
import { betterI18n } from './better-i18n.loader'

@Component({
  selector: 'app-locale-switcher',
  standalone: true,
  imports: [TranslateModule],
  template: `
    <select (change)="switchTo($any($event.target).value)">
      <option *ngFor="let l of languages" [value]="l.code">{{ l.name }}</option>
    </select>
  `,
})
export class LocaleSwitcherComponent {
  private translate = inject(TranslateService)
  languages: { code: string; name: string }[] = []

  async ngOnInit() {
    // Locales come from the project manifest, not a hardcoded array.
    this.languages = await betterI18n.getLanguages()
  }

  switchTo(lang: string) {
    // use() calls the loader, which hits the cache or the CDN.
    this.translate.use(lang)
  }
}
In a template

In a template

Die translate-Pipe und der Service lesen beide vom Loader, daher weiß keine Ihrer Komponenten etwas vom CDN.

src/app/app.component.htmlhtml
<!-- app.component.html -->
<h1>{{ 'home.title' | translate }}</h1>
<p>{{ 'home.greeting' | translate: { name: 'World' } }}</p>

<!-- ICU plurals authored in the Better i18n dashboard -->
<p>{{ 'cart.items' | translate: { count: 3 } }}</p>

<app-locale-switcher />
Capabilities

Features

Support für Standalone‑Components
Signals‑Support
Übersetzungs‑Pipes
i18n‑Direktiven
Injizierbare Services
Lazy‑Loading‑Module
Angular Universal SSR
AOT‑Compilation‑Support
Angular‑CLI‑Integration
Works with

Funktioniert mit beliebten Angular i18n-Bibliotheken

Better I18N ergänzt Ihre Angular i18n-Bibliothek — verwalten Sie Übersetzungen visuell, arbeiten Sie mit Übersetzern zusammen und deployen Sie über CDN.

Better I18N + @ngx-translate/core

Die meistverwendete Angular-Übersetzungsbibliothek. Laufzeit-Übersetzungen mit Pipes, Direktiven und Service-Injection.Better I18N exportiert im ngx-translate JSON-Format. Bearbeiten Sie Übersetzungen im Dashboard, synchronisieren Sie automatisch mit Ihrem Repository.

Better I18N + Angular i18n (built-in)

Angulars offizielles i18n-System mit AOT-Kompilierung, ICU-Ausdrücken und Build-Zeit-Übersetzungsextraktion.Export im Angular XLIFF-Format. Better I18N verwaltet den Übersetzungsworkflow, Angular CLI erstellt locale-spezifische Bundles.

Better I18N + Transloco

Moderne, leichtgewichtige i18n-Bibliothek für Angular mit Lazy Loading, umfangreichen Plugins und exzellenter TypeScript-Unterstützung.Synchronisieren Sie Übersetzungen im Transloco JSON-Format über Better I18Ns GitHub-Integration. Echtzeit-Updates mit CDN-Auslieferung.

Entdecken Sie weitere Leitfäden zu Frameworks

Get started

Better I18N vs. Alternativen

Kostenloser Tarif verfügbar. Keine Kreditkarte erforderlich.