i18n em Angular com Transloco: guia de configuração e tradução
Da instalação à produção: configure Transloco, trate plurais com sintaxe ICU, acrescente recursos regionais inteligentes e automatize traduções com IA.
Instalar Transloco
Transloco é a biblioteca de i18n de terceiros mais popular para Angular. Oferece carregamento de traduções durante a execução, compatibilidade com o formato de mensagens ICU, âmbitos com carregamento diferido e uma API simples para modelos, com diretivas estruturais e pipes.
npm install @jsverse/translocoConfigurar Transloco
Registe Transloco na configuração da aplicação. Tem de fornecer os idiomas disponíveis, definir um idioma predefinido e configurar o carregador de traduções. Transloco aceita componentes autónomos —Angular 14 ou posterior— e padrões NgModule.
Componentes autónomos (recomendado)
// 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,
}),
],
};Padrão 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 {}Criar ficheiros de tradução
Crie um ficheiro JSON por idioma em src/assets/i18n/. Utilize chaves aninhadas para organizar as cadeias por funcionalidade. Transloco utiliza o formato de mensagens ICU para plurais e variáveis.
// 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}}"
}
}Utilizar traduções em modelos e serviços
Transloco oferece três formas de traduzir em modelos: a diretiva estrutural (*transloco), o pipe (| transloco) e o serviço TranslocoService para código TypeScript. A diretiva é recomendada na maioria dos casos porque cria uma única subscrição e disponibiliza a função de tradução a todo o bloco do modelo.
Tradução no modelo
<!-- 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>Tradução no serviço (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);
}
}Tratar plurais com o formato de mensagens ICU
Transloco utiliza o formato de mensagens ICU para plurais e expressões select. ICU trata automaticamente regras complexas —árabe com 6 formas, russo com 3 e japonês com 1— a partir de uma única cadeia. Defina as regras nos ficheiros e Transloco seleciona a forma correta durante a execução.
// 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>Recursos regionais inteligentes com angular-locale-chain
Por predefinição, Transloco recorre à região predefinida quando falta uma chave. Um utilizador pt-BR vê inglês em vez de traduções pt-PT perfeitamente válidas. angular-locale-chain corrige isto ao combinar profundamente as traduções de uma cadeia configurável antes de as entregar a Transloco. Todas as chaves são preenchidas, sem lacunas nem traduções em falta.
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(),
},
],
};Estrutura de ficheiros recomendada
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.jsonAutomatizar as traduções
Depois de concluir a configuração de Transloco, traduza os ficheiros regionais com IA. No IDE, peça ao assistente para traduzir o JSON de origem ou utilize a CLI do i18n Agent no pipeline de CI/CD para uma localização totalmente automatizada.
# 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,esAutomatizar a qualidade das traduções
Erros frequentes
As traduções mostram chaves em bruto
As chaves com âmbito não são resolvidas
Avisos na consola em produção
As traduções piscam ao navegar entre rotas
Os utilizadores regionais veem inglês em vez da região principal
Experimente já o i18n Agent
Largue aqui o seu ficheiro de tradução
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou clique para selecionar
Idiomas de destino
Recurso regional com angular-locale-chain
Quando falta uma chave de tradução numa região como pt-BR, TranslocoLoader do Angular passa diretamente para a região predefinida em vez de verificar primeiro a região principal 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',
});Consulte o nosso guia de recurso regional para ver a lista completa de frameworks compatíveis e as 75 cadeias integradas. Learn more →