Criação:2025-09-09Última atualização:2026-08-30

    Traduza seu Nest backend com Intlayer | Internacionalização (i18n)

    express-intlayer é um middleware poderoso de internacionalização (i18n) para aplicações Express, projetado para tornar seus serviços backend acessíveis globalmente, fornecendo respostas localizadas com base nas preferências do cliente. Como o NestJS é construído sobre o Express, você pode integrar perfeitamente o express-intlayer em suas aplicações NestJS para lidar efetivamente com conteúdo multilíngue.

    Casos de Uso Prático

    • Exibição de Erros do Backend no Idioma do Usuário: Quando ocorre um erro, exibir mensagens no idioma nativo do usuário melhora a compreensão e reduz a frustração. Isso é especialmente útil para mensagens de erro dinâmicas que podem ser mostradas em componentes front-end como toasts ou modals.

    • Recuperação de Conteúdo Multilíngue: Para aplicações que buscam conteúdo de um banco de dados, a internacionalização garante que você possa servir esse conteúdo em múltiplos idiomas. Isso é crucial para plataformas como sites de e-commerce ou sistemas de gerenciamento de conteúdo que precisam exibir descrições de produtos, artigos e outros conteúdos no idioma preferido pelo usuário.

    • Envio de E-mails Multilingues: Seja para e-mails transacionais, campanhas de marketing ou notificações, enviar e-mails no idioma do destinatário pode aumentar significativamente o engajamento e a eficácia.

    • Notificações Push Multilíngues: Para aplicações móveis, enviar notificações push na língua preferida do utilizador pode melhorar a interação e retenção. Este toque pessoal pode tornar as notificações mais relevantes e acionáveis.

    • Outras Comunicações: Qualquer forma de comunicação do backend, como mensagens SMS, alertas do sistema ou atualizações da interface do usuário, beneficia-se de estar no idioma do usuário, garantindo clareza e melhorando a experiência geral do usuário.

    Ao internacionalizar o backend, sua aplicação não apenas respeita as diferenças culturais, mas também se alinha melhor com as necessidades do mercado global, tornando-se uma etapa fundamental no dimensionamento de seus serviços em todo o mundo.

    Começando

    Criar um novo projeto NestJS

    bash
    npm install -g @nestjs/cli
    nest new my-nest-app
    

    Instalação

    Para começar a usar o express-intlayer, instale o pacote usando npm:

    bash
    npx intlayer init --interactive
    
    a flag --interactive é opcional. Use intlayer-cli init se você for um agente de IA.
    Este comando detectará seu ambiente e instalará os pacotes necessários. Por exemplo:
    bash
    npm install intlayer express-intlayer
    

    Configurar tsconfig.json

    Para usar o Intlayer com TypeScript, certifique-se de que seu tsconfig.json esteja configurado para suportar módulos ES. Você pode fazer isso definindo as opções module e moduleResolution para nodenext.

    tsconfig.json
    {
      compilerOptions: {
        module: "nodenext",
        moduleResolution: "nodenext",
        // ... outras opções
      },
    }
    

    Configuração

    Configure as definições de internacionalização criando um arquivo intlayer.config.ts na raiz do seu projeto:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    

    Declare Seu Conteúdo

    Crie e gerencie suas declarações de conteúdo para armazenar traduções:

    Suas declarações de conteúdo podem ser definidas em qualquer lugar da sua aplicação, desde que estejam incluídas no diretório contentDir (por padrão, ./src). E correspondam à extensão do arquivo de declaração de conteúdo (por padrão, .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
    Para mais detalhes, consulte a documentação de declaração de conteúdo.

    Configuração do Middleware Express

    Integre o middleware express-intlayer na sua aplicação NestJS para lidar com internacionalização:

    src/app.module.ts
    import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common";
    import { AppController } from "./app.controller";
    import { AppService } from "./app.service";
    import { intlayer } from "express-intlayer";
    
    @Module({
      imports: [],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer.apply(intlayer()).forRoutes("*"); // Aplicar para todas as rotas
      }
    }
    

    Use Traduções em Seus Serviços ou Controladores

    Agora você pode usar a função getIntlayer para acessar traduções em seus serviços ou controladores:

    src/app.service.ts
    import { Injectable } from "@nestjs/common";
    import { getIntlayer } from "express-intlayer";
    
    @Injectable()
    export class AppService {
      getHello(): string {
        return getIntlayer("app").greet; // Retorna a saudação da camada internacionalizada
      }
    }
    

    Compatibilidade

    express-intlayer é totalmente compatível com:

    Também funciona perfeitamente com qualquer solução de internacionalização em diversos ambientes, incluindo navegadores e requisições API. Você pode personalizar o middleware para detectar o locale através de headers ou cookies:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      // ... Outras opções de configuração
      routing: {
        storage: [
          { type: "header", name: "my-locale-header" },
          { type: "cookie", name: "my-locale-cookie" },
        ],
      },
    };
    
    export default config;
    

    Por padrão, o express-intlayer interpretará o cabeçalho Accept-Language para determinar o idioma preferido do cliente.

    Para mais informações sobre configuração e tópicos avançados, visite nossa documentação.

    Configurar TypeScript

    express-intlayer aproveita as robustas capacidades do TypeScript para aprimorar o processo de internacionalização. A tipagem estática do TypeScript garante que cada chave de tradução seja considerada, reduzindo o risco de traduções ausentes e melhorando a manutenção.

    Autocompletion

    Translation error

    Certifique-se de que os tipos autogerados (por padrão em ./types/intlayer.d.ts) estejam incluídos no seu arquivo tsconfig.json.

    tsconfig.json
    {
      // ... Suas configurações existentes do TypeScript
      include: [
        // ... Suas configurações existentes do TypeScript
        ".intlayer/**/*.ts", // Inclua os tipos autogerados
      ],
    }
    

    Extensão VS Code

    Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a Extensão oficial Intlayer para VS Code.

    Instalar no VS Code Marketplace

    Esta extensão oferece:

    • Autocompletar para chaves de tradução.
    • Detecção de erros em tempo real para traduções ausentes.
    • Visualizações inline do conteúdo traduzido.
    • Ações rápidas para criar e atualizar traduções facilmente.

    Para mais detalhes sobre como usar a extensão, consulte a documentação da Extensão Intlayer para VS Code.

    Configuração do Git

    É recomendado ignorar os arquivos gerados pelo Intlayer. Isso permite evitar que eles sejam comitados no seu repositório Git.

    Para isso, você pode adicionar as seguintes instruções ao seu arquivo .gitignore:

    .gitignore
    # Ignorar os arquivos gerados pelo Intlayer
    .intlayer
    

    Perguntas Frequentes

    O NestJS possui o nestjs-i18n, que é a escolha comum e cobre catálogos JSON ou YAML com um serviço com escopo de requisição. A alternativa é o Intlayer através do express-intlayer, que utiliza o mesmo conteúdo declarado do seu frontend, é fortemente tipado com base nos seus dicionários e vem com suporte a tradução por IA e CMS.

    A razão principal para internacionalizar o backend é que grande parte do texto que um usuário lê nunca passa pelo frontend: mensagens de erro de API, e-mails transacionais, notificações push, SMS e geração de relatórios em PDF. Todos esses textos necessitam do idioma do destinatário, resolvido por requisição em vez de por sessão.

    Consulte por que Intlayer.

    Muito pouco. Os dicionários são compilados com antecedência e apenas os locales declarados são incluídos, eliminando o carregamento de catálogos na inicialização do servidor e leituras de arquivos em disco no caminho das requisições. Isso faz grande diferença em deploys serverless e edge, onde o tamanho do pacote afeta o tempo de inicialização a frio (cold start). Consulte otimização de bundle.

    Sim, e existem dois caminhos. Você pode migrar o conteúdo progressivamente com o guia de migração do i18next. Ou você pode manter sua API atual integralmente: os adaptadores de compatibilidade (compat adapters) expõem exatamente a mesma interface do i18next, porém alimentados pelos dicionários do Intlayer, permitindo alterar apenas as importações sem modificar o código dos serviços e handlers.

    Sim. O plugin sync JSON mantém seus arquivos /messages/{locale}/{namespace}.json como fonte de verdade e gera dicionários Intlayer a partir deles, em ambas as direções. O plugin sync PO faz o mesmo para catálogos gettext, e os arquivos por locale permitem dividir o conteúdo por idioma em vez de agrupar todos os locales em um único arquivo.

    Não. Execute npx intlayer extract e o Intlayer lê seus arquivos fonte, extrai as strings voltadas para o usuário e escreve um arquivo .content ao lado de cada um, para que você revise um diff em vez de copiar strings para um catálogo uma a uma. Consulte o comando extract.

    No lado frontend do mesmo projeto, o Intlayer Compiler vai além e gera os dicionários em tempo de build a partir de código JSX, TSX, Vue ou Svelte, fazendo com que as duas partes da aplicação compartilhem a mesma camada de conteúdo sem necessidade de manter chaves manualmente.

    Cinco ferramentas, todas opcionais:

    • Extensão VS Code: navegue de uma chave useIntlayer diretamente para o arquivo de conteúdo que a declara, extraia conteúdo de um componente e execute build, fill, test, push e pull pela paleta de comandos ou pela aba dedicada do Intlayer.
    • Servidor LSP: a mesma inteligência em qualquer editor compatível com LSP, com ir para definição, localizar referências, pré-visualizações de valores traduzidos ao passar o mouse, autocompletar e alertas para chaves não declaradas. Também resolve chamadas de i18next, react-i18next, next-intl e use-intl, facilitando a migração.
    • Servidor MCP: expõe a documentação e a CLI do Intlayer para Cursor, VS Code, Claude Desktop, Claude Code e ChatGPT, permitindo que os assistentes respondam com base na documentação atualizada e executem comandos como intlayer fill.
    • Agent Skills: habilidades focadas como intlayer-config, intlayer-cli e intlayer-content, além de uma por framework, ensinando ao agente suas regras de roteamento e tipos de nós.
    • Plugin ESLint: a regra no-raw-text identifica strings hardcoded, com regras adicionais para chaves estáticas e conteúdo não utilizado.