Documentação

Pré-renderização

O componente <t> e o t pipe são traduzidos no navegador. Se você pré-renderizar seu aplicativo Angular, poderá traduzir suas páginas no momento da criação. Os usuários e os mecanismos de pesquisa recebem HTML totalmente traduzido em todos os idiomas.

O projeto de exemplo pré-renderiza uma página por idioma. Abra a página alemã e inspecione o tráfego da rede: nenhuma solicitação é feita à API Magic Translate.

Traduzir em um resolvedor

Adicione um parâmetro de rota para o idioma e use o método translate em um resolvedor de rotas para traduzir o texto da página. Armazene o resultado em Angular's TransferState para que o navegador o reutilize em vez de traduzir novamente após a hidratação.

import { inject, makeStateKey, TransferState } from '@angular/core';
import { ResolveFn } from '@angular/router';
import { MagicTranslate, type Languages } from '@magic-translate/angular';
const texts = {
title: 'Welcome to our shop',
intro: 'This page was translated when the app was built.'
};
type Texts = Record<keyof typeof texts, string>;
export const translationsResolver: ResolveFn<Texts> = async (route) => {
const transferState = inject(TransferState);
const magicTranslate = inject(MagicTranslate);
const lang = (route.paramMap.get('language') ?? 'en') as Languages;
const key = makeStateKey<Texts>(`translations-${lang}`);
const transferred = transferState.get(key, null);
if (transferred) return transferred;
const entries = await Promise.all(
Object.entries(texts).map(async ([name, text]) => [
name,
await magicTranslate.translate(text, { lang })
])
);
const translations = Object.fromEntries(entries) as Texts;
transferState.set(key, translations);
return translations;
};
// app.routes.ts
export const routes: Routes = [
{
path: ':language',
component: Page,
resolve: { translations: translationsResolver }
}
];

Adicione withComponentInputBinding() a provideRouter para passar as traduções resolvidas para o componente da página como uma entrada.

O resolvedor é executado em seu servidor de compilação, então ele é traduzido com sua chave secreta. Defina-a como a variável de ambiente MAGIC_TRANSLATE_SECRET_KEY na qual você executa ng build, por exemplo, como um segredo de CI. Não a passe para provideMagicTranslate, porque essa configuração também é executada no navegador.

Pré-renderize todos os idiomas

Diga ao Angular quais idiomas pré-renderizar com getPrerenderParams:

// app.routes.server.ts
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: ':language',
renderMode: RenderMode.Prerender,
getPrerenderParams: async () =>
['en', 'de', 'zh'].map((language) => ({ language }))
}
];

ng build agora grava um arquivo HTML traduzido por idioma. As traduções são armazenadas em cache, portanto, somente o texto alterado conta para seu uso em compilações posteriores.