Angular i18n z Transloco: przewodnik po konfiguracji i tłumaczeniu
Od instalacji po produkcję: skonfiguruj Transloco, obsłuż liczbę mnogą za pomocą składni ICU, dodaj inteligentne języki rezerwowe i zautomatyzuj tłumaczenia z AI.
Zainstaluj Transloco
Transloco to najpopularniejsza zewnętrzna biblioteka i18n dla Angulara. Zapewnia wczytywanie tłumaczeń podczas działania, obsługę formatu wiadomości ICU, leniwie wczytywane zakresy oraz przejrzyste API szablonów z dyrektywami strukturalnymi i potokami.
npm install @jsverse/translocoSkonfiguruj Transloco
Zarejestruj Transloco w konfiguracji aplikacji. Podaj dostępne języki, ustaw język domyślny i skonfiguruj moduł wczytujący tłumaczenia. Transloco obsługuje zarówno komponenty samodzielne (Angular 14+), jak i wzorce NgModule.
Komponenty samodzielne (zalecane)
// 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,
}),
],
};Wzorzec 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 {}Utwórz pliki tłumaczeń
Utwórz po jednym pliku JSON dla każdego języka w src/assets/i18n/. Użyj zagnieżdżonych kluczy, aby uporządkować teksty według funkcji. Transloco używa formatu wiadomości ICU do liczby mnogiej i zmiennych.
// 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}}"
}
}Używaj tłumaczeń w szablonach i usługach
Transloco udostępnia trzy sposoby tłumaczenia w szablonach: dyrektywę strukturalną (*transloco), potok (| transloco) oraz usługę (TranslocoService) dla kodu TypeScript. Dyrektywa strukturalna jest zalecana w większości przypadków, ponieważ tworzy jedną subskrypcję i udostępnia funkcję tłumaczącą całemu blokowi szablonu.
Tłumaczenie w szablonie
<!-- 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>Tłumaczenie w usłudze (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);
}
}Obsłuż liczbę mnogą za pomocą formatu wiadomości ICU
Transloco używa formatu wiadomości ICU do liczby mnogiej i wyrażeń select. ICU automatycznie obsługuje złożone reguły liczby mnogiej — arabski (6 form), rosyjski (3 formy), japoński (1 forma) — w jednym tekście wiadomości. Zdefiniuj reguły w plikach tłumaczeń, a Transloco podczas działania wybierze właściwą formę.
// 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>Inteligentne języki rezerwowe z angular-locale-chain
Domyślnie Transloco wraca do języka domyślnego, gdy brakuje klucza tłumaczenia. Użytkownik pt-BR widzi angielski zamiast w pełni poprawnych tłumaczeń pt-PT. angular-locale-chain rozwiązuje ten problem, głęboko scalając tłumaczenia z konfigurowalnego łańcucha rezerwowego przed przekazaniem ich do Transloco. Każdy klucz zostaje uzupełniony — bez luk i brakujących tłumaczeń.
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(),
},
],
};Zalecana struktura plików
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.jsonZautomatyzuj tłumaczenia
Po skonfigurowaniu Transloco tłumacz pliki językowe za pomocą AI. Poproś asystenta AI w środowisku programistycznym o przetłumaczenie źródłowego pliku JSON albo użyj CLI i18n Agent w pipeline CI/CD, aby w pełni zautomatyzować lokalizację.
# 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,esZautomatyzuj kontrolę jakości tłumaczeń
Typowe pułapki
Tłumaczenia wyświetlają surowe klucze
Klucze zakresowe nie są rozpoznawane
Ostrzeżenia konsoli w wersji produkcyjnej
Tłumaczenia migają podczas przechodzenia między trasami
Użytkownicy wariantów regionalnych widzą angielski zamiast języka nadrzędnego
Wypróbuj i18n Agent
Upuść tutaj plik tłumaczenia
JSON, YAML, PO, XML, CSV, Markdown, Properties
lub kliknij, aby go wybrać
Języki docelowe
Rezerwowe ustawienia regionalne z angular-locale-chain
Gdy brakuje klucza tłumaczenia w regionalnym wariancie języka, takim jak pt-BR, TranslocoLoader Angulara przechodzi bezpośrednio do języka domyślnego, zamiast najpierw sprawdzić język nadrzędny 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',
});Zobacz nasz przewodnik po rezerwowych ustawieniach regionalnych, aby poznać pełną listę obsługiwanych frameworków i 75 wbudowanych łańcuchów. Learn more →