Skip to main content

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.

1

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.

Mengapa Transloco, bukan i18n terbina dalam Angular? Penyelesaian terbina dalam Angular memerlukan binaan berasingan untuk setiap bahasa dan tidak menyokong penukaran bahasa semasa masa jalan. Transloco memuatkan terjemahan semasa masa jalan supaya anda mengeluarkan satu binaan dan menukar bahasa secara langsung.
Terminal
npm install @jsverse/transloco
2

Konfigurasikan 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
// 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
// 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 {}
Jika terjemahan muncul sebagai kekunci mentah seperti "nav.home", bukan "Home", punca paling biasa ialah TranslocoHttpLoader tidak dapat menemui fail JSON. Pastikan fail terjemahan berada dalam src/assets/i18n/ dan tatasusunan assets dalam angular.json menyertakan laluan tersebut.

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/*.json
// 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}}"
  }
}
3

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

component.html
<!-- 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>
Gunakan parameter read pada arahan struktur untuk mengehadkan terjemahan kepada kekunci tersarang. Ini mengelakkan pengulangan awalan dalam setiap panggilan t() dan menjadikan templat lebih kemas.

Terjemahan Perkhidmatan (TypeScript)

notification.component.ts
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);
  }
}
Paip transloco mencipta langganan baharu bagi setiap penggunaan. Dalam templat dengan banyak rentetan terjemahan, pilih arahan struktur *transloco yang mencipta satu langganan untuk seluruh blok.
4

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.

ICU plural syntax
// 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>
Jangan sekali-kali melaksanakan logik bentuk jamak tersuai dalam komponen. Bahasa mempunyai peraturan bentuk jamak yang sangat berbeza dan sudah dikendalikan oleh spesifikasi ICU. Biarkan Transloco dan ICU mengendalikannya—tugas anda ialah mentakrifkan bentuk jamak yang betul dalam fail terjemahan.

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.

Terminal
npm install angular-locale-chain
app.config.ts (with 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(),
    },
  ],
};
angular-locale-chain ialah pustaka sumber terbuka yang menyelesaikan pepijat Transloco #574—sandaran bagi setiap kekunci hilang apabila fail terjemahan hanya lengkap sebahagian.

Struktur Fail yang Disyorkan

Project Structure
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.json

Automatikkan 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.

Terminal
# 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,es
Terjemah secara berperingkat—apabila menambahkan kekunci baharu pada fail sumber, terjemah hanya perbezaannya dan bukannya menjana semula semua fail. Ini mengekalkan terjemahan yang telah disemak manusia dan mengelakkan perubahan yang tidak perlu.

Automatikkan Kualiti Terjemahan

Kesan kekunci hilang dan ruang letak rosak sebelum dikeluarkan dengan i18n-validate. Uji UI dengan terjemahan pseudo menggunakan i18n-pseudo sebelum terjemahan sebenar tersedia.

Kesilapan Umum

Terjemahan Memaparkan Kekunci Mentah

TranslocoHttpLoader tidak dapat menemui fail JSON. Pastikan fail berada dalam src/assets/i18n/, tatasusunan assets dalam angular.json menyertakan laluan tersebut, dan nama fail sepadan tepat dengan konfigurasi availableLangs (peka huruf besar-kecil).

Kekunci Berskop Tidak Ditemui

Apabila menggunakan skop Transloco, fail terjemahan perlu berada dalam assets/i18n/[scope]/[lang].json, bukan dalam folder akar i18n. Pastikan juga skop didaftarkan dalam tatasusunan providers komponen menggunakan TRANSLOCO_SCOPE.

Amaran Konsol dalam Pengeluaran

Tetapkan prodMode: true dalam konfigurasi Transloco untuk binaan pengeluaran. Tanpanya, Transloco merekodkan amaran kekunci hilang ke konsol. Pilihan ini juga menyahaktifkan pemeriksaan masa pembangunan yang menambah overhed.

Terjemahan Berkelip semasa Navigasi Laluan

Laluan yang dimuatkan secara malas mengambil terjemahan selepas komponen dipaparkan, lalu menyebabkan kekunci belum diterjemahkan muncul seketika. Gunakan TRANSLOCO_LOADING_TEMPLATE terbina dalam Transloco untuk memaparkan keadaan pemuatan atau muatkan terjemahan lebih awal dalam pengawal laluan.

Pengguna Serantau Melihat Bahasa Inggeris, Bukan Bahasa Induk

Sandaran terbina dalam Transloco hanya dicetuskan apabila seluruh fail bahasa hilang, bukan untuk setiap kekunci yang hilang. Gunakan angular-locale-chain untuk menggabungkan terjemahan secara mendalam daripada bahasa berkaitan (contohnya pt-BR beralih kepada pt-PT, kemudian pt, kemudian Inggeris).

Cuba i18n Agent Sekarang

Lepaskan fail terjemahan anda di sini

JSON, YAML, PO, XML, CSV, Markdown, Properties

atau klik untuk semak imbas

Bahasa sasaran

Tidak perlu mendaftarAnggaran serta-merta

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.

Terminal
npm install angular-locale-chain
Configuration
import { 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 →

Soalan Lazim Angular i18n