Skip to main content

Angular i18n cu Transloco: ghid de configurare și traducere

De la instalare la producție: configurați Transloco, gestionați pluralurile cu sintaxa ICU, adăugați mecanisme inteligente de rezervă pentru setările regionale și automatizați traducerile cu IA.

1

Instalați Transloco

Transloco este cea mai populară bibliotecă i18n terță pentru Angular. Aceasta oferă încărcarea traducerilor în timpul execuției, compatibilitate cu formatul mesajelor ICU, domenii încărcate la cerere și un API intuitiv pentru șabloane, cu directive structurale și pipe-uri.

De ce să alegeți Transloco în locul soluției i18n integrate în Angular? Soluția integrată în Angular necesită o versiune compilată separată pentru fiecare limbă și nu permite schimbarea limbii în timpul execuției. Transloco încarcă traducerile în timpul execuției, astfel încât distribuiți o singură versiune compilată și puteți schimba imediat limba.
Terminal
npm install @jsverse/transloco
2

Configurați Transloco

Înregistrați Transloco în configurația aplicației. Trebuie să specificați limbile disponibile, să stabiliți o limbă implicită și să configurați modulul de încărcare a traducerilor. Transloco acceptă atât componente independente (Angular 14+), cât și modele bazate pe NgModule.

Componente independente (recomandate)

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

Model bazat pe 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 {}
Dacă traducerile apar sub forma unor chei neprelucrate, precum „nav.home”, în loc de „Acasă”, cauza cea mai frecventă este faptul că TranslocoHttpLoader nu găsește fișierele JSON. Verificați dacă fișierele de traducere se află în src/assets/i18n/ și dacă matricea assets din angular.json include această cale.

Creați fișierele de traducere

Creați câte un fișier JSON pentru fiecare limbă în src/assets/i18n/. Folosiți chei imbricate pentru a organiza șirurile de caractere în funcție de funcționalitate. Transloco utilizează formatul mesajelor ICU pentru pluraluri și variabile.

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

Folosiți traducerile în șabloane și servicii

Transloco oferă trei modalități de traducere în șabloane: directiva structurală (*transloco), pipe-ul (| transloco) și serviciul (TranslocoService) pentru codul TypeScript. Directiva structurală este recomandată în majoritatea cazurilor, deoarece creează un singur abonament și pune funcția de traducere la dispoziția întregului bloc al șablonului.

Traducerea în șabloane

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>
Folosiți parametrul read al directivei structurale pentru a restrânge traducerile la o cheie imbricată. Astfel evitați repetarea prefixului în fiecare apel t() și obțineți șabloane mai clare.

Traducerea prin serviciu (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);
  }
}
Pipe-ul transloco creează un abonament nou la fiecare utilizare. În șabloanele cu multe șiruri traduse, preferați directiva structurală *transloco, care creează un singur abonament pentru întregul bloc.
4

Gestionați pluralurile cu formatul mesajelor ICU

Transloco folosește formatul mesajelor ICU pentru pluraluri și expresii select. ICU gestionează automat reguli complexe de plural — arabă (6 forme), rusă (3 forme), japoneză (1 formă) — toate dintr-un singur șir de mesaj. Definiți regulile de plural în fișierele de traducere, iar Transloco selectează forma corectă în timpul execuției.

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>
Nu implementați niciodată logică de plural personalizată în componente. Regulile de plural diferă radical între limbi, iar specificația ICU le gestionează deja. Lăsați Transloco și ICU să se ocupe de acestea — responsabilitatea dumneavoastră este să definiți formele corecte de plural în fișierele de traducere.

Mecanisme inteligente de rezervă pentru setările regionale cu angular-locale-chain

În mod implicit, Transloco recurge la setarea regională implicită atunci când lipsește o cheie de traducere. Un utilizator pt-BR vede textul în engleză, deși există traduceri pt-PT perfect adecvate. angular-locale-chain rezolvă problema prin îmbinarea profundă a traducerilor dintr-un lanț de rezervă configurabil înainte de a le transmite către Transloco. Fiecare cheie este completată — fără goluri și fără traduceri lipsă.

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 este o bibliotecă cu sursă deschisă care rezolvă eroarea Transloco nr. 574 — lipsa unui mecanism de rezervă pentru fiecare cheie atunci când un fișier de traducere este complet doar parțial.

Structura recomandată a fișierelor

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

Automatizați traducerile

După finalizarea configurării Transloco, traduceți fișierele de localizare cu ajutorul IA. În mediul IDE, solicitați-i asistentului IA să traducă fișierul JSON sursă sau folosiți interfața CLI i18n Agent în fluxul CI/CD pentru o localizare complet automatizată.

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
Traduceți incremental — când adăugați chei noi în fișierul-sursă, traduceți numai diferențele, în loc să regenerați toate fișierele. Astfel păstrați traducerile verificate de o persoană și evitați modificările inutile.

Automatizați controlul calității traducerilor

Identificați cheile lipsă și substituenții nevalizi înainte de lansare cu i18n-validate. Testați interfața folosind pseudotraduceri cu i18n-pseudo înainte de a primi traducerile reale.

Capcane frecvente

Traducerile afișează cheile neprelucrate

TranslocoHttpLoader nu găsește fișierele JSON. Verificați dacă fișierele se află în src/assets/i18n/, dacă matricea assets din angular.json include această cale și dacă numele fișierelor corespund exact configurației availableLangs (cu diferențiere între majuscule și minuscule).

Cheile cu domeniu nu sunt rezolvate

Când folosiți domenii Transloco, fișierele de traducere trebuie să se afle în assets/i18n/[scope]/[lang].json, nu în rădăcina dosarului i18n. De asemenea, asigurați-vă că domeniul este înregistrat în matricea providers a componentei folosind TRANSLOCO_SCOPE.

Avertismente în consolă în mediul de producție

Setați prodMode: true în configurația Transloco pentru versiunile destinate producției. În caz contrar, Transloco înregistrează în consolă avertismente privind cheile lipsă. Această opțiune dezactivează și verificările din timpul dezvoltării care generează costuri suplimentare.

Traducerile apar cu întârziere la navigarea între trasee

Traseele încărcate la cerere preiau traducerile după randarea componentei, ceea ce produce o afișare scurtă a cheilor netraduse. Folosiți TRANSLOCO_LOADING_TEMPLATE, integrat în Transloco, pentru a afișa o stare de încărcare sau preîncărcați traducerile într-un mecanism de protecție a traseului.

Utilizatorii regionali văd textul în engleză în locul setării regionale părinte

Mecanismul de rezervă integrat în Transloco se activează numai când lipsește un fișier întreg al unei setări regionale, nu și pentru chei individuale lipsă. Folosiți angular-locale-chain pentru a îmbina profund traducerile din setări regionale înrudite (de exemplu, pt-BR recurge la pt-PT, apoi la pt și, în final, la engleză).

Încercați acum i18n Agent

Plasați aici fișierul de traducere

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

sau faceți clic pentru a-l selecta

Limbi țintă

Nu este necesară înregistrareaEstimare instantanee

Mecanism de rezervă pentru setările regionale cu angular-locale-chain

Când lipsește o cheie de traducere dintr-o setare regională precum pt-BR, TranslocoLoader din Angular trece direct la setarea regională implicită, fără a verifica mai întâi setarea regională părinte 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',
});

Consultați Ghidul mecanismelor de rezervă pentru setările regionale pentru lista completă a cadrelor acceptate și a celor 75 de lanțuri integrate. Learn more →

Întrebări frecvente despre Angular i18n