Angular Internationalization. ngx-translate

Главная » Видеоуроки » JavaScript » Angular Internationalization. ngx-translate

В этом видео мы поговорим об интергационализации (i18n) в Angular. Интернационализация — это процесс адаптации проекта (данных) под местные (локальные) стандарты. Например разделители в десятичных числах и пр.
Angular имеет собственную поддержку  i18n (@angular/localize пакет). Добавить пакет в проект можно с помощью команды ng add @angular/localize.

@angular/localize позволяет создавать мультиязычные приложения. Но для каждого языка придется собирать отдельный билд. К тому же хранение переводов организовано в специфичных (xml подобных) файлах (.xlf). Поэтому существует более простое и популярное решение для создания мультиязычного приложения с мощным апи ngx-translate.

app.ts

import { Component, inject } from '@angular/core';
import { MatToolbar } from '@angular/material/toolbar';
import { CurrencyPipe, DatePipe, DecimalPipe, PercentPipe, registerLocaleData } from '@angular/common';
import localeRu from '@angular/common/locales/ru';
import localeFr from '@angular/common/locales/fr';
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
import { MatButton } from '@angular/material/button';

registerLocaleData(localeRu);
registerLocaleData(localeFr);

@Component({
  selector: 'app-root',
  imports: [MatToolbar, DatePipe, CurrencyPipe, DecimalPipe, PercentPipe, TranslatePipe, MatButton],
  templateUrl: './app.html',
  styleUrl: './app.scss',
})
export class App {
  protected today = new Date();

  private translate = inject(TranslateService);

  constructor() {
    this.translate.addLangs(['en', 'ru']);
    this.translate.setFallbackLang('en');
    this.translate.use('en');
  }

  protected changeLang() {
    this.translate.use(this.translate.getCurrentLang() === 'en' ? 'ru' : 'en');
  }
}

app.html

<header>
  <mat-toolbar color="primary">
    <span>{{'APP.TITLE' | translate}}</span>
  </mat-toolbar>
</header>

<p>Date: {{today | date : 'MMM d, y, HH:mm:ss a': '+0200' : 'fr'}}</p>

<p>Currency: {{125 | currency : 'EUR' : 'symbol-narrow' :  '1.1-1' : 'fr'}}</p>

<p>Number: {{12.45 | number : '1.1-1' : 'fr'}}</p>

<p>Percent: {{0.25 | percent : '1.0' : 'ru'}}</p>


<button mat-button (click)="changeLang()">Chang lang</button>

app.config.ts

import {
  ApplicationConfig,
  InjectionToken,
  provideBrowserGlobalErrorListeners,
  provideZonelessChangeDetection
} from '@angular/core';
import { provideRouter } from '@angular/router';

import { routes } from './app.routes';
import { provideTranslateService } from '@ngx-translate/core';
import { provideTranslateHttpLoader } from '@ngx-translate/http-loader';

export const API_URL = new InjectionToken<string>('API_URL');

export const appConfig: ApplicationConfig = {
  providers: [
    provideBrowserGlobalErrorListeners(),
    provideZonelessChangeDetection(),
    provideRouter(routes),
    provideTranslateService({
      loader: provideTranslateHttpLoader({
        prefix: '/i18n/',
        suffix: '.json',
      }),
      fallbackLang: 'en',
      lang: 'en',
    }),
    { provide: API_URL, useValue: 'https://jsonplaceholder.typicode.com/' },
  ],
};

0 Comments

Submit a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.

Pin It on Pinterest

Share This