Angular i18n s Transloco: Nastavení a průvodce překladem
Od instalace po produkci: nakonfigurujte Transloco, řešte plurály pomocí ICU syntaxe, přidejte chytré fallbacky locale a automatizujte překlady s AI.
Nainstalujte Transloco
Transloco je nejoblíbenější i18n knihovna třetí strany pro Angular. Nabízí načítání překladů za běhu, podporu formátu zpráv ICU, lazy-loadované scopes a čisté šablonové API se strukturálními direktivami i pipes.
npm install @jsverse/translocoNakonfigurujte Transloco
Zaregistrujte Transloco v konfiguraci aplikace. Je potřeba zadat dostupné jazyky, nastavit výchozí jazyk a nakonfigurovat loader překladů. Transloco podporuje jak standalone komponenty (Angular 14+), tak vzor NgModule.
Standalone komponenty (doporučeno)
// 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,
}),
],
};Vzor 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 {}Vytvořte překladové soubory
Vytvořte jeden JSON soubor pro každý jazyk v src/assets/i18n/. Používejte vnořené klíče pro organizaci řetězců podle funkcionality. Transloco používá pro plurály a proměnné formát zpráv ICU.
// 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}}"
}
}Používejte překlady v šablonách a službách
Transloco nabízí tři způsoby překladu v šablonách: strukturální direktivu (*transloco), pipe (| transloco) a službu (TranslocoService) pro TypeScript kód. Pro většinu případů použití se doporučuje strukturální direktiva, protože vytvoří jedinou subscription a poskytne překladovou funkci celému bloku šablony.
Překlad v šabloně
<!-- 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>Překlad ve službě (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);
}
}Řešte plurály pomocí ICU message formátu
Transloco používá formát zpráv ICU pro plurály a select výrazy. ICU automaticky zpracuje složitá pravidla plurálů — arabština (6 forem), ruština (3 formy), japonština (1 forma) — a to vše z jediného message řetězce. Definujte plural pravidla v překladových souborech a Transloco za běhu vybere správnou formu.
// 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>Chytré fallbacky locale s angular-locale-chain
Ve výchozím nastavení Transloco při chybějícím klíči přepne na Vaše výchozí locale. Uživatel pt-BR tak uvidí angličtinu místo naprosto použitelných překladů pt-PT. angular-locale-chain to řeší tím, že před předáním do Transloco provede deep-merge překladů z konfigurovatelného fallback řetězce. Každý klíč se doplní — žádné mezery, žádné chybějící překlady.
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(),
},
],
};Doporučená struktura souborů
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.jsonAutomatizujte překlady
Jakmile máte Transloco nastavené, přeložte své locale soubory pomocí AI. V IDE požádejte svého AI asistenta o překlad zdrojového JSON souboru, nebo použijte i18n Agent CLI ve Vašem CI/CD pipeline pro plně automatizovanou lokalizaci.
# 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,esAutomatizujte kvalitu překladů
Běžné nástrahy
Překlady se zobrazují jako surové klíče
Scoped klíče se nevyhodnocují
Varování v konzoli v produkci
Překlady při navigaci mezi routami probliknou
Regionální uživatelé vidí angličtinu místo nadřazeného locale
Vyzkoušejte i18n Agent nyní
Sem přetáhněte svůj překladový soubor
JSON, YAML, PO, XML, CSV, Markdown, Properties
nebo klikněte a vyberte soubor
Cílové jazyky
Fallback lokalizací s angular-locale-chain
Když v regionální lokalizaci, jako je pt-BR, chybí překladový klíč, Angular TranslocoLoader skočí rovnou na výchozí lokalizaci, místo aby nejdřív zkontroloval nadřazenou lokalizaci 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',
});Podívejte se do našeho průvodce Locale Fallback, kde najdete úplný seznam podporovaných frameworků a 75 vestavěných řetězců. Learn more →