Angular i18n dengan Transloco: Panduan Persediaan & Terjemahan
Daripada pemasangan hingga pengeluaran: konfigurasikan Transloco, kendalikan bentuk jamak dengan sintaks ICU, tambahkan sandaran bahasa pintar, dan automatikkan terjemahan dengan AI.
Pasang Transloco
Transloco ialah pustaka i18n pihak ketiga paling popular untuk Angular. Pustaka ini menyediakan pemuatan terjemahan semasa masa jalan, sokongan format mesej ICU, skop yang dimuatkan secara malas, dan API templat yang kemas dengan arahan struktur serta paip.
npm install @jsverse/translocoKonfigurasikan Transloco
Daftarkan Transloco dalam konfigurasi aplikasi. Anda perlu menyediakan bahasa yang tersedia, menetapkan bahasa lalai, dan mengkonfigurasi pemuat terjemahan. Transloco menyokong komponen kendiri (Angular 14+) dan corak NgModule.
Komponen Kendiri (Disyorkan)
// 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,
}),
],
};Corak 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 {}Cipta Fail Terjemahan
Cipta satu fail JSON bagi setiap bahasa dalam src/assets/i18n/. Gunakan kekunci tersarang untuk menyusun rentetan mengikut ciri. Transloco menggunakan format mesej ICU untuk bentuk jamak dan pemboleh ubah.
// 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}}"
}
}Gunakan Terjemahan dalam Templat dan Perkhidmatan
Transloco menyediakan tiga cara menterjemah dalam templat: arahan struktur (*transloco), paip (| transloco), dan perkhidmatan (TranslocoService) untuk kod TypeScript. Arahan struktur disyorkan untuk kebanyakan kes kerana mencipta satu langganan dan menyediakan fungsi terjemahan untuk seluruh blok templat.
Terjemahan Templat
<!-- 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>Terjemahan Perkhidmatan (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);
}
}Kendalikan Bentuk Jamak dengan Format Mesej ICU
Transloco menggunakan format mesej ICU untuk bentuk jamak dan ungkapan select. ICU mengendalikan peraturan bentuk jamak kompleks secara automatik—bahasa Arab (6 bentuk), Rusia (3 bentuk), Jepun (1 bentuk)—semuanya daripada satu rentetan mesej. Takrifkan peraturan bentuk jamak dalam fail terjemahan dan Transloco memilih bentuk yang betul semasa masa jalan.
// 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>Sandaran Bahasa Pintar dengan angular-locale-chain
Secara lalai, Transloco beralih kepada bahasa lalai apabila kekunci terjemahan hilang. Pengguna pt-BR melihat bahasa Inggeris, bukan terjemahan pt-PT yang masih sesuai. angular-locale-chain membaikinya dengan menggabungkan terjemahan secara mendalam daripada rantaian sandaran yang boleh dikonfigurasi sebelum menyerahkannya kepada Transloco. Setiap kekunci diisi—tiada jurang dan tiada terjemahan hilang.
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(),
},
],
};Struktur Fail yang Disyorkan
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.jsonAutomatikkan Terjemahan
Selepas persediaan Transloco selesai, terjemah fail bahasa dengan AI. Dalam IDE, minta pembantu AI menterjemah fail JSON sumber atau gunakan CLI i18n Agent dalam saluran CI/CD untuk penyetempatan automatik sepenuhnya.
# 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,esAutomatikkan Kualiti Terjemahan
Kesilapan Umum
Terjemahan Memaparkan Kekunci Mentah
Kekunci Berskop Tidak Ditemui
Amaran Konsol dalam Pengeluaran
Terjemahan Berkelip semasa Navigasi Laluan
Pengguna Serantau Melihat Bahasa Inggeris, Bukan Bahasa Induk
Cuba i18n Agent Sekarang
Lepaskan fail terjemahan anda di sini
JSON, YAML, PO, XML, CSV, Markdown, Properties
atau klik untuk semak imbas
Bahasa sasaran
Sandaran Bahasa dengan angular-locale-chain
Apabila kekunci terjemahan tiada dalam bahasa serantau seperti pt-BR, TranslocoLoader Angular terus beralih kepada bahasa lalai dan bukannya memeriksa bahasa induk pt terlebih dahulu.
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',
});Lihat Panduan Sandaran Bahasa kami untuk senarai lengkap rangka kerja yang disokong dan 75 rantaian terbina dalam. Learn more →