Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
Histórico de versões
- "Adicionada a seção Por que o Intlayer em vez de alternativas"v8.11.231/05/2026
- "Lançamento do Compilador"v7.3.127/11/2025
- "Tabela comparativa atualizada"v5.8.019/08/2025
- "Inicialização do histórico"v5.5.1029/06/2025
O conteúdo desta página foi traduzido com uma IA.
Veja a última versão do conteúdo original em inglêsIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
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:
Copiar o código para a área de transferência
.├── locales│ ├── en.json│ ├── es.json│ └── fr.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxOu aqui utilizando namespaces:
Copiar o código para a área de transferência
.├── locales│ ├── en│ │ ├── footer.json│ │ └── navbar.json│ ├── fr│ │ ├── footer.json│ │ └── navbar.json│ └── es│ ├── footer.json│ └── navbar.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxEsse tipo de arquitetura torna o processo de desenvolvimento mais lento e a base de código mais complexa de manter por vários motivos:
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)
- Criar o novo recurso/namespace na pasta
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).
Copiar o código para a área de transferência
.└── components └── MyComponent ├── index.content.ts ├── index.test.tsx ├── index.stories.tsx └── index.tsxCopiar o código para a área de transferência
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;Copiar o código para a área de transferência
import { useIntlayer } from "react-intlayer";
export const ComponentExample = () => {
const { myTranslatedContent } = useIntlayer("component-example");
return <span>{myTranslatedContent}</span>;
};Esta abordagem permite-lhe:
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
- Os arquivos
Limpar a sua base de código
- Reduzir a complexidade
- Aumentar a manutenibilidade
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
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
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)
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
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Recurso | Descrição |
|---|---|
| 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. |
| 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 |
| Compilador O Compilador Intlayer extrai automaticamente o conteúdo dos componentes e gera os arquivos de dicionário. - Compilador |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| Renderização Estática Não bloqueia o Renderização Estática. - Integração com Next.js |
| 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 |
| 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 |
| 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 |
| 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
Abrir a tabela em um modal para ver todo o conteúdo claramente
| 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.
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).