Skip to main content

Transloco ile Angular i18n: Kurulum ve çeviri rehberi

Kurulumdan üretime: Transloco'yu yapılandırın, ICU söz dizimiyle çoğulları yönetin, akıllı yerel ayar yedekleri ekleyin ve çevirileri yapay zeka ile otomatikleştirin.

1

Transloco'yu yükleyin

Transloco, Angular için en popüler üçüncü taraf i18n kütüphanesidir. Çalışma zamanında çeviri yükleme, ICU ileti formatı desteği, gecikmeli yüklenen kapsamlar ve hem yapısal direktifler hem de pipe'lar içeren sade bir şablon API'si sunar.

Angular'ın yerleşik i18n çözümü yerine neden Transloco? Angular'ın yerleşik çözümü her dil için ayrı bir derleme gerektirir ve çalışma zamanında dil değiştirmeyi desteklemez. Transloco çevirileri çalışma zamanında yüklediği için tek bir derleme yayımlayabilir ve dilleri anında değiştirebilirsiniz.
Terminal
npm install @jsverse/transloco
2

Transloco'yu yapılandırın

Transloco'yu uygulama yapılandırmanıza kaydedin. Kullanılabilir dilleri sağlamanız, varsayılan bir dil belirlemeniz ve çeviri yükleyicisini yapılandırmanız gerekir. Transloco hem bağımsız bileşenleri (Angular 14+) hem de NgModule kalıplarını destekler.

Bağımsız bileşenler (önerilen)

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 kalıbı

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 {}
Çeviriler "Home" yerine "nav.home" gibi ham anahtarlar olarak görünüyorsa en yaygın neden TranslocoHttpLoader'ın JSON dosyalarınızı bulamamasıdır. Çeviri dosyalarınızın src/assets/i18n/ içinde olduğunu ve angular.json dosyanızdaki assets dizisinin bu yolu içerdiğini doğrulayın.

Çeviri dosyaları oluşturun

src/assets/i18n/ içinde her dil için bir JSON dosyası oluşturun. Dizeleri özelliğe göre düzenlemek için iç içe anahtarlar kullanın. Transloco, çoğullar ve değişkenler için ICU ileti formatını kullanır.

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

Çevirileri şablonlarda ve servislerde kullanın

Transloco, şablonlarda çeviri yapmak için üç yöntem sunar: yapısal direktif (*transloco), pipe (| transloco) ve TypeScript kodu için servis (TranslocoService). Yapısal direktif tek bir abonelik oluşturduğu ve translate işlevini şablon bloğunun tamamına sunduğu için çoğu kullanım durumunda önerilir.

Şablon çevirisi

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>
Çevirileri iç içe bir anahtarla sınırlandırmak için yapısal direktifte read parametresini kullanın. Böylece her t() çağrısında ön eki yinelemez ve şablonları daha sade tutarsınız.

Servis çevirisi (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 pipe'ı her kullanım için yeni bir abonelik oluşturur. Çok sayıda çevrilmiş dize içeren şablonlarda bloğun tamamı için tek abonelik oluşturan *transloco yapısal direktifini tercih edin.
4

Çoğulları ICU ileti formatıyla yönetin

Transloco, çoğullar ve select ifadeleri için ICU ileti formatını kullanır. ICU, karmaşık çoğul kurallarını tek bir ileti dizesinden otomatik olarak yönetir: Arapça (6 biçim), Rusça (3 biçim), Japonca (1 biçim). Çoğul kurallarınızı çeviri dosyalarında tanımladığınızda Transloco çalışma zamanında doğru biçimi seçer.

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>
Bileşenlerinizde hiçbir zaman özel çoğul mantığı uygulamayın. Dillerin çoğul kuralları büyük ölçüde farklılık gösterir ve ICU belirtimi bunları zaten yönetir. Bu işi Transloco ve ICU'ya bırakın; göreviniz çeviri dosyalarınızda doğru çoğul biçimlerini tanımlamaktır.

angular-locale-chain ile akıllı yerel ayar yedekleri

Transloco, bir çeviri anahtarı eksik olduğunda varsayılan olarak sizin varsayılan yerel ayarınıza geri döner. Bu nedenle pt-BR kullanan bir kullanıcı, son derece uygun pt-PT çevirileri yerine İngilizce metinleri görür. angular-locale-chain, çevirileri Transloco'ya vermeden önce yapılandırılabilir bir yedek zincirinden derinlemesine birleştirerek bu sorunu çözer. Her anahtar doldurulur; boşluk veya eksik çeviri kalmaz.

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, bir çeviri dosyası kısmen tamamlandığında anahtar bazında yedekleme yapılmamasına yol açan Transloco #574 numaralı hatasını çözen açık kaynaklı bir kütüphanedir.

Önerilen dosya yapısı

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

Çevirileri otomatikleştirin

Transloco kurulumunuz tamamlandığında yerel ayar dosyalarınızı yapay zeka kullanarak çevirin. IDE'nizde yapay zeka asistanınızdan kaynak JSON dosyanızı çevirmesini isteyin veya tamamen otomatik yerelleştirme için CI/CD işlem hattınızda i18n Agent CLI'ı kullanın.

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
Çevirileri kademeli olarak yapın: Kaynak dosyanıza yeni anahtarlar eklediğinizde tüm dosyaları yeniden oluşturmak yerine yalnızca farkı çevirin. Böylece insanlar tarafından gözden geçirilmiş çevirileri korur ve gereksiz değişikliklerden kaçınırsınız.

Çeviri kalitesini otomatikleştirin

Eksik anahtarları ve bozuk yer tutucuları yayımlanmadan önce i18n-validate ile yakalayın. Gerçek çeviriler gelmeden önce arayüzünüzü i18n-pseudo kullanarak sözde çevirilerle test edin.

Yaygın sorunlar

Çeviriler ham anahtarları gösteriyor

TranslocoHttpLoader JSON dosyalarınızı bulamıyor. Dosyaların src/assets/i18n/ içinde olduğunu, angular.json dosyasındaki assets dizisinin bu yolu içerdiğini ve dosya adlarının availableLangs yapılandırmanızla büyük-küçük harf duyarlı olarak tam eşleştiğini kontrol edin.

Kapsamlı anahtarlar çözümlenmiyor

Transloco kapsamlarını kullanırken çeviri dosyaları kök i18n klasöründe değil assets/i18n/[scope]/[lang].json konumunda olmalıdır. Ayrıca kapsamın bileşenin providers dizisine TRANSLOCO_SCOPE kullanılarak kaydedildiğinden emin olun.

Üretimde konsol uyarıları

Üretim derlemeleri için Transloco yapılandırmanızda prodMode: true değerini ayarlayın. Bu ayar olmadan Transloco, eksik anahtar uyarılarını konsola kaydeder. Ayrıca ek yük oluşturan geliştirme zamanı kontrollerini de devre dışı bırakır.

Rota geçişinde çeviriler kısa süreliğine kayboluyor

Gecikmeli yüklenen rotalar, çevirileri bileşen oluşturulduktan sonra getirerek çevrilmemiş anahtarların kısa süreliğine görünmesine neden olur. Bir yükleme durumu göstermek için Transloco'nun yerleşik TRANSLOCO_LOADING_TEMPLATE özelliğini kullanın veya çevirileri bir rota koruyucusunda önceden yükleyin.

Bölgesel kullanıcılar üst yerel ayar yerine İngilizce görüyor

Transloco'nun yerleşik yedeği tek tek eksik anahtarlarda değil yalnızca bir yerel ayar dosyasının tamamı eksik olduğunda devreye girer. İlgili yerel ayarlardaki çevirileri derinlemesine birleştirmek için angular-locale-chain kullanın (ör. pt-BR önce pt-PT'ye, ardından pt'ye ve son olarak İngilizceye geri döner).

i18n Agent'ı şimdi deneyin

Çeviri dosyanızı buraya bırakın

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

veya göz atmak için tıklayın

Hedef diller

Kayıt gerekmezAnında fiyat tahmini

angular-locale-chain ile yerel ayar yedeği

pt-BR gibi bölgesel bir yerel ayarda çeviri anahtarı eksik olduğunda Angular'ın TranslocoLoader'ı önce üst yerel ayar pt'yi kontrol etmek yerine doğrudan varsayılan yerel ayara geçer.

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

Desteklenen çerçevelerin ve 75 yerleşik zincirin tam listesi için Yerel Ayar Yedeği Rehberimize bakın. Learn more →

Angular i18n hakkında sık sorulan sorular