Angular i18n met Transloco: configuratie- en vertaalhandleiding
Van installatie tot productie: configureer Transloco, verwerk meervoudsvormen met ICU-syntaxis, voeg slimme terugvaltalen toe en automatiseer vertalingen met AI.
Transloco installeren
Transloco is de populairste externe i18n-bibliotheek voor Angular. De bibliotheek biedt het laden van vertalingen tijdens runtime, ondersteuning voor ICU-berichtindelingen, uitgesteld geladen scopes en een heldere sjabloon-API met structurele directives en pipes.
npm install @jsverse/translocoTransloco configureren
Registreer Transloco in je applicatieconfiguratie. Geef de beschikbare talen op, stel een standaardtaal in en configureer de vertaallader. Transloco ondersteunt zowel zelfstandige componenten (Angular 14+) als NgModule-patronen.
Zelfstandige componenten (aanbevolen)
// 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-patroon
// 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 {}Vertaalbestanden maken
Maak in src/assets/i18n/ voor elke taal één JSON-bestand. Gebruik geneste sleutels om tekenreeksen per functie te ordenen. Transloco gebruikt de ICU-berichtindeling voor meervoudsvormen en variabelen.
// 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}}"
}
}Vertalingen in sjablonen en services gebruiken
Transloco biedt drie manieren om in sjablonen te vertalen: de structurele directive (*transloco), de pipe (| transloco) en de service (TranslocoService) voor TypeScript-code. Voor de meeste toepassingen wordt de structurele directive aanbevolen, omdat deze één abonnement maakt en de vertaalfunctie aan het hele sjabloonblok beschikbaar stelt.
Vertalen in sjablonen
<!-- 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>Vertalen in services (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);
}
}Meervoudsvormen verwerken met de ICU-berichtindeling
Transloco gebruikt de ICU-berichtindeling voor meervouds- en select-expressies. ICU verwerkt complexe meervoudsregels automatisch — Arabisch (6 vormen), Russisch (3 vormen), Japans (1 vorm) — vanuit één berichttekenreeks. Definieer de meervoudsregels in je vertaalbestanden, waarna Transloco tijdens runtime de juiste vorm selecteert.
// 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>Slimme terugvaltalen met angular-locale-chain
Transloco valt standaard terug op je standaardtaal als een vertaalsleutel ontbreekt. Een gebruiker met pt-BR ziet daardoor Engels in plaats van prima pt-PT-vertalingen. angular-locale-chain lost dit op door vertalingen uit een configureerbare terugvalketen diep samen te voegen voordat ze aan Transloco worden doorgegeven. Elke sleutel wordt ingevuld — zonder gaten of ontbrekende vertalingen.
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(),
},
],
};Aanbevolen bestandsstructuur
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.jsonVertalingen automatiseren
Nu Transloco is geconfigureerd, kun je je taalbestanden met AI vertalen. Vraag je AI-assistent in je IDE om je JSON-bronbestand te vertalen of gebruik de CLI van i18n Agent in je CI/CD-pipeline voor volledig geautomatiseerde lokalisatie.
# 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,esKwaliteitscontrole van vertalingen automatiseren
Veelvoorkomende valkuilen
Vertalingen tonen onbewerkte sleutels
Sleutels met een scope worden niet gevonden
Consolewaarschuwingen in productie
Vertalingen flitsen bij routenavigatie
Regionale gebruikers zien Engels in plaats van de bovenliggende taal
Probeer i18n Agent nu
Zet je vertaalbestand hier neer
JSON, YAML, PO, XML, CSV, Markdown, Properties
of klik om een bestand te selecteren
Doeltalen
Terugvaltalen met angular-locale-chain
Als een vertaalsleutel ontbreekt in een regionale taal zoals pt-BR, schakelt TranslocoLoader van Angular direct over naar de standaardtaal in plaats van eerst de bovenliggende taal pt te controleren.
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',
});Bekijk onze handleiding voor terugvaltalen voor de volledige lijst met ondersteunde frameworks en 75 ingebouwde ketens. Learn more →