Angular i18n uz Transloco: vodič za postavljanje i prevođenje
Od instalacije do produkcije: postavite Transloco, obradite množinu sintaksom ICU, dodajte pametne zamjenske lokalne postavke i automatizirajte prevođenje s pomoću AI-ja.
Instalirajte Transloco
Transloco je najpopularnija i18n biblioteka treće strane za Angular. Omogućuje učitavanje prijevoda tijekom izvođenja, podržava format poruka ICU, opsege s odgođenim učitavanjem te pregledan API za predloške sa strukturnim direktivama i cijevima.
npm install @jsverse/translocoKonfigurirajte Transloco
Registrirajte Transloco u konfiguraciji aplikacije. Navedite dostupne jezike, postavite zadani jezik i konfigurirajte učitavač prijevoda. Transloco podržava samostalne komponente (Angular 14+) i obrazac NgModule.
Samostalne komponente (preporuč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,
}),
],
};Obrazac 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 {}Izradite datoteke prijevoda
Izradite po jednu JSON datoteku za svaki jezik u src/assets/i18n/. Ugniježđenim ključevima organizirajte tekstove prema funkcionalnostima. Transloco za množinu i varijable upotrebljava format poruka 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}}"
}
}Upotrebljavajte prijevode u predlošcima i servisima
Transloco nudi tri načina prevođenja u predlošcima: strukturnu direktivu (*transloco), cijev (| transloco) i servis (TranslocoService) za TypeScript kôd. Strukturna direktiva preporučuje se u većini slučajeva jer stvara jednu pretplatu i funkciju za prevođenje čini dostupnom cijelom bloku predloška.
Prevođenje u predlošku
<!-- 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>Prevođenje u servisu (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);
}
}Obradite množinu formatom poruka ICU
Transloco upotrebljava format poruka ICU za množinu i izraze select. ICU automatski obrađuje složena pravila množine — arapski (6 oblika), ruski (3 oblika), japanski (1 oblik) — iz samo jednog niza poruke. Pravila množine definirajte u datotekama prijevoda, a Transloco će tijekom izvođenja odabrati ispravan oblik.
// 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>Pametne zamjenske lokalne postavke uz angular-locale-chain
Kada nedostaje ključ prijevoda, Transloco se prema zadanim postavkama vraća na Vašu zadanu lokalnu postavku. Korisnik s postavkom pt-BR zato vidi engleski umjesto valjanih prijevoda za pt-PT. angular-locale-chain to rješava dubinskim spajanjem prijevoda iz podesivog zamjenskog lanca prije predaje alatu Transloco. Svaki je ključ popunjen — bez praznina i nedostajućih prijevoda.
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(),
},
],
};Preporučena struktura datoteka
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.jsonAutomatizirajte prevođenje
Nakon što dovršite postavljanje alata Transloco, prevedite datoteke lokalnih postavki s pomoću AI-ja. U svojem IDE-u zatražite od AI pomoćnika da prevede izvornu JSON datoteku ili upotrijebite i18n Agent CLI u svojem CI/CD pipelineu za potpuno automatiziranu lokalizaciju.
# 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,esAutomatizirajte provjeru kvalitete prijevoda
Uobičajene zamke
Prijevodi prikazuju neobrađene ključeve
Ključevi opsega ne razrješavaju se
Upozorenja u konzoli u produkciji
Prijevodi nakratko zatrepere pri navigaciji rutama
Regionalni korisnici vide engleski umjesto nadređene lokalne postavke
Isprobajte i18n Agent odmah
Povucite datoteku za prijevod ovdje
JSON, YAML, PO, XML, CSV, Markdown, Properties
ili kliknite za odabir
Ciljni jezici
Zamjenske lokalne postavke uz angular-locale-chain
Kada u regionalnoj lokalnoj postavci poput pt-BR nedostaje ključ prijevoda, Angularov TranslocoLoader odmah prelazi na zadanu postavku umjesto da prvo provjeri nadređenu postavku 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',
});U našem vodiču za zamjenske lokalne postavke pogledajte cjelovit popis podržanih razvojnih okvira i 75 ugrađenih lanaca. Learn more →