i18n di Angular con Transloco: guida alla configurazione e alla traduzione
Dall'installazione alla produzione: configuri Transloco, gestisca i plurali con la sintassi ICU, aggiunga fallback intelligenti tra lingue e automatizzi le traduzioni con l'IA.
Installare Transloco
Transloco è la biblioteca i18n di terze parti più diffusa per Angular. Offre caricamento delle traduzioni durante l'esecuzione, supporto del formato dei messaggi ICU, ambiti a caricamento differito e un'API pulita per i modelli, con direttive strutturali e pipe.
npm install @jsverse/translocoConfigurare Transloco
Registri Transloco nella configurazione dell'applicazione. Deve indicare le lingue disponibili, impostare una lingua predefinita e configurare il caricatore delle traduzioni. Transloco supporta sia i componenti standalone (Angular 14 e versioni successive) sia i pattern NgModule.
Componenti standalone (consigliati)
// 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,
}),
],
};Pattern NgModule
// 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 {}Creare i file di traduzione
Crei un file JSON per ogni lingua in src/assets/i18n/. Usi chiavi annidate per organizzare le stringhe per funzionalità. Transloco usa il formato dei messaggi ICU per plurali e variabili.
// 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}}"
}
}Usare le traduzioni nei modelli e nei servizi
Transloco offre tre modi per tradurre nei modelli: la direttiva strutturale (*transloco), la pipe (| transloco) e il servizio (TranslocoService) per il codice TypeScript. La direttiva strutturale è consigliata nella maggior parte dei casi, perché crea un'unica sottoscrizione e rende disponibile la funzione di traduzione all'intero blocco del modello.
Traduzione nei modelli
<!-- 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>Traduzione nei servizi (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);
}
}Gestire i plurali con il formato dei messaggi ICU
Transloco usa il formato dei messaggi ICU per i plurali e le espressioni select. ICU gestisce automaticamente regole plurali complesse: arabo (6 forme), russo (3 forme), giapponese (1 forma), il tutto da un'unica stringa. Definisca le regole del plurale nei file di traduzione e Transloco selezionerà la forma corretta durante l'esecuzione.
// 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>Fallback intelligenti tra lingue con angular-locale-chain
Per impostazione predefinita, quando manca una chiave di traduzione Transloco passa alla lingua predefinita. Un utente pt-BR vede l'inglese anziché traduzioni pt-PT perfettamente valide. angular-locale-chain risolve il problema combinando ricorsivamente le traduzioni di una catena di fallback configurabile prima di passarle a Transloco. Ogni chiave viene completata: nessuna lacuna o traduzione mancante.
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(),
},
],
};Struttura dei file consigliata
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.jsonAutomatizzare le traduzioni
Dopo aver completato la configurazione di Transloco, traduca i file di lingua con l'IA. Nell'IDE, chieda all'assistente IA di tradurre il file JSON di origine oppure usi la CLI di i18n Agent nella pipeline CI/CD per una localizzazione completamente automatizzata.
# 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,esAutomatizzare la qualità
Problemi comuni
Le traduzioni mostrano le chiavi grezze
Le chiavi con ambito non vengono risolte
Avvisi nella console in produzione
Le traduzioni compaiono brevemente durante la navigazione tra route
Gli utenti regionali vedono l'inglese anziché la lingua principale
Provi subito i18n Agent
Trascinare qui il file di traduzione
JSON, YAML, PO, XML, CSV, Markdown, Properties
oppure fare clic per selezionarlo
Lingue di destinazione
Fallback della lingua con angular-locale-chain
Quando manca una chiave di traduzione in una lingua regionale come pt-BR, TranslocoLoader di Angular passa direttamente alla lingua predefinita anziché controllare prima la lingua principale 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',
});Consultare la Guida al fallback delle lingue per l'elenco completo dei framework supportati e delle 75 catene integrate. Learn more →