Internacionalització d’Angular amb Transloco: guia de configuració i traducció
De la instal·lació a producció: configuri Transloco, gestioni els plurals amb la sintaxi d’ICU, afegeixi cadenes intel·ligents de configuracions regionals alternatives i automatitzi les traduccions amb IA.
Instal·lar Transloco
Transloco és la biblioteca d’internacionalització de tercers més popular per a Angular. Ofereix càrrega de traduccions en temps d’execució, compatibilitat amb el format de missatges d’ICU, àmbits de càrrega diferida i una API de plantilles clara amb directives estructurals i pipes.
npm install @jsverse/translocoConfigurar Transloco
Registri Transloco a la configuració de l’aplicació. Cal indicar les llengües disponibles, establir-ne una de predeterminada i configurar el carregador de traduccions. Transloco és compatible tant amb els components autònoms (Angular 14+) com amb els patrons d’NgModule.
Components autònoms (opció recomanada)
// 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,
}),
],
};Patró d’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 {}Crear els fitxers de traducció
Creï un fitxer JSON per a cada llengua a src/assets/i18n/. Faci servir claus imbricades per organitzar les cadenes segons la funcionalitat. Transloco utilitza el format de missatges d’ICU per als plurals i les variables.
// 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}}"
}
}Utilitzar les traduccions en plantilles i serveis
Transloco ofereix tres maneres de traduir en plantilles: la directiva estructural (*transloco), la pipe (| transloco) i el servei (TranslocoService) per al codi TypeScript. La directiva estructural és l’opció recomanada en la majoria de casos perquè crea una única subscripció i proporciona la funció de traducció a tot el bloc de la plantilla.
Traducció en plantilles
<!-- 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>Traducció en serveis (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);
}
}Gestionar els plurals amb el format de missatges d’ICU
Transloco utilitza el format de missatges d’ICU per als plurals i les expressions de selecció. ICU gestiona automàticament regles de plural complexes —àrab (6 formes), rus (3 formes), japonès (1 forma)— a partir d’una única cadena de missatge. Defineixi les regles de plural als fitxers de traducció i Transloco seleccionarà la forma correcta en temps d’execució.
// 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>Cadenes intel·ligents de configuracions regionals alternatives amb angular-locale-chain
De manera predeterminada, Transloco recorre a la configuració regional predeterminada quan falta una clau de traducció. Per tant, un usuari de pt-BR veu el text en anglès en lloc de les traduccions perfectament vàlides de pt-PT. angular-locale-chain ho resol fusionant en profunditat les traduccions d’una cadena configurable de configuracions regionals alternatives abans de lliurar-les a Transloco. Totes les claus queden emplenades: no hi ha buits ni traduccions absents.
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(),
},
],
};Estructura de fitxers recomanada
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.jsonAutomatitzar les traduccions
Un cop completada la configuració de Transloco, tradueixi els fitxers de configuració regional amb IA. Demani a l’assistent d’IA de l’IDE que tradueixi el fitxer JSON d’origen o utilitzi la CLI d’i18n Agent a la canalització de CI/CD per automatitzar completament la localització.
# 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,esAutomatitzar la qualitat de les traduccions
Errors habituals
Les traduccions mostren les claus sense processar
Les claus dels àmbits no es resolen
Avisos a la consola en producció
Les traduccions parpellegen en navegar entre rutes
Els usuaris regionals veuen l’anglès en lloc de la configuració regional superior
Provar i18n Agent ara
Arrossegar aquí el fitxer de traducció
JSON, YAML, PO, XML, CSV, Markdown, Properties
o fer clic per explorar
Idiomes de destinació
Configuració regional alternativa amb angular-locale-chain
Quan falta una clau de traducció en una configuració regional com pt-BR, TranslocoLoader d’Angular passa directament a la configuració regional predeterminada en lloc de comprovar primer la configuració regional pare (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',
});Consulti la guia de configuracions regionals alternatives per veure la llista completa d’entorns de treball compatibles i les 75 cadenes integrades. Learn more →