Skip to main content

Angular i18n Transloco:lla: käyttöönotto- ja käännösopas

Asennuksesta tuotantoon: määritä Transloco, käsittele monikkomuodot ICU-syntaksilla, lisää älykkäät varakielet ja automatisoi käännökset tekoälyllä.

1

Asenna Transloco

Transloco on Angular:in suosituin kolmannen osapuolen i18n-kirjasto. Se tarjoaa käännösten lataamisen suorituksen aikana, ICU-sanomamuodon tuen, laiskasti ladattavat käyttöalueet ja selkeän malli-API:n sekä rakennedirektiiveillä että putkilla.

Miksi Transloco eikä Angular:in sisäänrakennettu i18n? Angular:in sisäänrakennettu ratkaisu vaatii erillisen koonnin kullekin kielelle eikä tue kielen vaihtamista suorituksen aikana. Transloco lataa käännökset suorituksen aikana, joten julkaiset yhden koonnin ja vaihdat kieltä lennossa.
Terminal
npm install @jsverse/transloco
2

Määritä Transloco

Rekisteröi Transloco sovelluksesi määrityksissä. Anna saatavilla olevat kielet, aseta oletuskieli ja määritä käännöslataaja. Transloco tukee sekä itsenäisiä komponentteja (Angular 14+) että NgModule-malleja.

Itsenäiset komponentit (suositus)

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,
    }),
  ],
};

NgModule-malli

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 {}
Jos käännöksissä näkyy "Home"-tekstin sijaan käsittelemättömiä avaimia, kuten "nav.home", TranslocoHttpLoader ei tavallisesti löydä JSON-tiedostojasi. Varmista, että käännöstiedostosi ovat src/assets/i18n/-hakemistossa ja angular.json-tiedoston assets-taulukko sisältää tämän polun.

Luo käännöstiedostot

Luo jokaiselle kielelle yksi JSON-tiedosto src/assets/i18n/-hakemistoon. Järjestä merkkijonot ominaisuuksittain sisäkkäisillä avaimilla. Transloco käyttää monikkomuotoihin ja muuttujiin ICU-sanomamuotoa.

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

Käytä käännöksiä malleissa ja palveluissa

Transloco tarjoaa kolme tapaa kääntää malleissa: rakennedirektiivi (*transloco), putki (| transloco) ja TypeScript-koodin palvelu (TranslocoService). Rakennedirektiiviä suositellaan useimpiin tilanteisiin, koska se luo yhden tilauksen ja tarjoaa käännösfunktion koko mallilohkolle.

Käännös mallissa

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>
Rajaa käännökset sisäkkäiseen avaimeen rakennedirektiivin read-parametrilla. Näin etuliitettä ei tarvitse toistaa jokaisessa t()-kutsussa ja mallit pysyvät selkeämpinä.

Käännös palvelussa (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);
  }
}
transloco-putki luo uuden tilauksen jokaiselle käyttökerralle. Suosi paljon käännettyjä merkkijonoja sisältävissä malleissa *transloco-rakennedirektiiviä, joka luo yhden tilauksen koko lohkolle.
4

Käsittele monikkomuodot ICU-sanomamuodolla

Transloco käyttää monikkomuotoihin ja select-lausekkeisiin ICU-sanomamuotoa. ICU käsittelee monimutkaiset monikkosäännöt automaattisesti — arabia (kuusi muotoa), venäjä (kolme muotoa), japani (yksi muoto) — yhdessä sanomamerkkijonossa. Määritä monikkosäännöt käännöstiedostoissa, niin Transloco valitsee oikean muodon suorituksen aikana.

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>
Älä koskaan toteuta komponenteissasi omaa monikkologiikkaa. Kielten monikkosäännöt eroavat valtavasti toisistaan, ja ICU-määritys käsittelee ne jo. Anna Transloco:n ja ICU:n tehdä työ — sinun tehtäväsi on määrittää oikeat monikkomuodot käännöstiedostoissa.

Älykkäät varakielet angular-locale-chainilla

Oletusarvoisesti Transloco siirtyy oletuskieliversioon, kun käännösavain puuttuu. pt-BR-käyttäjä näkee täysin käyttökelpoisten pt-PT-käännösten sijaan englannin. angular-locale-chain korjaa tämän syväyhdistämällä määritettävän varakieliketjun käännökset ennen niiden antamista Translocalle. Jokainen avain täytetään — ei aukkoja tai puuttuvia käännöksiä.

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 on avoimen lähdekoodin kirjasto, joka ratkaisee Transloco-virheen #574 — avainkohtainen varakieli puuttuu, kun käännöstiedosto on vain osittain valmis.

Suositeltu tiedostorakenne

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

Automatisoi käännökset

Kun Transloco on otettu käyttöön, käännä kieliversiotiedostosi tekoälyllä. Pyydä IDE-ympäristössäsi tekoälyavustajaasi kääntämään JSON-lähdetiedostosi tai käytä i18n Agent:in CLI:tä CI/CD-putkessasi täysin automaattiseen lokalisointiin.

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
Käännä vaiheittain — kun lisäät uusia avaimia lähdetiedostoon, käännä vain diff äläkä luo kaikkia tiedostoja uudelleen. Näin ihmisten tarkistamat käännökset säilyvät ja tarpeettomat muutokset vältetään.

Automatisoi käännöslaatu

Löydä puuttuvat avaimet ja rikkoutuneet paikkamerkit i18n-validate:lla ennen julkaisua. Testaa käyttöliittymää pseudokäännöksillä i18n-pseudo:n avulla ennen oikeiden käännösten valmistumista.

Tavalliset sudenkuopat

Käännökset näyttävät käsittelemättömät avaimet

TranslocoHttpLoader ei löydä JSON-tiedostojasi. Tarkista, että tiedostot ovat src/assets/i18n/-hakemistossa, angular.json-tiedoston assets-taulukko sisältää tämän polun ja tiedostonimet vastaavat availableLangs-määritystäsi täsmälleen kirjainkoko mukaan lukien.

Käyttöaluekohtaiset avaimet eivät ratkea

Transloco:n käyttöalueita käytettäessä käännöstiedostojen on oltava polussa assets/i18n/[scope]/[lang].json, ei i18n-juurihakemistossa. Varmista myös, että käyttöalue on rekisteröity komponentin providers-taulukkoon TRANSLOCO_SCOPE-arvolla.

Konsolivaroitukset tuotannossa

Aseta tuotantokoontien Transloco-määrityksessä prodMode: true. Muuten Transloco kirjaa puuttuvien avainten varoitukset konsoliin. Asetus poistaa käytöstä myös hallinnollista kuormaa lisäävät kehitysaikaiset tarkistukset.

Käännökset välähtävät reitillä siirryttäessä

Laiskasti ladattavat reitit hakevat käännökset komponentin hahmontamisen jälkeen, mikä aiheuttaa kääntämättömien avainten lyhyen välähdyksen. Näytä lataustila Transloco:n sisäänrakennetulla TRANSLOCO_LOADING_TEMPLATE-arvolla tai esilataa käännökset reittisuojassa.

Alueelliset käyttäjät näkevät pääkieliversion sijaan englannin

Transloco:n sisäänrakennettu varakieli käynnistyy vain kokonaisen kieliversiotiedoston puuttuessa, ei yksittäisille puuttuville avaimille. Syväyhdistä toisiinsa liittyvien kieliversioiden käännökset angular-locale-chainilla (esimerkiksi pt-BR siirtyy pt-PT:hen, sitten pt:hen ja lopuksi englantiin).

Kokeile i18n Agent:ia nyt

Pudota käännöstiedostosi tähän

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

tai valitse napsauttamalla

Kohdekielet

Rekisteröitymistä ei tarvitaVälitön arvio

Varakieliketju angular-locale-chainilla

Kun alueellisesta kieliversiosta, kuten pt-BR:stä, puuttuu käännösavain, Angular:in TranslocoLoader siirtyy suoraan oletuskieliversioon eikä tarkista ensin pääkieliversiota pt.

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',
});

Katso varakielioppaastamme kaikki tuetut ohjelmistokehykset ja 75 sisäänrakennettua ketjua. Learn more →

Usein kysyttyä Angular i18n:stä