Angular i18n med Transloco: Opsætnings- og oversættelsesguide
Fra installation til produktion: Konfigurer Transloco, håndter flertalsformer med ICU-syntaks, tilføj intelligente lokaleindstillinger og automatiser oversættelser med AI.
Installer Transloco
Transloco er det mest populære i18n-tredjepartsbibliotek til Angular. Det tilbyder indlæsning af oversættelser under kørsel, understøttelse af ICU-meddelelsesformatet, scopes med doven indlæsning og en enkel skabelon-API med både strukturelle direktiver og pipes.
npm install @jsverse/translocoKonfigurer Transloco
Registrer Transloco i din applikationskonfiguration. Du skal angive de tilgængelige sprog, vælge et standardsprog og konfigurere oversættelsesindlæseren. Transloco understøtter både selvstændige komponenter (Angular 14+) og NgModule-mønstre.
Selvstændige komponenter (anbefales)
// 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-mønster
// 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 {}Opret oversættelsesfiler
Opret én JSON-fil pr. sprog i src/assets/i18n/. Brug indlejrede nøgler til at organisere strenge efter funktion. Transloco bruger ICU-meddelelsesformatet til flertalsformer og variabler.
// 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}}"
}
}Brug oversættelser i skabeloner og tjenester
Transloco tilbyder tre måder at oversætte i skabeloner på: det strukturelle direktiv (*transloco), pipen (| transloco) og tjenesten (TranslocoService) til TypeScript-kode. Det strukturelle direktiv anbefales til de fleste anvendelser, fordi det opretter ét abonnement og stiller oversættelsesfunktionen til rådighed for hele skabelonblokken.
Skabelonoversættelse
<!-- 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>Tjenesteoversættelse (TypeScript)
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);
}
}Håndter flertalsformer med ICU-meddelelsesformatet
Transloco bruger ICU-meddelelsesformatet til flertalsformer og select-udtryk. ICU håndterer automatisk komplekse flertalsregler — arabisk (6 former), russisk (3 former), japansk (1 form) — alt sammen fra én meddelelsesstreng. Definer dine flertalsregler i oversættelsesfilerne, så vælger Transloco den korrekte form under kørsel.
// 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>Intelligente lokaleindstillinger med angular-locale-chain
Som standard falder Transloco tilbage til din standardlandestandard, når en oversættelsesnøgle mangler. En pt-BR-bruger ser engelsk i stedet for fuldt brugbare pt-PT-oversættelser. angular-locale-chain løser dette ved at dybdeflette oversættelser fra en konfigurerbar fallbackkæde, før de videregives til Transloco. Hver nøgle udfyldes — ingen huller og ingen manglende oversættelser.
npm install angular-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(),
},
],
};Anbefalet filstruktur
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.jsonAutomatiser oversættelser
Når din Transloco-opsætning er færdig, kan du oversætte dine landestandardfiler med AI. Bed din AI-assistent i dit IDE om at oversætte din JSON-kildefil eller brug i18n Agent CLI i din CI/CD-pipeline til fuldautomatisk lokalisering.
# 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,esAutomatiser oversættelseskvaliteten
Almindelige faldgruber
Oversættelser viser rå nøgler
Afgrænsede nøgler kan ikke fortolkes
Konsoladvarsler i produktion
Oversættelser blinker ved rutenavigation
Regionale brugere ser engelsk i stedet for den overordnede landestandard
Prøv i18n Agent nu
Slip din oversættelsesfil her
JSON, YAML, PO, XML, CSV, Markdown, Properties
eller klik for at vælge en fil
Målsprog
Lokalt fallback med angular-locale-chain
Når en oversættelsesnøgle mangler i en regional landestandard som pt-BR, går Angulars TranslocoLoader direkte til standardlandestandarden i stedet for først at kontrollere den overordnede landestandard pt.
npm install angular-locale-chainimport { LocaleChainLoader } from 'angular-locale-chain';
new LocaleChainLoader(innerLoader, {
fallbacks: {
'pt-BR': ['pt', 'en'],
'zh-Hant-HK': ['zh-Hant', 'zh', 'en'],
},
defaultLocale: 'en',
});Se vores guide til lokale fallbackmekanismer for at få den komplette liste over understøttede frameworks og 75 indbyggede kæder. Learn more →