Skip to main content

Alþjóðavæðing Angular með Transloco: Uppsetningar- og þýðingarleiðbeiningar

Frá uppsetningu til rekstrar: Stilltu Transloco, meðhöndlaðu fleirtölu með ICU-málskipan, bættu við snjöllum varaleiðum fyrir staðfærslur og sjálfvirknivæddu þýðingar með gervigreind.

1

Settu Transloco upp

Transloco er vinsælasta alþjóðavæðingarsafnið frá þriðja aðila fyrir Angular. Það býður upp á hleðslu þýðinga við keyrslu, stuðning við ICU-skilaboðasniðið, umfang sem hlaðin eru eftir þörfum og hrein sniðmátsforritaskil með bæði formgerðarleiðbeiningum og pípunum.

Hvers vegna ætti að velja Transloco fram yfir innbyggða alþjóðavæðingu Angular? Innbyggða lausn Angular krefst sérstakrar smíðar fyrir hvert tungumál og styður ekki tungumálaskipti við keyrslu. Transloco hleður þýðingum við keyrslu svo þú afhendir eina smíð og skiptir um tungumál samstundis.
Terminal
npm install @jsverse/transloco
2

Stilltu Transloco

Skráðu Transloco í stillingum forritsins. Þú þarft að tilgreina tiltæk tungumál, velja sjálfgefið tungumál og stilla þýðingahleðsluna. Transloco styður bæði sjálfstæða íhluti (Angular 14+) og NgModule-mynstur.

Sjálfstæðir íhlutir (mælt með)

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-mynstur

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 {}
Ef þýðingar birtast sem hráir lyklar á borð við "nav.home" í stað "Home" er algengasta orsökin sú að TranslocoHttpLoader finnur ekki JSON-skrárnar þínar. Gakktu úr skugga um að þýðingarskrárnar séu í src/assets/i18n/ og að assets-fylkið í angular.json innihaldi þá slóð.

Búðu til þýðingarskrár

Búðu til eina JSON-skrá fyrir hvert tungumál í src/assets/i18n/. Notaðu falda lykla til að skipuleggja strengi eftir eiginleikum. Transloco notar ICU-skilaboðasniðið fyrir fleirtölu og breytur.

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

Notaðu þýðingar í sniðmátum og þjónustum

Transloco býður upp á þrjár leiðir til að þýða í sniðmátum: formgerðarleiðbeininguna (*transloco), pípuna (| transloco) og þjónustuna (TranslocoService) fyrir TypeScript-kóða. Mælt er með formgerðarleiðbeiningunni í flestum tilvikum því hún býr til eina áskrift og veitir öllum sniðmátsreitnum aðgang að þýðingarfallinu.

Þýðingar í sniðmátum

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>
Notaðu read-færibreytuna í formgerðarleiðbeiningunni til að afmarka þýðingar við falinn lykil. Þá þarftu ekki að endurtaka forskeytið í hverju t() kalli og sniðmátin verða hreinlegri.

Þýðingar í þjónustum (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-pípan býr til nýja áskrift við hverja notkun. Í sniðmátum með mörgum þýddum strengjum skaltu frekar nota formgerðarleiðbeininguna *transloco, sem býr til eina áskrift fyrir allan reitinn.
4

Meðhöndlaðu fleirtölu með ICU-skilaboðasniðinu

Transloco notar ICU-skilaboðasniðið fyrir fleirtölu- og valsegðir. ICU meðhöndlar flóknar fleirtölureglur sjálfkrafa — arabíska (6 myndir), rússneska (3 myndir), japanska (1 mynd) — allt úr einum skilaboðastreng. Skilgreindu fleirtölureglurnar í þýðingarskránum og Transloco velur rétta mynd við keyrslu.

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>
Aldrei skaltu útfæra eigin fleirtölurökvirkni í íhlutunum. Tungumál hafa afar ólíkar fleirtölureglur sem ICU-staðallinn meðhöndlar nú þegar. Láttu Transloco og ICU sjá um verkið — þitt hlutverk er að skilgreina réttar fleirtölumyndir í þýðingarskránum.

Snjallar varaleiðir fyrir staðfærslur með angular-locale-chain

Sjálfgefið notar Transloco sjálfgefnu staðfærsluna þína til vara þegar þýðingarlykil vantar. Notandi með pt-BR sér þá ensku í stað fullgildra pt-PT-þýðinga. angular-locale-chain leysir þetta með því að djúpsameina þýðingar úr stillanlegri varakeðju áður en þær eru afhentar Transloco. Gildi fæst fyrir hvern lykil — engar eyður og engar þýðingar vantar.

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 er opið hugbúnaðarsafn sem leysir villu #574 í Transloco — þýðingar falla ekki til vara fyrir hvern lykil þegar þýðingarskrá er aðeins að hluta fullgerð.

Ráðlögð skráaskipan

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

Sjálfvirknivæddu þýðingar

Þegar uppsetningu Transloco er lokið geturðu þýtt staðfærsluskrárnar með gervigreind. Biddu gervigreindaraðstoðina í þróunarumhverfinu þínu að þýða upprunalegu JSON-skrána eða notaðu skipanalínuviðmót i18n Agent í CI/CD-vinnslurásinni til að sjálfvirknivæða staðfærsluna að fullu.

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
Þýddu í áföngum — þegar þú bætir nýjum lyklum við frumskrána skaltu aðeins þýða mismuninn í stað þess að endurgera allar skrár. Þannig varðveitast þýðingar sem fólk hefur yfirfarið og óþarfa breytingafarg verður minna.

Sjálfvirknivæddu þýðingargæði

Finndu lykla sem vantar og skemmd staðgildi áður en þau fara í dreifingu með i18n-validate. Prófaðu notandaviðmótið með sýndarþýðingum úr i18n-pseudo áður en raunverulegar þýðingar berast.

Algengar gryfjur

Þýðingar sýna hráa lykla

TranslocoHttpLoader finnur ekki JSON-skrárnar þínar. Athugaðu að skrárnar séu í src/assets/i18n/, að assets-fylkið í angular.json innihaldi þá slóð og að skráarheitin samsvari availableLangs-stillingunum þínum nákvæmlega (há- og lágstafanæmt).

Afmarkaðir lyklar leysast ekki

Þegar umfang Transloco eru notuð verða þýðingarskrárnar að vera í assets/i18n/[scope]/[lang].json, ekki í rótarmöppunni i18n. Gakktu einnig úr skugga um að umfangið sé skráð í providers-fylki íhlutarins með TRANSLOCO_SCOPE.

Viðvaranir í stjórnborði í rekstri

Stilltu prodMode: true í Transloco-stillingunum fyrir rekstrarsmíðar. Án þess skráir Transloco viðvaranir um lykla sem vantar í stjórnborðið. Stillingin slekkur einnig á athugunum fyrir þróunartíma sem auka vinnsluálag.

Þýðingar blikka þegar skipt er um leið

Leiðir sem hlaðnar eru eftir þörfum sækja þýðingar eftir að íhluturinn er myndgerður og því bregður óþýddum lyklum stuttlega fyrir. Notaðu innbyggða TRANSLOCO_LOADING_TEMPLATE í Transloco til að sýna hleðslustöðu eða forhladdu þýðingunum í leiðarverði.

Svæðisbundnir notendur sjá ensku í stað móðurstaðfærslu

Innbyggða varaleið Transloco virkist aðeins þegar heila staðfærsluskrá vantar, ekki þegar einstaka lykla vantar. Notaðu angular-locale-chain til að djúpsameina þýðingar úr skyldum staðfærslum (t.d. notar pt-BR fyrst pt-PT til vara, síðan pt og að lokum ensku).

Prófaðu i18n Agent núna

Slepptu þýðingarskránni þinni hér

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

eða smelltu til að fletta

Markmál

Engin skráning nauðsynlegKostnaðaráætlun samstundis

Varaleiðir fyrir staðfærslur með angular-locale-chain

Þegar þýðingarlykil vantar í svæðisbundna staðfærslu á borð við pt-BR fer TranslocoLoader í Angular beint í sjálfgefnu staðfærsluna í stað þess að athuga fyrst móðurstaðfærsluna 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',
});

Í leiðbeiningunum okkar um varaleiðir fyrir staðfærslur er að finna heildarlista yfir studda hugbúnaðarramma og 75 innbyggðar keðjur. Learn more →

Algengar spurningar um alþjóðavæðingu Angular