Skip to main content

Angular i18n med Transloco: guide för konfiguration och översättning

Från installation till produktion: konfigurera Transloco, hantera pluralformer med ICU-syntax, lägg till smarta språkreservkedjor och automatisera översättningar med AI.

1

Installera Transloco

Transloco är det mest populära i18n-biblioteket från tredje part för Angular. Det erbjuder inläsning av översättningar vid körning, stöd för ICU-meddelandeformat, scope med lazy loading och ett tydligt mall-API med både strukturella direktiv och pipes.

Varför välja Transloco framför Angulars inbyggda i18n? Angulars inbyggda lösning kräver ett separat bygge per språk och stöder inte språkbyte vid körning. Transloco läser in översättningar vid körning, så du kan leverera ett enda bygge och byta språk direkt.
Terminal
npm install @jsverse/transloco
2

Konfigurera Transloco

Registrera Transloco i applikationskonfigurationen. Du behöver ange de tillgängliga språken, välja ett standardspråk och konfigurera översättningsinläsaren. Transloco stöder både fristående komponenter (Angular 14+) och NgModule-mönster.

Fristående komponenter (rekommenderas)

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,
    }),
  ],
};

NgModule-mönster

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 {}
Om översättningar visas som obearbetade nycklar, till exempel "nav.home", i stället för "Hem", beror det oftast på att TranslocoHttpLoader inte hittar dina JSON-filer. Kontrollera att översättningsfilerna finns i src/assets/i18n/ och att assets-listan i angular.json innehåller den sökvägen.

Skapa översättningsfiler

Skapa en JSON-fil per språk i src/assets/i18n/. Använd nästlade nycklar för att ordna strängarna efter funktion. Transloco använder ICU-meddelandeformatet för pluralformer och variabler.

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

Använd översättningar i mallar och tjänster

Transloco erbjuder tre sätt att översätta i mallar: det strukturella direktivet (*transloco), pipen (| transloco) och tjänsten (TranslocoService) för TypeScript-kod. Det strukturella direktivet rekommenderas i de flesta fall eftersom det skapar en enda prenumeration och gör översättningsfunktionen tillgänglig i hela mallblocket.

Översättning i mallar

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>
Använd parametern read i det strukturella direktivet för att avgränsa översättningarna till en nästlad nyckel. Då slipper du upprepa prefixet i varje t()-anrop och mallarna blir tydligare.

Översättning i tjänster (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);
  }
}
Pipen transloco skapar en ny prenumeration för varje användning. I mallar med många översatta strängar bör du använda det strukturella direktivet *transloco, som skapar en enda prenumeration för hela blocket.
4

Hantera pluralformer med ICU-meddelandeformat

Transloco använder ICU-meddelandeformatet för pluralformer och select-uttryck. ICU hanterar automatiskt komplexa pluralregler – arabiska (6 former), ryska (3 former), japanska (1 form) – i en enda meddelandesträng. Definiera pluralreglerna i översättningsfilerna så väljer Transloco rätt form vid körning.

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>
Implementera aldrig egen plurallogik i komponenterna. Språk har mycket olika pluralregler som redan hanteras av ICU-specifikationen. Låt Transloco och ICU göra jobbet – din uppgift är att definiera rätt pluralformer i översättningsfilerna.

Smarta språkreservkedjor med angular-locale-chain

Som standard använder Transloco ditt standardspråk när en översättningsnyckel saknas. En användare med pt-BR ser då engelska trots att det finns en bra översättning för pt-PT. angular-locale-chain löser detta genom att djupsammanfoga översättningar från en konfigurerbar reservkedja innan de skickas till Transloco. Varje nyckel fylls i – utan luckor eller saknade översättningar.

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 är ett bibliotek med öppen källkod som löser Transloco-felet #574 – en reservöversättning per nyckel saknas när en översättningsfil bara är delvis komplett.

Rekommenderad filstruktur

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

Automatisera översättningar

När Transloco-konfigurationen är klar kan du översätta språkfilerna med AI. Be din AI-assistent i IDE:n att översätta JSON-källfilen eller använd i18n Agent CLI i din CI/CD-pipeline för helt automatiserad lokalisering.

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
Översätt stegvis – när du lägger till nya nycklar i källfilen översätter du bara skillnaden i stället för att generera om alla filer. Då bevaras översättningar som har granskats av människor och du undviker onödiga ändringar.

Automatisera kvalitetskontrollen av översättningar

Upptäck saknade nycklar och trasiga platshållare med i18n-validate innan de når produktion. Testa gränssnittet med pseudoöversättningar via i18n-pseudo innan de riktiga översättningarna är klara.

Vanliga fallgropar

Översättningar visas som obearbetade nycklar

TranslocoHttpLoader hittar inte dina JSON-filer. Kontrollera att filerna finns i src/assets/i18n/, att assets-listan i angular.json innehåller den sökvägen och att filnamnen exakt motsvarar konfigurationen för availableLangs (skiftlägeskänsligt).

Avgränsade nycklar kan inte matchas

När du använder Transloco-scope måste översättningsfilerna finnas i assets/i18n/[scope]/[lang].json, inte i i18n-rotmappen. Kontrollera också att scopet har registrerats i komponentens providers-lista med TRANSLOCO_SCOPE.

Konsolvarningar i produktion

Ange prodMode: true i Transloco-konfigurationen för produktionsbyggen. Annars loggar Transloco varningar om saknade nycklar i konsolen. Inställningen inaktiverar också kontroller för utvecklingsmiljön som medför extra belastning.

Översättningar blinkar till vid ruttnavigering

Rutter med lazy loading hämtar översättningar efter att komponenten har renderats, vilket gör att oöversatta nycklar visas en kort stund. Använd Translocos inbyggda TRANSLOCO_LOADING_TEMPLATE för att visa ett laddningstillstånd eller läs in översättningarna i förväg i en route guard.

Regionala användare ser engelska i stället för det överordnade språket

Translocos inbyggda reservlösning aktiveras bara när en hel språkfil saknas, inte när enskilda nycklar saknas. Använd angular-locale-chain för att djupsammanfoga översättningar från relaterade språkvarianter (exempelvis använder pt-BR först pt-PT, sedan pt och därefter engelska som reserv).

Prova i18n Agent nu

Släpp din översättningsfil här

JSON, YAML, PO, XML, CSV, Markdown, Properties

eller klicka för att välja en fil

Målspråk

Ingen registrering krävsPrisuppskattning direkt

Språkreserv med angular-locale-chain

När en översättningsnyckel saknas i en regional språkvariant som pt-BR går Angulars TranslocoLoader direkt till standardspråket i stället för att först kontrollera det överordnade språket 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',
});

I vår guide om språkreserver hittar du hela listan över ramverk som stöds och 75 inbyggda kedjor. Learn more →

Vanliga frågor om Angular i18n