Angular i18n с Transloco: ръководство за настройване и превод
От инсталирането до внедряването в производствена среда: настройте Transloco, обработвайте множествено число със синтаксиса на ICU, добавете интелигентни резервни езикови версии и автоматизирайте преводите с ИИ.
Инсталирайте Transloco
Transloco е най-популярната външна i18n библиотека за Angular. Тя предлага зареждане на преводи по време на изпълнение, поддръжка на формата за съобщения ICU, обхвати с отложено зареждане и изчистен API за шаблони както със структурни директиви, така и с pipe-ове.
npm install @jsverse/translocoНастройте Transloco
Регистрирайте Transloco в конфигурацията на приложението си. Трябва да зададете наличните езици, да изберете език по подразбиране и да конфигурирате механизма за зареждане на преводите. Transloco поддържа както самостоятелни компоненти (Angular 14+), така и модела NgModule.
Самостоятелни компоненти (препоръчително)
// 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
// 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 {}Създайте преводни файлове
Създайте по един JSON файл за всеки език в src/assets/i18n/. Използвайте вложени ключове, за да организирате низовете по функционалност. Transloco използва формата за съобщения ICU за множествено число и променливи.
// 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}}"
}
}Използвайте преводите в шаблони и услуги
Transloco предлага три начина за превод в шаблони: структурната директива (*transloco), pipe-а (| transloco) и услугата (TranslocoService) за TypeScript код. Структурната директива се препоръчва за повечето случаи, защото създава един абонамент и предоставя функцията за превод на целия блок в шаблона.
Превод в шаблон
<!-- 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>Превод чрез услуга (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);
}
}Обработвайте множествено число с формата за съобщения ICU
Transloco използва формата за съобщения ICU за множествено число и изрази select. ICU обработва автоматично сложните правила за множествено число — арабски (6 форми), руски (3 форми), японски (1 форма) — само чрез един низ със съобщение. Дефинирайте правилата за множествено число в преводните файлове и Transloco ще избере правилната форма по време на изпълнение.
// 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>Интелигентни резервни езикови версии с angular-locale-chain
По подразбиране Transloco преминава към езиковата версия по подразбиране, когато липсва ключ за превод. Така потребител с pt-BR вижда английски текст вместо напълно подходящия превод за pt-PT. angular-locale-chain решава проблема, като рекурсивно обединява преводите от конфигурируема резервна верига, преди да ги предаде на Transloco. Всеки ключ се попълва — без празнини и липсващи преводи.
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(),
},
],
};Препоръчителна файлова структура
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Автоматизирайте преводите
След като завършите настройването на Transloco, преведете файловете за езиковите версии с ИИ. Във Вашата IDE помолете асистента си с ИИ да преведе изходния JSON файл или използвайте i18n Agent CLI във Вашия CI/CD пайплайн за напълно автоматизирана локализация.
# 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Автоматизирайте контрола на качеството на преводите
Често срещани проблеми
Вместо преводи се показват необработени ключове
Ключовете с обхват не се разпознават
Предупреждения в конзолата в производствена среда
Преводите примигват при преминаване към друг маршрут
Регионалните потребители виждат английски вместо родителската езикова версия
Изпробвайте i18n Agent сега
Пуснете тук Вашия файл за превод
JSON, YAML, PO, XML, CSV, Markdown, Properties
или натиснете, за да изберете файл
Целеви езици
Резервни езикови версии с angular-locale-chain
Когато липсва ключ за превод в регионална езикова версия като pt-BR, TranslocoLoader на Angular преминава директно към езиковата версия по подразбиране, вместо първо да провери родителската версия pt.
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',
});Вижте нашето ръководство за резервни езикови версии за пълния списък с поддържани софтуерни рамки и 75 вградени вериги. Learn more →