Skip to main content

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.

1

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.

¿Por qué Transloco en vez de la i18n integrada de Angular? La solución integrada exige una compilación independiente por idioma y no admite cambiarlo durante la ejecución. Transloco carga las traducciones en ese momento, por lo que publica una sola compilación y cambia de idioma al instante.
Terminal
npm install @jsverse/transloco
2

Configurar 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
// 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
// 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 {}
Si las traducciones aparecen como claves sin procesar, por ejemplo «nav.home» en vez de «Home», la causa más habitual es que TranslocoHttpLoader no encuentre los archivos JSON. Compruebe que estén en src/assets/i18n/ y que la matriz assets de angular.json incluya esa ruta.

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/*.json
// 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}}"
  }
}
3

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

component.html
<!-- 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>
Utilice el parámetro read de la directiva estructural para limitar las traducciones a una clave anidada. Así evita repetir el prefijo en cada llamada t() y crea plantillas más limpias.

Traducción mediante servicio (TypeScript)

notification.component.ts
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);
  }
}
El pipe transloco crea una suscripción nueva con cada uso. En plantillas con muchas cadenas traducidas, prefiera la directiva estructural *transloco, que crea una sola para todo el bloque.
4

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.

ICU plural syntax
// 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>
Nunca implemente lógica de plurales personalizada en los componentes. Los idiomas tienen reglas muy distintas que la especificación ICU ya gestiona. Deje que Transloco e ICU hagan el trabajo; usted debe definir las formas correctas en los archivos de traducción.

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.

Terminal
npm install angular-locale-chain
app.config.ts (with 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(),
    },
  ],
};
angular-locale-chain es una biblioteca de código abierto que resuelve el error n.º 574 de Transloco: no existe respaldo por clave cuando un archivo de traducción solo está parcialmente completo.

Estructura de archivos recomendada

Project Structure
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.json

Automatizar 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.

Terminal
# 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,es
Traduzca de forma incremental: cuando añada claves nuevas al archivo de origen, traduzca solo las diferencias en vez de volver a generar todo. Así conserva las traducciones revisadas por personas y evita cambios innecesarios.

Automatizar la calidad de la traducción

Detecte las claves ausentes y los marcadores rotos antes de publicar con i18n-validate. Pruebe la interfaz con pseudotraducciones mediante i18n-pseudo antes de recibir las reales.

Errores habituales

Las traducciones muestran las claves sin procesar

TranslocoHttpLoader no encuentra sus archivos JSON. Compruebe que estén en src/assets/i18n/, que la matriz assets de angular.json incluya esa ruta y que los nombres coincidan exactamente —incluidas mayúsculas y minúsculas— con la configuración availableLangs.

No se resuelven las claves con ámbito

Al utilizar ámbitos de Transloco, los archivos deben estar en assets/i18n/[scope]/[lang].json, no en la carpeta i18n raíz. Asegúrese también de registrar el ámbito en la matriz providers del componente mediante TRANSLOCO_SCOPE.

Advertencias de consola en producción

Configure prodMode: true en Transloco para las compilaciones de producción. Sin ello, Transloco registra advertencias de claves ausentes en la consola. También desactiva comprobaciones de desarrollo que añaden sobrecarga.

Las traducciones parpadean al navegar entre rutas

Las rutas de carga diferida obtienen las traducciones después de renderizar el componente, lo que muestra brevemente claves sin traducir. Utilice TRANSLOCO_LOADING_TEMPLATE integrado en Transloco para mostrar un estado de carga o precargue las traducciones en un guard de ruta.

Los usuarios regionales ven inglés en vez de la configuración principal

El respaldo integrado de Transloco solo se activa cuando falta un archivo regional completo, no claves individuales. Utilice angular-locale-chain para combinar en profundidad traducciones relacionadas —por ejemplo, pt-BR recurre a pt-PT, después pt y por último inglés—.

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

No es necesario registrarsePresupuesto al instante

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.

Terminal
npm install angular-locale-chain
Configuration
import { 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 →

Preguntas frecuentes sobre i18n en Angular