Angular i18n dengan Transloco: Panduan Penyiapan & Terjemahan
Dari instalasi hingga produksi: konfigurasikan Transloco, tangani bentuk jamak dengan sintaks ICU, tambahkan fallback bahasa cerdas, dan otomatiskan penerjemahan dengan AI.
Instal Transloco
Transloco adalah library i18n pihak ketiga paling populer untuk Angular. Library ini menyediakan pemuatan terjemahan saat runtime, dukungan format pesan ICU, scope yang dimuat lambat, dan API templat rapi dengan directive struktural serta pipe.
npm install @jsverse/translocoKonfigurasikan Transloco
Daftarkan Transloco dalam konfigurasi aplikasi. Anda harus menyediakan bahasa yang tersedia, mengatur bahasa default, dan mengonfigurasi pemuat terjemahan. Transloco mendukung komponen standalone (Angular 14+) dan pola NgModule.
Komponen Standalone (Disarankan)
// 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,
}),
],
};Pola 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 {}Buat File Terjemahan
Buat satu file JSON per bahasa di src/assets/i18n/. Gunakan kunci bertingkat untuk menyusun string menurut fitur. Transloco menggunakan format pesan ICU untuk bentuk jamak dan variabel.
// 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 Layanan
Transloco menyediakan tiga cara menerjemahkan dalam templat: directive struktural (*transloco), pipe (| transloco), dan layanan (TranslocoService) untuk kode TypeScript. Directive struktural disarankan untuk sebagian besar kasus karena membuat satu langganan dan menyediakan fungsi terjemahan bagi 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 Layanan (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);
}
}Tangani Bentuk Jamak dengan Format Pesan ICU
Transloco menggunakan format pesan ICU untuk bentuk jamak dan ekspresi select. ICU menangani aturan bentuk jamak kompleks secara otomatis—bahasa Arab (6 bentuk), Rusia (3 bentuk), Jepang (1 bentuk)—semuanya dari satu string pesan. Tentukan aturan bentuk jamak dalam file terjemahan dan Transloco memilih bentuk yang benar saat runtime.
// 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>Fallback Bahasa Cerdas dengan angular-locale-chain
Secara default, Transloco beralih ke bahasa default saat kunci terjemahan hilang. Pengguna pt-BR melihat bahasa Inggris, bukan terjemahan pt-PT yang masih sesuai. angular-locale-chain memperbaikinya dengan menggabungkan terjemahan secara mendalam dari rantai fallback yang dapat dikonfigurasi sebelum menyerahkannya ke Transloco. Setiap kunci terisi—tanpa celah dan tanpa 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 File yang Disarankan
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.jsonOtomatiskan Penerjemahan
Setelah penyiapan Transloco selesai, terjemahkan file bahasa dengan AI. Di IDE, minta asisten AI menerjemahkan file JSON sumber atau gunakan CLI i18n Agent dalam pipeline CI/CD untuk lokalisasi yang sepenuhnya otomatis.
# 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,esOtomatiskan Kualitas Terjemahan
Kesalahan Umum
Terjemahan Menampilkan Kunci Mentah
Kunci Berscope Tidak Ditemukan
Peringatan Konsol di Produksi
Terjemahan Berkedip Saat Navigasi Rute
Pengguna Regional Melihat Bahasa Inggris, Bukan Bahasa Induk
Coba i18n Agent Sekarang
Lepaskan file terjemahan Anda di sini
JSON, YAML, PO, XML, CSV, Markdown, Properties
atau klik untuk menjelajahi
Bahasa target
Fallback Bahasa dengan angular-locale-chain
Saat kunci terjemahan tidak ada dalam bahasa regional seperti pt-BR, TranslocoLoader Angular langsung beralih ke bahasa default alih-alih 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 Fallback Bahasa kami untuk daftar lengkap framework yang didukung dan 75 rantai bawaan. Learn more →