i18n em Angular com Transloco: guia de configuração e tradução
Da instalação à produção: configure Transloco, trate plurais com sintaxe ICU, adicione fallbacks 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
Registre Transloco na configuração da aplicação. Deve 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 arquivos de tradução
Crie um arquivo JSON por idioma em src/assets/i18n/. Utilize chaves aninhadas para organizar as strings 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 assinatura 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 string. Defina as regras nos arquivos 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>Fallbacks regionais inteligentes com angular-locale-chain
Por padrão, Transloco recorre à localidade predefinida quando falta uma chave. Um usuário 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 arquivos 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 arquivos de localidade 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 no console em produção
As traduções piscam ao navegar entre rotas
Os usuários regionais veem inglês em vez da localidade principal
Experimente já o i18n Agent
Solte aqui seu arquivo de tradução
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou clique para selecionar
Idiomas de destino
Fallback regional com angular-locale-chain
Quando falta uma chave de tradução em uma localidade como pt-BR, TranslocoLoader do Angular passa diretamente para a localidade predefinida em vez de verificar primeiro a localidade 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 nosso guia de fallback regional para ver a lista completa de frameworks compatíveis e as 75 cadeias integradas. Learn more →