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.
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.
npm install @jsverse/translocoConfiguraț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
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
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 {}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/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}}"
}
}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
<!-- 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>Traducerea prin serviciu (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);
}
}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.
// 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>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ă.
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(),
},
],
};Structura recomandată a fișierelor
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.jsonAutomatizaț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ă.
# 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,esAutomatizați controlul calității traducerilor
Capcane frecvente
Traducerile afișează cheile neprelucrate
Cheile cu domeniu nu sunt rezolvate
Avertismente în consolă în mediul de producție
Traducerile apar cu întârziere la navigarea între trasee
Utilizatorii regionali văd textul în engleză în locul setării regionale părinte
Î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ă
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.
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',
});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 →