Angular i18n med Transloco: guide för konfiguration och översättning
Från installation till produktion: konfigurera Transloco, hantera pluralformer med ICU-syntax, lägg till smarta språkreservkedjor och automatisera översättningar med AI.
Installera Transloco
Transloco är det mest populära i18n-biblioteket från tredje part för Angular. Det erbjuder inläsning av översättningar vid körning, stöd för ICU-meddelandeformat, scope med lazy loading och ett tydligt mall-API med både strukturella direktiv och pipes.
npm install @jsverse/translocoKonfigurera Transloco
Registrera Transloco i applikationskonfigurationen. Du behöver ange de tillgängliga språken, välja ett standardspråk och konfigurera översättningsinläsaren. Transloco stöder både fristående komponenter (Angular 14+) och NgModule-mönster.
Fristående komponenter (rekommenderas)
// 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 {}Skapa översättningsfiler
Skapa en JSON-fil per språk i src/assets/i18n/. Använd nästlade nycklar för att ordna strängarna efter funktion. Transloco använder ICU-meddelandeformatet för pluralformer och 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}}"
}
}Använd översättningar i mallar och tjänster
Transloco erbjuder tre sätt att översätta i mallar: det strukturella direktivet (*transloco), pipen (| transloco) och tjänsten (TranslocoService) för TypeScript-kod. Det strukturella direktivet rekommenderas i de flesta fall eftersom det skapar en enda prenumeration och gör översättningsfunktionen tillgänglig i hela mallblocket.
Översättning i mallar
<!-- 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>Översättning i tjänster (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);
}
}Hantera pluralformer med ICU-meddelandeformat
Transloco använder ICU-meddelandeformatet för pluralformer och select-uttryck. ICU hanterar automatiskt komplexa pluralregler – arabiska (6 former), ryska (3 former), japanska (1 form) – i en enda meddelandesträng. Definiera pluralreglerna i översättningsfilerna så väljer Transloco rätt form vid körning.
// 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>Smarta språkreservkedjor med angular-locale-chain
Som standard använder Transloco ditt standardspråk när en översättningsnyckel saknas. En användare med pt-BR ser då engelska trots att det finns en bra översättning för pt-PT. angular-locale-chain löser detta genom att djupsammanfoga översättningar från en konfigurerbar reservkedja innan de skickas till Transloco. Varje nyckel fylls i – utan luckor eller saknade översättningar.
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(),
},
],
};Rekommenderad 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.jsonAutomatisera översättningar
När Transloco-konfigurationen är klar kan du översätta språkfilerna med AI. Be din AI-assistent i IDE:n att översätta JSON-källfilen eller använd i18n Agent CLI i din CI/CD-pipeline för helt automatiserad 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,esAutomatisera kvalitetskontrollen av översättningar
Vanliga fallgropar
Översättningar visas som obearbetade nycklar
Avgränsade nycklar kan inte matchas
Konsolvarningar i produktion
Översättningar blinkar till vid ruttnavigering
Regionala användare ser engelska i stället för det överordnade språket
Prova i18n Agent nu
Släpp din översättningsfil här
JSON, YAML, PO, XML, CSV, Markdown, Properties
eller klicka för att välja en fil
Målspråk
Språkreserv med angular-locale-chain
När en översättningsnyckel saknas i en regional språkvariant som pt-BR går Angulars TranslocoLoader direkt till standardspråket i stället för att först kontrollera det överordnade språket 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',
});I vår guide om språkreserver hittar du hela listan över ramverk som stöds och 75 inbyggda kedjor. Learn more →