i18n de Angular con Transloco: guía de configuración y traducción
De la instalación a producción: configure Transloco, gestione plurales con sintaxis ICU, añada respaldos regionales inteligentes y automatice las traducciones con IA.
Instalar Transloco
Transloco es la biblioteca de i18n de terceros más popular para Angular. Ofrece carga de traducciones durante la ejecución, compatibilidad con el formato de mensajes ICU, ámbitos de carga diferida y una API clara para plantillas con directivas estructurales y pipes.
npm install @jsverse/translocoConfigurar Transloco
Registre Transloco en la configuración de su aplicación. Debe proporcionar los idiomas disponibles, definir uno predeterminado y configurar el cargador de traducciones. Transloco admite tanto componentes independientes —Angular 14 o posterior— como patrones NgModule.
Componentes independientes (recomendado)
// 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ón 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 archivos de traducción
Cree un archivo JSON por idioma en src/assets/i18n/. Utilice claves anidadas para organizar las cadenas por funcionalidad. Transloco emplea el formato de mensajes ICU para plurales y 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}}"
}
}Utilizar traducciones en plantillas y servicios
Transloco ofrece tres formas de traducir en plantillas: la directiva estructural (*transloco), el pipe (| transloco) y el servicio (TranslocoService) para código TypeScript. La directiva estructural es la recomendada en la mayoría de los casos porque crea una sola suscripción y proporciona la función de traducción a todo el bloque de la plantilla.
Traducción en plantillas
<!-- 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ón mediante servicio (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 plurales con el formato de mensajes ICU
Transloco utiliza el formato de mensajes ICU para plurales y expresiones select. ICU gestiona automáticamente reglas de plural complejas —árabe, 6 formas; ruso, 3; japonés, 1— a partir de una sola cadena. Defina las reglas en los archivos de traducción y Transloco seleccionará la forma correcta durante la ejecución.
// 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>Respaldos regionales inteligentes con angular-locale-chain
De forma predeterminada, Transloco recurre a la configuración regional predeterminada cuando falta una clave. Un usuario pt-BR ve inglés en vez de traducciones pt-PT perfectamente válidas. angular-locale-chain lo corrige combinando en profundidad las traducciones de una cadena configurable antes de entregarlas a Transloco. Se rellenan todas las claves, sin huecos ni traducciones ausentes.
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 archivos recomendada
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.jsonAutomatizar traducciones
Cuando termine de configurar Transloco, traduzca los archivos regionales con IA. Desde el IDE, pida a su asistente que traduzca el JSON de origen o utilice la CLI de i18n Agent en su proceso de CI/CD para automatizar por completo la localización.
# 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,esAutomatizar la calidad de la traducción
Errores habituales
Las traducciones muestran las claves sin procesar
No se resuelven las claves con ámbito
Advertencias de consola en producción
Las traducciones parpadean al navegar entre rutas
Los usuarios regionales ven inglés en vez de la configuración principal
Pruebe i18n Agent ahora
Arrastre y suelte aquí su archivo de traducción
JSON, YAML, PO, XML, CSV, Markdown, Properties
o haga clic para seleccionar
Idiomas de destino
Respaldo de configuraciones regionales con angular-locale-chain
Cuando falta una clave en una configuración regional como pt-BR, TranslocoLoader de Angular pasa directamente a la predeterminada en vez de comprobar primero la principal 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',
});Consulte nuestra guía de respaldo de configuraciones regionales para ver todos los frameworks admitidos y las 75 cadenas integradas. Learn more →