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
- "Atualização do LocaleSwitcher, SEO, metadados"v7.3.1107/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 site Nuxt e Vue usando Intlayer | Internacionalização (i18n)
Índice
Por que Intlayer em vez de alternativas?
Comparado com soluções principais como @nuxtjs/i18n ou i18next, Intlayer é uma solução que vem com otimizações integradas como:
O Intlayer é otimizado para funcionar perfeitamente com Nuxt, oferecendo roteamento multilíngue, middleware para detecção de localidade, sitemap e todos os recursos necessários para dimensionar a internacionalização (i18n).
Em vez de carregar arquivos JSON enormes em suas páginas, carregue apenas o conteúdo necessário. O Intlayer ajuda a reduzir o tamanho do bundle e das páginas em até 50%.
Definir o escopo do conteúdo do seu aplicativo facilita a manutenção de aplicativos de grande escala. Você pode duplicar ou excluir uma única pasta de recursos sem o fardo mental de revisar toda a base de código de seu conteúdo. Além disso, o Intlayer é totalmente tipado (fully typed) para garantir a precisão do seu conteúdo.
A co-localização de conteúdo reduz o contexto necessário pelos Large Language Models (LLMs). O Intlayer também vem com um conjunto 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 tranquila para os agentes de IA.
Use a automação para traduzir seu pipeline de CI/CD usando o LLM de sua escolha às custas de 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 enormes a componentes pode levar a problemas de desempenho e reatividade. O Intlayer otimiza o carregamento do seu conteúdo no momento da construção.
Mais do que apenas uma solução i18n, o Intlayer fornece um [editor visual] auto-hospedado(/pt/doc/concept/editor) e um CMS completo para ajudá-lo a gerenciar seu conteúdo multilíngue em tempo real, facilitando a colaboração com tradutores, redatores e outros membros da equipe. O conteúdo pode ser armazenado local e/ou remotamente.
Guia passo a passo para configurar o Intlayer em uma aplicação Nuxt
Veja o Template da Aplicação no GitHub.
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, transpiração e comandos CLI.
vue-intlayer O pacote que integra o Intlayer com a aplicação Vue. Ele fornece os composables para os componentes Vue.
nuxt-intlayer O módulo Nuxt que integra o Intlayer com aplicações Nuxt. Ele fornece configuração automática, middleware para detecção de locale, gerenciamento de cookies e redirecionamento de URL.
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;Através deste arquivo de configuração, você pode configurar URLs localizadas, redirecionamento via middleware, nomes de cookies, a localização e extensão das suas declarações de conteúdo, desabilitar logs do Intlayer no console, e mais. Para uma lista completa dos parâmetros disponíveis, consulte a documentação de configuração.
Integre o Intlayer na sua Configuração Nuxt
Adicione o módulo intlayer à sua configuração Nuxt:
nuxt.config.tsCopiar códigoCopiar o código para a área de transferência
O módulo
nuxt-intlayergerencia automaticamente a integração do Intlayer com o Nuxt. Ele configura a construção da declaração de conteúdo, monitora os arquivos no modo de desenvolvimento, fornece middleware para detecção de locale e gerencia o roteamento por localeizado.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.
Utilize o Intlayer no Seu Código
Acesse seus dicionários de conteúdo em toda a sua aplicação Nuxt usando o composable
useIntlayer:components/HelloWorld.vueCopiar códigoCopiar o código para a área de transferência
Acessando Conteúdo no Intlayer
O Intlayer oferece diferentes APIs para acessar seu conteúdo:
Sintaxe baseada em componentes (recomendada): Use a sintaxe
<myContent />, ou<Component :is="myContent" />para renderizar o conteúdo como um Nó Intlayer. Isso integra-se perfeitamente com o Editor Visual e o CMS.Sintaxe baseada em string: Use
{{ myContent }}para renderizar o conteúdo como texto simples, sem suporte ao Editor Visual.Sintaxe HTML bruto: Use
<div v-html="myContent" />para renderizar o conteúdo como HTML bruto, sem suporte ao Editor Visual.Sintaxe de desestruturação: O composable
useIntlayerretorna um Proxy com o conteúdo. Esse proxy pode ser desestruturado para acessar o conteúdo mantendo a reatividade.- Use
const content = useIntlayer("myContent");e{{ content.myContent }}/<content.myContent />. - Ou use
const { myContent } = useIntlayer("myContent");e{{ myContent}}/<myContent/>para desestruturar o conteúdo.
- Use
Alterar o idioma do seu conteúdo
OpcionalPara alterar o idioma do seu conteúdo, você pode usar a função
setLocalefornecida pelo composableuseLocale. Essa função permite definir o locale da aplicação e atualizar o conteúdo de acordo.Crie um componente para alternar entre idiomas usando
NuxtLink. Usar links em vez de botões para a troca de locale é uma boa prática para SEO e descoberta da página, pois permite que os motores de busca rastreiem e indexem todas as versões localizadas das suas páginas:components/LocaleSwitcher.vueCopiar códigoCopiar o código para a área de transferência
Usar
NuxtLinkcom atributoshrefapropriados (viagetLocalizedUrl) garante que os motores de busca possam descobrir todas as variantes de idioma das suas páginas. Isso é preferível à troca de idioma apenas via JavaScript, que os rastreadores de motores de busca podem não seguir.Em seguida, configure seu
app.vuepara usar layouts:app.vueCopiar códigoCopiar o código para a área de transferência
Adicionar Roteamento Localizado à sua aplicação
OpcionalO Nuxt gerencia automaticamente o roteamento por localeizado ao usar o módulo
nuxt-intlayer. Isso cria rotas para cada idioma automaticamente com base na estrutura do diretório das suas páginas.Exemplo:
plaintextCopiar códigoCopiar o código para a área de transferência
Para criar páginas localizadas, basta criar seus arquivos Vue no diretório
pages/. Aqui estão dois exemplos de páginas:Página inicial (
pages/index.vue):pages/index.vueCopiar códigoCopiar o código para a área de transferência
Página Sobre (
pages/about.vue):pages/about.vueCopiar códigoCopiar o código para a área de transferência
Nota:
useHeadé importado automaticamente no Nuxt. Você pode acessar os valores do conteúdo usando.value(reativo) ou.raw(string primitiva), dependendo das suas necessidades.O módulo
nuxt-intlayerirá automaticamente:- Detectar o idioma preferido do usuário
- Gerenciar a troca de idioma via URL
- Definir o atributo
<html lang="">apropriado - Gerenciar cookies de idioma
- Redirecionar os usuários para a URL localizada apropriada
Criando um Componente de Link Localizado
OpcionalPara garantir que a navegação da sua aplicação respeite o idioma atual, você pode criar um componente personalizado
Links. Este componente adiciona automaticamente o prefixo do idioma atual às URLs internas, o que é essencial para SEO e descoberta das páginas.components/Links.vueCopiar códigoCopiar o código para a área de transferência
Então use este componente em toda a sua aplicação:
layouts/default.vueCopiar códigoCopiar o código para a área de transferência
Ao usar
NuxtLinkcom caminhos localizados, você garante que:- Os motores de busca possam rastrear e indexar todas as versões linguísticas das suas páginas
- Os usuários possam compartilhar URLs localizadas diretamente
- O histórico do navegador funcione corretamente com URLs prefixadas pelo locale
Gerenciar Metadados e SEO
OpcionalO Nuxt oferece excelentes capacidades de SEO através do composable
useHead(auto-importado). Você pode usar o Intlayer para gerenciar metadados localizados utilizando o acessador.rawou.valuepara obter o valor primitivo da string:pages/about.vueCopiar códigoCopiar o código para a área de transferência
Alternativamente, você pode usar a função
import { getIntlayer } from "intlayer"para obter o conteúdo sem reatividade do Vue.Acessando valores do conteúdo:
- Use
.rawpara obter o valor primitivo da string (não reativo) - Use
.valuepara obter o valor reativo - Use a sintaxe de componente
<content.key />para suporte ao Visual Editor
Crie a declaração de conteúdo correspondente:
pages/about-page.content.tsCopiar códigoCopiar o código para a área de transferência
import { t, type Dictionary } from "intlayer"; const aboutPageContent = { key: "about-page", content: { metaTitle: t({ en: "Sobre Nós - Minha Empresa", fr: "À Propos - Ma Société", es: "Acerca de Nosotros - Mi Empresa", }), metaDescription: t({ en: "Saiba mais sobre nossa empresa e nossa missão", fr: "En savoir plus sur notre société et notre mission", es: "Conozca más sobre nuestra empresa y nuestra misión", }), title: t({ en: "Sobre Nós", fr: "À Propos", es: "Acerca de Nosotros", }), }, } satisfies Dictionary; export default aboutPageContent;- Use
Criar um Layout com Navegação
OpcionalOs layouts do Nuxt permitem definir uma estrutura comum para suas páginas. Crie um layout padrão que inclua o seletor de idioma e a navegação:
layouts/default.vueCopiar códigoCopiar o código para a área de transferência
O componente
Links(mostrado abaixo) garante que os links de navegação interna sejam automaticamente localizados.
Configuração do Git
É recomendado ignorar os arquivos gerados pelo Intlayer. Isso permite que você evite comitá-los no seu repositório Git.
Para isso, você pode adicionar as seguintes instruções ao seu arquivo .gitignore:
Copiar o código para a área de transferência
Extensão do VS Code
Para melhorar sua experiência de desenvolvimento com o Intlayer, você pode instalar a extensão oficial Intlayer VS Code Extension.
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 Intlayer VS Code Extension.
Ir Além
Para ir mais longe, você pode implementar o editor visual ou externalizar seu conteúdo usando o CMS.
Perguntas Frequentes
Duas opções realistas:
@nuxtjs/i18n: o módulo estabelecido, construído sobre ovue-i18n, com arquivos de idioma carregados por página e uma superfície de configuração extensa. Ovue-i18nnão possui isolamento nativo de mensagens por namespace, de modo que cada página acaba empacotando mensagens de outras páginas e esse bundle cresce conforme mais páginas são criadas.Intlayer: a solução mais avançada. O conteúdo é declarado em qualquer lugar da sua base de código (ao lado de cada componente ou centralizado) e compilado em tempo de build, totalmente tipado, com roteamento ciente de locales, tradução por IA, editor visual e CMS.
A grande diferença é onde o conteúdo reside. O @nuxtjs/i18n centraliza tudo em arquivos locales/*.json, enquanto o Intlayer posiciona os dicionários junto com os componentes que os renderizam, enviando apenas as entradas que a página realmente usa e permitindo mover ou deletar pastas de funcionalidades de forma atômica. Consulte por que Intlayer e o benchmark Vue i18n.
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 (SSR) resolve suas mensagens diretamente no servidor, e 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 soluções tradicionais, 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 através do guia de migração do @nuxtjs/i18n. Ou você pode manter sua API atual integralmente: os adaptadores de compatibilidade (compat adapters) expõem exatamente a mesma interface que o vue-i18n, porém alimentados 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 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
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.
