Autor:
    Criação:2024-08-14Última atualização:2026-08-30

    Por que você deve considerar o Intlayer?

    O que é o Intlayer?

    Intlayer é uma biblioteca de internacionalização projetada especificamente para desenvolvedores JavaScript. Ela permite a declaração de seu conteúdo em qualquer parte do seu código. Converte declarações de conteúdo multilíngue em dicionários estruturados para integrar facilmente no seu código. Utilizando TypeScript, o Intlayer torna o seu desenvolvimento mais forte e mais eficiente.

    Por que o Intlayer em vez de alternativas?

    Comparado às soluções principais como next-intl ou i18next, o Intlayer é uma solução que vem com otimizações integradas, tais como:

    Em vez de carregar arquivos JSON massivos em suas páginas, carregue apenas o conteúdo estritamente necessário. O Intlayer ajuda a reduzir o tamanho do seu bundle e de suas páginas em até 50%.

    Delimitar o conteúdo de sua aplicação ao nível de componentes facilita a manutenção de aplicações de grande porte. Você pode duplicar ou excluir uma única pasta de funcionalidade sem o fardo mental de ter que revisar toda a sua base de código de conteúdo. Além disso, o Intlayer é totalmente tipado para garantir a precisão de seus conteúdos.

    Co-localizar conteúdo e código reduz o contexto necessário para modelos de linguagem grandes (LLMs). O Intlayer também vem com uma suite de ferramentas, como uma CLI para testar traduções ausentes, LSP, MCP e agent skills, para tornar a experiência de desenvolvimento (DX) ainda mais fluida para os agentes de IA.

    O Intlayer oferece uma série de recursos adicionais que outras soluções i18n não têm, tais como suporte a Markdown, carregamento de conteúdo externo, carregamento de conteúdo a partir de arquivos, atualização de conteúdo em tempo real, editor visual e muito mais.

    Use automação para traduzir em seu pipeline de CI/CD utilizando o LLM de sua preferência com o custo direto do seu provedor de IA. O Intlayer também oferece um compilador para automatizar a extração de conteúdo, bem como uma plataforma web para ajudar a traduzir em segundo plano.

    Conectar arquivos JSON massivos aos componentes pode levar a problemas de desempenho e reatividade. O Intlayer otimiza o carregamento do conteúdo em tempo de compilação (build).

    Mais do que apenas uma solução de i18n, o Intlayer fornece um editor visual auto-hospedado e um CMS completo para ajudar você a gerenciar seu conteúdo multilíngue em tempo real, tornando a colaboração com tradutores, redatores e outros membros da equipe perfeitamente integrada. O conteúdo pode ser armazenado localmente e/ou remotamente.

    Se você usa frameworks diferentes para partes diferentes da sua aplicação (ex: React, React-native, Vue, Angular, Svelte, etc.), o Intlayer fornece uma maneira de usar uma sintaxe e implementação comuns em todos os principais frameworks de frontend. Você também poderá compartilhar suas declarações de conteúdo no seu design system, aplicações, backend, etc.

    Por que o Intlayer foi criado?

    O Intlayer foi criado para resolver um problema comum que afeta todas as bibliotecas de i18n habituais como next-intl, react-i18next, react-intl, next-i18next, react-intl e vue-i18n.

    Todas essas soluções adotam uma abordagem centralizada para listar e gerenciar seus conteúdos. Por exemplo:

    bash
    .
    ├── locales
       ├── en.json
       ├── es.json
       └── fr.json
    ├── i18n.ts
    └── src
        └── components
            └── MyComponent
                └── index.tsx
    

    Ou aqui utilizando namespaces:

    bash
    .
    ├── locales
       ├── en
      ├── footer.json
      └── navbar.json
       ├── fr
      ├── footer.json
      └── navbar.json
       └── es
          ├── footer.json
          └── navbar.json
    ├── i18n.ts
    └── src
        └── components
            └── MyComponent
                └── index.tsx
    

    Esse tipo de arquitetura torna o processo de desenvolvimento mais lento e a base de código mais complexa de manter por vários motivos:

    1. Para qualquer novo componente criado, você deve:

      • Criar o novo recurso/namespace na pasta locales
      • Lembrar de importar o novo namespace na sua página
      • Traduzir seu conteúdo (frequentemente feito de forma manual por cópia/cola de provedores de IA)
    2. Para qualquer mudança feita em seus componentes, você deve:

      • Procurar o recurso/namespace correspondente (longe do componente)
      • Traduzir seu conteúdo
      • Garantir que seu conteúdo esteja atualizado para todos os idiomas
      • Verificar se o seu namespace não inclui chaves/valores não utilizados
      • Garantir que a estrutura dos seus arquivos JSON seja a mesma para todos os idiomas

    Em projetos profissionais que utilizam essas soluções, plataformas de localização são frequentemente utilizadas para ajudar a gerenciar a tradução de conteúdo. No entanto, isso pode rapidamente se tornar caro para projetos grandes.

    Para resolver esse problema, o Intlayer adota uma abordagem que delimita seu conteúdo por componente e mantém o conteúdo próximo ao componente, como costumamos fazer com CSS (styled-components), tipos, documentação (storybook) ou testes unitários (jest).

    bash
    .
    └── components
        └── MyComponent
            ├── index.content.ts
            ├── index.test.tsx
            ├── index.stories.tsx
            └── index.tsx
    
    ./components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const componentExampleContent = {
      key: "component-example",
      content: {
        myTranslatedContent: t({
          en: "Hello World",
          es: "Hola Mundo",
          fr: "Bonjour le monde",
        }),
      },
    } satisfies Dictionary;
    
    export default componentExampleContent;
    
    ./components/MyComponent/index.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const ComponentExample = () => {
      const { myTranslatedContent } = useIntlayer("component-example");
    
      return <span>{myTranslatedContent}</span>;
    };
    

    Esta abordagem permite-lhe:

    1. Aumentar a velocidade de desenvolvimento

      • Os arquivos .content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml} podem ser criados utilizando uma extensão do VSCode
      • Ferramentas de autocompletar de IA no seu IDE (como GitHub Copilot) podem ajudá-lo a declarar seus conteúdos, reduzindo cópias/colas
    2. Limpar a sua base de código

      • Reduzir a complexidade
      • Aumentar a manutenibilidade
    3. Duplicar os seus componentes e seus conteúdos correspondentes com mais facilidade (Exemplo: componentes de login/registro, etc.)

      • Limitando o risco de impactar o conteúdo de outros componentes
      • Copiando e colando seus conteúdos de uma aplicação para outra sem dependências externas
    4. Evitar poluir a sua base de código com chaves/valores não utilizados para componentes não utilizados

      • Se você não usar um componente, o Intlayer não importará o conteúdo relacionado
      • Se excluir um componente, lembrará mais facilmente de remover o conteúdo relacionado, pois ele estará presente na mesma pasta
    5. Reduzir o custo de raciocínio para os agentes de IA ao declararem os seus conteúdos multilíngues

      • O agente de IA não terá que escanear toda a sua base de código para saber onde implementar seu conteúdo
      • As traduções podem ser facilmente feitas por ferramentas de autocompletar de IA no seu IDE (como GitHub Copilot)
    6. Otimizar o desempenho de carregamento

      • Se um componente for carregado de forma diferida (lazy-loaded), seu conteúdo relacionado será carregado ao mesmo tempo

    Recursos adicionais do Intlayer

    RecursoDescrição
    FeatureSuporte Cross-Framework

    O Intlayer é compatível com todos os principais frameworks e bibliotecas, incluindo Next.js, React, Vite, Vue.js, Nuxt, Preact, Express e mais.
    FeatureGerenciamento de Conteúdo via JavaScript

    Aproveite a flexibilidade do JavaScript para definir e gerenciar seu conteúdo de forma eficiente.

    - Declaração de conteúdo
    FeatureCompilador

    O Compilador Intlayer extrai automaticamente o conteúdo dos componentes e gera os arquivos de dicionário.

    - Compilador
    FeatureArquivo de Declaração de Conteúdo por Idioma

    Acelere o seu desenvolvimento declarando o seu conteúdo uma única vez, antes da geração automática.

    - Arquivo de Declaração de Conteúdo por Idioma
    FeatureAmbiente Seguro para Tipos (Type-Safe)

    Aproveite o TypeScript para garantir que suas definições de conteúdo e código estejam livres de erros, enquanto se beneficia do preenchimento automático do IDE.

    - Configuração do TypeScript
    FeatureConfiguração Simplificada

    Comece a funcionar rapidamente com uma configuração mínima. Ajuste as configurações de internacionalização, roteamento, IA, compilação e manuseio de conteúdo de maneira fácil.

    - Explorar integração com Next.js
    FeatureRecuperação de Conteúdo Simplificada

    Não há necessidade de chamar sua função t para cada elemento de conteúdo. Recupere todo o seu conteúdo diretamente usando um único hook.

    - Integração com React
    FeatureImplementação Consistente de Componentes de Servidor

    Perfeitamente adequado para componentes de servidor Next.js, use a mesma implementação tanto para componentes cliente quanto servidor, sem a necessidade de passar sua função t através de cada componente de servidor.

    - Componentes de Servidor
    FeatureBase de Código Organizada

    Mantenha sua base de código mais organizada: 1 componente = 1 dicionário na mesma pasta. Traduções próximas a seus respectivos componentes melhoram a manutenibilidade e a clareza.

    - Como o Intlayer funciona
    FeatureRoteamento Aprimorado

    Suporte completo de roteamento de apps, adaptando-se perfeitamente a estruturas de aplicações complexas, para Next.js, React, Vite, Vue.js, etc.

    - Explorar integração com Next.js
    FeatureSuporte a Markdown

    Importe e interprete arquivos locais e Markdown remoto para conteúdos multilíngues como políticas de privacidade, documentação, etc. Interprete e torne os metadados de Markdown acessíveis em seu código.

    - Arquivos de conteúdo
    FeatureEditor Visual & CMS Gratuitos

    Um editor visual e CMS gratuitos estão disponíveis para criadores de conteúdo, eliminando a necessidade de uma plataforma de localização externa. Mantenha seu conteúdo sincronizado usando o Git, ou externalize-o total ou parcialmente com o CMS.

    - Editor do Intlayer
    - CMS do Intlayer
    FeatureConteúdo com Otimização Tree-shaking

    Conteúdo compatível com otimização tree-shaking, reduzindo o tamanho do pacote final. Carrega conteúdo por componente, excluindo do bundle os conteúdos não utilizados. Suporta carregamento lento (lazy loading) para melhorar a eficiência de carregamento do app.

    - Otimização do build de aplicação
    FeatureRenderização Estática

    Não bloqueia o Renderização Estática.

    - Integração com Next.js
    FeatureTradução Inteligente baseada em IA

    Transforme o seu site para até 231 idiomas com apenas um clique usando as ferramentas avançadas de tradução por IA do Intlayer com o seu próprio provedor de IA/chave de API.

    - Integração com CI/CD
    - Intlayer CLI
    - Preenchimento Automático
    FeatureIntegração do Servidor MCP

    Fornece um servidor MCP (Model Context Protocol) para automação de IDE, permitindo gerenciamento integrado de conteúdo e fluxos de trabalho i18n diretamente no seu ambiente de desenvolvimento.

    - Servidor MCP
    FeatureExtensão VSCode

    O Intlayer fornece uma extensão do VSCode para ajudá-lo a gerenciar seu conteúdo e traduções, construir dicionários, traduzir conteúdos e muito mais.

    - Extensão VSCode
    FeatureInteroperabilidade

    Permite a interoperabilidade com react-i18next, next-i18next, next-intl e react-intl.

    - Intlayer e react-intl
    - Intlayer e next-intl
    - Intlayer e next-i18next
    - Adaptadores de compatibilidade do Intlayer
    Testar Traduções Ausentes (CLI/CI)✅ CLI: npx intlayer content test (auditoria compatível com CI)

    Comparação do Intlayer com outras soluções

    Recursointlayerreact-i18nextreact-intl (FormatJS)linguinext-intlnext-i18nextvue-i18n
    Traduções Próximas aos Componentes✅ Sim, conteúdo co-localizado com cada componente❌ Não❌ No❌ Não❌ Não❌ Não✅ Sim - usando Single File Components (SFCs)
    Integração com TypeScript✅ Avançada, tipos estritos autogerados⚠️ Básica; configuração adicional para maior segurança✅ Boa, mas menos estrita⚠️ Tipagem, necessita configuração✅ Boa⚠️ Básica✅ Boa (tipos disponíveis; segurança das chaves precisa de ajuste)
    Detecção de Tradução Ausente✅ Erro TypeScript destacado e erro/aviso no build-time⚠️ Principalmente strings de fallback em tempo de execução (runtime)⚠️ Strings de fallback⚠️ Requer configuração adicional⚠️ Fallback em runtime⚠️ Fallback em runtime⚠️ Fallback/avisos em runtime (configurável)
    Conteúdo Rico (JSX/Markdown/componentes)✅ Suporte direto⚠️ Limitado / apenas interpolação⚠️ Sintaxe ICU, não é JSX real⚠️ Limitado❌ Não projetado para nós ricos⚠️ Limitado⚠️ Limitado (componentes via <i18n-t>, Markdown via plugins)
    Tradução com base em IA✅ Sim, suporta múltiplos provedores de IA. Utilizável com chaves de API próprias. Considera o contexto da aplicação e escopo do conteúdo❌ Não❌ Não❌ Não❌ Não❌ Não❌ Não
    Editor Visual✅ Sim, editor visual local + CMS opcional; pode externalizar conteúdo da base de código; incorporável❌ Não / disponível via plataformas de localização externas❌ Não / disponível via plataformas de localização externas❌ Não / disponível via plataformas de localização externas❌ Não / disponível via plataformas de localização externas❌ Não / disponível via plataformas de localização externas❌ Não / disponível via plataformas de localização externas
    Roteamento Localizado✅ Sim, suporta caminhos localizados por padrão (funciona com Next.js & Vite)⚠️ Não integrado, requer plugins (ex. next-i18next) ou config de roteador personalizada❌ Não, apenas formatação de mensagens, roteamento manual⚠️ Não integrado, requer plugins ou config manual✅ Integrado, App Router suporta segmento [locale]✅ Integrado✅ Integrado
    Geração Dinâmica de Rotas✅ Sim⚠️ Plugin/ecossistema ou configuração manual❌ Não fornecido⚠️ Plugin/manual✅ Sim✅ Sim❌ Não fornecido (Nuxt i18n fornece)
    Pluralização✅ Padrões baseados em enumeração✅ Configurável (plugins como i18next-icu)✅ (ICU)✅ (ICU/messageformat)✅ Boa✅ Boa✅ Regras de pluralização integradas
    Formatação (dates, numbers, currencies)✅ Formatadores otimizados (Intl sob o capô)⚠️ Via plugins ou uso customizado de Intl✅ Formatadores ICU✅ Helpers de ICU/CLI✅ Boa (helpers do Intl)✅ Boa (helpers do Intl)✅ Formatadores de data/número integrados (Intl)
    Formato do Conteúdo✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP)⚠️ .json✅ .json, .js⚠️ .po, .json✅ .json, .js, .ts⚠️ .json✅ .json, .js
    Suporte a ICU⚠️ WIP⚠️ Via plugin (i18next-icu)✅ Sim✅ Sim✅ Sim⚠️ Via plugin (i18next-icu)⚠️ Via formatador/compilador customizado
    SEO Helpers (hreflang, sitemap)✅ Ferramentas integradas: helpers para sitemap, robots.txt, metadata⚠️ Plugins da comunidade/manual❌ Não é o núcleo❌ Não é o núcleo✅ Boa✅ Boa❌ Não é o núcleo (Nuxt i18n fornece helpers)
    Ecossistema / Comunidade⚠️ Menor mas em rápido crescimento e reativo✅ Maior e maduro✅ Grande⚠️ Menor✅ Médio, focado em Next.js✅ Médio, focado em Next.js✅ Grande no ecossistema Vue
    Server-side Rendering & Server Components✅ Sim, otimizado para SSR / React Server Components⚠️ Suportado ao nível de página mas precisa passar t-funções na árvore de componentes para componentes de servidor filhos⚠️ Suportado ao nível de página com configuração adicional, mas precisa passar t-funções na árvore de componentes para componentes de servidor filhos✅ Suportado, configuração requerida⚠️ Suportado ao nível de página mas precisa passar t-funções na árvore de componentes para componentes de servidor filhos⚠️ Suportado ao nível de página mas precisa passar t-funções na árvore de componentes para componentes de servidor filhos✅ SSR via Nuxt/Vue SSR (sem RSC)
    Tree-shaking (carregar apenas conteúdo usado)✅ Sim, por componente em build-time via plugins Babel/SWC⚠️ Geralmente carrega tudo (pode ser melhorado com namespaces/divisão de código)⚠️ Geralmente carrega tudo❌ Não é padrão⚠️ Parcial⚠️ Parcial⚠️ Parcial (com divisão de código/configuração manual)
    Carregamento diferido (Lazy loading)✅ Sim, por idioma / por dicionário✅ Sim (ex. backends/namespaces sob demanda)✅ Sim (split dos bundles de locale)✅ Sim (importações dinâmicas de catálogo)✅ Sim (por rota/por idioma), necessita gerenciamento de namespaces✅ Sim (por rota/por idioma), necessita gerenciamento de namespaces✅ Sim (mensagens de idioma assíncronas)
    Purgar conteúdo não utilizado✅ Sim, por dicionário no build-time❌ Não, apenas via segmentação manual de namespaces❌ Não, todas as mensagens declaradas são incluídas✅ Sim, chaves não utilizadas são detectadas e descartadas na build❌ Não, pode ser gerenciado de forma manual com controle de namespaces❌ Não, pode ser gerenciado de forma manual com controle de namespaces❌ Não, apenas possível via carregamento diferido manual
    Gerenciamento de Grandes Projetos✅ Encoraja modularidade, ideal para design-system⚠️ Requer boa disciplina de arquivos⚠️ Catálogos centrais podem se tornar grandes⚠️ Pode se tornar complexo✅ Modular com configuração✅ Modular com configuração✅ Modular com configuração de Vue Router/Nuxt i18n

    Estrelas no GitHub

    As estrelas no GitHub são um forte indicador da popularidade de um projeto, da confiança da comunidade e da relevância a longo prazo. Embora não sejam uma medida direta da qualidade técnica, refletem quantos desenvolvedores consideram o projeto útil, acompanham seu progresso e provavelmente o adotarão. Para estimar o valor de um projeto, as estrelas ajudam a comparar a tração entre alternativas e fornecem insights sobre o crescimento do ecossistema.

    Star History Chart

    Interoperabilidade

    intlayer também pode ajudar a gerenciar seus namespaces para react-intl, react-i18next, next-intl, next-i18next e vue-i18n.

    Utilizando intlayer, você pode declarar seu conteúdo no formato de sua biblioteca i18n favorita, e o intlayer gerará seus namespaces no local de sua escolha (exemplo: /messages/{{locale}}/{{namespace}}.json).

    Se você quiser continuar usando a API da sua biblioteca i18n atual, o intlayer também fornece adaptadores de compatibilidade (compat adapters): pacotes que expõem exatamente a mesma API que react-i18next, next-intl, react-intl, vue-i18n e outras, mas servidos pelos dicionários do Intlayer. Isso permite migrar progressivamente sem reescrever seu código. Consulte a documentação dos adaptadores de compatibilidade.

    Perguntas Frequentes

    Três gerações coexistem no ecossistema:

    • Bibliotecas de catálogo em tempo de execução: i18next, react-i18next, next-i18next, vue-i18n, ngx-translate, svelte-i18n. Namespaces JSON carregados em runtime. Maduras, agnósticas de framework, não tipadas e enviadas por inteiro para a página.
    • Bibliotecas de mensagens em tempo de compilação: Lingui, Paraglide, e next-intl ou react-intl com etapa de extração. Melhor comportamento de bundle e tipagem parcial, ainda mantendo catálogos centralizados.
    • Bibliotecas com camada de conteúdo (Content layer): Intlayer. O conteúdo é declarado e compilado por componente, de modo que tipagem, tree-shaking, ferramentas de edição e tradução por IA se originam das mesmas declarações.

    Muito menos do que uma configuração baseada em namespaces, porque uma página nunca baixa um catálogo que não renderiza. O markup renderizado no servidor resolve seu conteúdo no próprio servidor, e o compilador em tempo de build substitui as chamadas useIntlayer pelas entradas exatas que o componente utiliza, descartando chaves e idiomas não utilizados. Os dicionários dinâmicos dividem o restante por locale. Comparado às alternativas habituais, o Intlayer reduz o tamanho do bundle e da página em até 50%. Consulte otimização de bundle e o benchmark.

    Sim, e existem dois caminhos. Você pode migrar o conteúdo progressivamente com o guia de migração do i18next ou o guia de migração do next-intl. Ou você pode manter sua API atual integralmente: os adaptadores de compatibilidade (compat adapters) expõem exatamente a mesma interface de i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n e Lingui, porém alimentados pelos dicionários do Intlayer, permitindo que apenas os imports mudem enquanto o código dos componentes permanece idêntico.

    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.

    Para um fluxo de trabalho totalmente automatizado, o Intlayer Compiler faz o mesmo em tempo de build em código JSX, TSX, Vue e Svelte, gerando os dicionários a cada alteração para que não haja necessidade de manter chaves manualmente. Como opera por análise estática, strings criadas exclusivamente em tempo de execução ficam fora de alcance, necessitando de algumas anotações para diferenciar texto do usuário de lógica interna da aplicação.

    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.