Creation:2024-08-14Last update:2026-05-31

    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|mjs|cjs|json}} 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

    Recurso Descrição
    Feature Suporte 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.
    Feature Gerenciamento 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
    Feature Compilador

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

    - Compilador
    Feature Arquivo 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
    Feature Ambiente 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
    Feature Configuraçã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
    Feature Recuperaçã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
    Feature Implementaçã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
    Feature Base 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
    Feature Roteamento 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
    Feature Suporte 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
    Feature Editor 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
    Feature Conteú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
    Feature Renderização Estática

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

    - Integração com Next.js
    Feature Traduçã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
    Feature Integraçã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
    Feature Extensã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
    Feature Interoperabilidade

    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
    Testar Traduções Ausentes (CLI/CI) ✅ CLI: npx intlayer content test (auditoria compatível com CI)

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

    Recurso intlayer react-i18next react-intl (FormatJS) lingui next-intl next-i18next vue-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).