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
- "Atualizar o uso da API useIntlayer do Solid para acesso direto a propriedades"v8.9.004/05/2026
- "Adicionar comando init"v7.5.930/12/2025
- "Histórico inicial"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êsSe você tiver uma ideia para melhorar esta documentação, sinta-se à vontade para contribuir enviando uma pull request no GitHub.
Link do GitHub para a documentaçãoCopiar o Markdown do documento para a área de transferência
Traduza seu Create React App com Intlayer | Internacionalização (i18n)
Consulte Application Template no GitHub.
O que é Intlayer?
Em comparação com soluções principais como react-i18next ou i18next, Intlayer é uma solução que vem com otimizações integradas, tais como:
Intlayer é uma biblioteca inovadora e de código aberto para internacionalização (i18n), projetada para simplificar o suporte multilíngue em aplicações web modernas.
Com o Intlayer, você pode:
Em vez de carregar ficheiros JSON massivos nas suas páginas, carregue apenas o conteúdo necessário. O Intlayer ajuda a reduzir o tamanho do seu bundle e das páginas em até 50%.
- Gerenciar traduções facilmente usando dicionários declarativos no nível do componente.
- Localizar dinamicamente metadados, rotas e conteúdo.
- Garantir suporte ao TypeScript com tipos autogerados, melhorando a autocompletação e a detecção de erros.
- Aproveitar recursos avançados, como detecção dinâmica de localidade e troca de idiomas.
Co-locating content reduz o contexto necessário por Large Language Models (LLMs). 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 do desenvolvedor (DX) ainda mais suave para agentes de IA.
Use automation para traduzir no seu pipeline CI/CD usando o LLM da sua escolha ao custo do seu provedor de IA. Intlayer também oferece um compiler para automatizar a extração de conteúdo, bem como uma plataforma web para ajudar a traduzir em background.
Conectar arquivos JSON massivos a componentes pode levar a problemas de desempenho e reatividade. Intlayer otimiza o carregamento de seu conteúdo no tempo de build.
Muito mais do que uma solução i18n, o Intlayer fornece um editor visual auto-hospedado e um CMS completo para ajudá-lo a gerenciar seu conteúdo multilíngue em tempo real, tornando a colaboração com tradutores, redatores e outros membros da equipe perfeita. O conteúdo pode ser armazenado localmente e/ou remotamente.
Guia Passo a Passo para Configurar o Intlayer em uma Aplicação React
Instalar Dependências
Instale os pacotes necessários usando npm:
bashCopiar códigoCopiar o código para a área de transferência
a flag
--interactiveé opcional. Useintlayer-cli initse você for um agente de IA.Este comando detectará seu ambiente e instalará os pacotes necessários. Por exemplo:
bashCopiar códigoCopiar o código para a área de transferência
intlayer
O pacote principal que fornece ferramentas de internacionalização para gerenciamento de configuração, tradução, declaração de conteúdo, transpilação e comandos CLI.
react-intlayer
O pacote que integra o Intlayer com a aplicação React. Ele fornece provedores de contexto e hooks para internacionalização no React.
react-scripts-intlayer
Inclui os comandos e plugins
react-scripts-intlayerpara integrar o Intlayer com a aplicação baseada no Create React App. Esses plugins são baseados no craco e incluem configuração adicional para o empacotador Webpack.Configuração do seu projeto
Crie um arquivo de configuração para configurar os idiomas da sua aplicação:
intlayer.config.tsCopiar códigoCopiar o código para a área de transferência
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Seus outros idiomas ], defaultLocale: Locales.ENGLISH, }, }; export default config;Por meio deste arquivo de configuração, você pode configurar URLs localizadas, redirecionamento de middleware, nomes de cookies, a localização e extensão de suas declarações de conteúdo, desativar logs do Intlayer no console e muito mais. Para uma lista completa de parâmetros disponíveis, consulte a documentação de configuração.
Integrar o Intlayer na Configuração do CRA
Altere seus scripts para usar o react-intlayer
package.jsonCopiar códigoCopiar o código para a área de transferência
Os scripts
react-scripts-intlayersão baseados no CRACO. Você também pode implementar sua própria configuração baseada no plugin craco do intlayer. Veja o exemplo aqui.Declarar Seu Conteúdo
Crie e gerencie suas declarações de conteúdo para armazenar traduções:
src/app.content.tsxCopiar códigoCopiar o código para a área de transferência
import { t, type Dictionary } from "intlayer"; import React, { type ReactNode } from "react"; const appContent = { key: "app", content: { getStarted: t<ReactNode>({ en: ( <> Edit <code>src/App.tsx</code> and save to reload </> ), fr: ( <> Éditez <code>src/App.tsx</code> et enregistrez pour recharger </> ), es: ( <> Edita <code>src/App.tsx</code> y guarda para recargar </> ), }), reactLink: { href: "https://reactjs.org", content: t({ en: "Learn React", fr: "Apprendre React", es: "Aprender React", }), }, }, } satisfies Dictionary; export default appContent;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.
Se o seu arquivo de conteúdo incluir código TSX, você deve considerar importar
import React from "react";no seu arquivo de conteúdo.Utilize o Intlayer no Seu Código
Acesse seus dicionários de conteúdo em toda a sua aplicação:
src/App.tsxCopiar códigoCopiar o código para a área de transferência
import logo from "./logo.svg"; import "./App.css"; import type { FC } from "react"; import { IntlayerProvider, useIntlayer } from "react-intlayer"; const AppContent: FC = () => { const content = useIntlayer("app"); return ( <div className="App"> <img src={logo} className="App-logo" alt="logo" /> {content.getStarted} <a className="App-link" href={content.reactLink.href.value} target="_blank" rel="noopener noreferrer" > {content.reactLink.content} </a> </div> ); }; const App: FC = () => ( <IntlayerProvider> <AppContent /> </IntlayerProvider> ); export default App;Nota: Se você quiser usar seu conteúdo em um atributo
string, comoalt,title,href,aria-label, etc., você deve chamar o valor da função, como:htmlCopiar códigoCopiar o código para a área de transferência
Para saber mais sobre o hook
useIntlayer, consulte a documentação.Para saber mais sobre o hook
useIntlayer, consulte a documentação.Alterar o idioma do seu conteúdo
OpcionalPara alterar o idioma do seu conteúdo, você pode usar a função
setLocalefornecida pelo hookuseLocale. Essa função permite definir o idioma da aplicação e atualizar o conteúdo de acordo.src/components/LocaleSwitcher.tsxCopiar códigoCopiar o código para a área de transferência
import { Locales } from "intlayer"; import { useLocale } from "react-intlayer"; const LocaleSwitcher = () => { const { setLocale } = useLocale(); return ( <button onClick={() => setLocale(Locales.English)}> Change Language to English </button> ); };Para saber mais sobre o hook
useLocale, consulte a documentação.Adicionar Rotas Localizadas à sua aplicação
OpcionalO objetivo deste passo é criar rotas únicas para cada idioma. Isso é útil para SEO e URLs amigáveis para SEO. Exemplo:
plaintextCopiar códigoCopiar o código para a área de transferência
Por padrão, as rotas não são prefixadas para o idioma padrão. Se você quiser prefixar o idioma padrão, pode definir a opção
middleware.prefixDefaultcomotruena sua configuração. Consulte a documentação de configuração para mais informações.Para adicionar rotas localizadas à sua aplicação, você pode criar um componente
LocaleRouterque encapsula as rotas da sua aplicação e gerencia o roteamento baseado no idioma. Aqui está um exemplo usando o React Router:src/components/LocaleRouter.tsxCopiar códigoCopiar o código para a área de transferência
// Importação de dependências e funções necessárias import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Funções utilitárias e tipos do 'intlayer' // Funções utilitárias e tipos do 'intlayer' import type { FC, PropsWithChildren } from "react"; // Tipos React para componentes funcionais e props import { IntlayerProvider } from "react-intlayer"; // Provedor para contexto de internacionalização import { BrowserRouter, Routes, Route, Navigate, useLocation, } from "react-router-dom"; // Componentes de roteamento para gerenciar navegação // Desestruturação da configuração do Intlayer const { internationalization, middleware } = configuration; const { locales, defaultLocale } = internationalization; /** * Um componente que gerencia a localização e encapsula os filhos com o contexto de idioma apropriado. * Ele gerencia a detecção e validação do idioma baseada na URL. */ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({ children, locale, }) => { const { pathname, search } = useLocation(); // Obtém o caminho atual da URL // Determina o idioma atual, retornando ao padrão se não for fornecido const currentLocale = locale ?? defaultLocale; // Remove o prefixo de idioma do caminho para construir um caminho base const pathWithoutLocale = getPathWithoutLocale( pathname // Caminho atual da URL ); /** * Se middleware.prefixDefault for verdadeiro, o idioma padrão deve sempre ser prefixado. */ if (middleware.prefixDefault) { // Valida o idioma if (!locale || !locales.includes(locale)) { // Redireciona para o idioma padrão com o caminho atualizado return ( <Navigate to={`/${defaultLocale}/${pathWithoutLocale}${search}`} replace // Substitui a entrada atual do histórico pela nova /> ); } // Encapsula os filhos com o IntlayerProvider e define o idioma atual return ( <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> ); } else { /** * Quando middleware.prefixDefault é falso, o idioma padrão não é prefixado. * Garante que o idioma atual seja válido e não o idioma padrão. */ if ( currentLocale.toString() !== defaultLocale.toString() && !locales .filter( (locale) => locale.toString() !== defaultLocale.toString() // Exclui o idioma padrão ) .includes(currentLocale) // Verifica se o idioma atual está na lista de idiomas válidos ) { // Redireciona para o caminho sem prefixo de idioma return <Navigate to={`${pathWithoutLocale}${search}`} replace />; } // Encapsula os filhos com o IntlayerProvider e define o idioma atual return ( <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider> ); } }; /** * Um componente de roteador que configura rotas específicas para idiomas. * Ele usa o React Router para gerenciar a navegação e renderizar componentes localizados. */ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => ( <BrowserRouter> <Routes> {locales .filter( (locale) => middleware.prefixDefault || locale !== defaultLocale ) .map((locale) => ( <Route // Padrão de rota para capturar o idioma (por exemplo, /en/, /fr/) e corresponder a todos os caminhos subsequentes path={`/${locale}/*`} key={locale} element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Encapsula os filhos com gerenciamento de idioma /> ))} { // Se o prefixo do idioma padrão estiver desativado, renderiza os filhos diretamente no caminho raiz !middleware.prefixDefault && ( <Route path="*" element={ <AppLocalized locale={defaultLocale}>{children}</AppLocalized> } // Encapsula os filhos com gerenciamento de idioma /> ) } </Routes> </BrowserRouter> );Em seguida, você pode usar o componente
LocaleRouterna sua aplicação:src/App.tsxCopiar códigoCopiar o código para a área de transferência
import { LocaleRouter } from "./components/LocaleRouter"; import type { FC } from "react"; // ... Seu componente AppContent const App: FC = () => ( <LocaleRouter> <AppContent /> </LocaleRouter> );Alterar a URL quando o idioma muda
OpcionalPara alterar a URL quando o idioma muda, você pode usar a prop
onLocaleChangefornecida pelo hookuseLocale. Paralelamente, você pode usar os hooksuseLocationeuseNavigatedoreact-router-dompara atualizar o caminho da URL.src/components/LocaleSwitcher.tsxCopiar códigoCopiar o código para a área de transferência
import { useLocation, useNavigate } from "react-router-dom"; import { Locales, getHTMLTextDir, getLocaleName, getLocalizedUrl, } from "intlayer"; import { useLocale } from "react-intlayer"; import { type FC } from "react"; const LocaleSwitcher: FC = () => { const { pathname, search } = useLocation(); // Obtém o caminho atual da URL. Exemplo: /fr/about?foo=bar const navigate = useNavigate(); const { locale, availableLocales, setLocale } = useLocale({ onLocaleChange: (locale) => { // Constrói a URL com o idioma atualizado // Exemplo: /es/about?foo=bar const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale); // Atualiza o caminho da URL navigate(pathWithLocale); }, }); return ( <div> <button popoverTarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <a href={getLocalizedUrl(location.pathname, localeItem)} hrefLang={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={(e) => { e.preventDefault(); setLocale(localeItem); }} key={localeItem} > <span> {/* Idioma - ex: FR */} {localeItem} </span> <span> {/* Idioma no próprio idioma - ex: Français */} {getLocaleName(localeItem, locale)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* Idioma no idioma atual - ex: Francés com idioma atual definido como Locales.SPANISH */} {getLocaleName(localeItem)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* Idioma em inglês - ex: French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </a> ))} </div> </div> ); };Referências da documentação:
Alterar os Atributos de Idioma e Direção do HTML
OpcionalQuando sua aplicação suporta vários idiomas, é crucial atualizar os atributos
langedirda tag<html>para corresponder ao idioma atual. Isso garante:- Acessibilidade: Leitores de tela e tecnologias assistivas dependem do atributo
langcorreto para pronunciar e interpretar o conteúdo com precisão. - Renderização de Texto: O atributo
dir(direção) garante que o texto seja renderizado na ordem correta (por exemplo, da esquerda para a direita para inglês, da direita para a esquerda para árabe ou hebraico), o que é essencial para a legibilidade. - SEO: Os motores de busca usam o atributo
langpara determinar o idioma da sua página, ajudando a servir o conteúdo localizado correto nos resultados de busca.
Ao atualizar esses atributos dinamicamente quando o idioma muda, você garante uma experiência consistente e acessível para os usuários em todos os idiomas suportados.
Implementando o Hook
Crie um hook personalizado para gerenciar os atributos HTML. O hook escuta as mudanças de idioma e atualiza os atributos de acordo:
src/hooks/useI18nHTMLAttributes.tsxCopiar códigoCopiar o código para a área de transferência
Usando o Hook na Sua Aplicação
Integre o hook no seu componente principal para que os atributos HTML sejam atualizados sempre que o idioma mudar:
src/App.tsxCopiar códigoCopiar o código para a área de transferência
import type { FC } from "react"; import { IntlayerProvider, useIntlayer } from "react-intlayer"; import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes"; import "./App.css"; const AppContent: FC = () => { // Aplica o hook para atualizar os atributos lang e dir da tag <html> com base no idioma. useI18nHTMLAttributes(); // ... Resto do seu componente }; const App: FC = () => ( <IntlayerProvider> <AppContent /> </IntlayerProvider> ); export default App;Ao aplicar essas alterações, sua aplicação irá:
- Garantir que o atributo language (
lang) reflita corretamente o idioma atual, o que é importante para SEO e para o comportamento do navegador. - Ajustar a direção do texto (
dir) de acordo com o idioma, melhorando a legibilidade e usabilidade para idiomas com diferentes ordens de leitura. - Proporcionar uma experiência mais acessível, pois tecnologias assistivas dependem desses atributos para funcionar de forma otimizada.
- Acessibilidade: Leitores de tela e tecnologias assistivas dependem do atributo
Configurar TypeScript
O Intlayer usa a ampliação de módulos para obter os benefícios do TypeScript e tornar sua base de código mais robusta.


Certifique-se de que sua configuração do TypeScript inclua os tipos autogerados.
Copiar o código para a área de transferência
Configuração do Git
Recomenda-se ignorar os arquivos gerados pelo Intlayer. Isso permite evitar que eles sejam enviados para o seu repositório Git.
Para fazer isso, você pode adicionar as seguintes instruções ao seu arquivo .gitignore:
Copiar o código para a área de transferência
Extensão VS Code
Para melhorar sua experiência de desenvolvimento com Intlayer, você pode instalar a extensão oficial Intlayer VS Code Extension.
Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a Extensão oficial do Intlayer para VS Code. Instale a partir do 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.
Avançar
Para avançar, você pode implementar o editor visual ou externalizar seu conteúdo usando o CMS.
Perguntas Frequentes
react-i18next/i18next: a mais difundida, com namespaces JSON carregados em tempo de execução.react-intleLingui: formato de mensagem ICU, baseado em extração.Intlayer: a solução mais avançada. O conteúdo pode ser declarado em qualquer lugar da sua base de código (ao lado de cada componente ou centralizado) e compilado em tempo de build através dereact-scripts-intlayer, totalmente tipado, com tradução por IA, editor visual e CMS.
Como o Create React App empacota sua própria configuração do webpack, a integração se dá por meio da substituição direta do react-scripts por react-scripts-intlayer, em vez de um plugin registrado manualmente. Consulte por que Intlayer e o benchmark.
Muito menos do que uma configuração baseada em namespaces, porque uma página nunca baixa um catálogo que não renderiza. O compilador em tempo de build substitui as chamadas useIntlayer pelas entradas exatas que o componente utiliza. Assim, chaves e idiomas não utilizados são descartados, e 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 react-i18next ou 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 que react-i18next, react-intl e i18next, mas servidos pelos dicionários do Intlayer, alterando apenas os imports sem tocar no código dos componentes.
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 componentes, 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.
Para um fluxo de trabalho totalmente automatizado, o Intlayer Compiler faz o mesmo em tempo de build: ele analisa seu código JSX, TSX, Vue e Svelte a cada alteração, gera os dicionários e os mantém sincronizados via hot module replacement, dispensando completamente a manutenção manual de chaves.
Dois limites são importantes considerar: o compilador opera por análise estática, de modo que strings criadas apenas em tempo de execução (como códigos de erro de API ou campos dinâmicos de CMS) ficam fora de alcance. Além disso, ele precisa distinguir texto visível de lógicas de aplicação como className="active" ou status codes, exigindo algumas anotações em bases de código extensas. O comando extract evita ambos mantendo você no controle.
Cinco ferramentas, todas opcionais:
- Extensão VS Code: navegue de uma chave
useIntlayerdiretamente 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-intleuse-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-clieintlayer-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-textidentifica strings hardcoded, com regras adicionais para chaves estáticas e conteúdo não utilizado.
