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ê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
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 habilidades do agente, 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
npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer initintlayer
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
import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({ // ... Sua configuração Nuxt existente modules: ["nuxt-intlayer"],});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
<script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({ msg: String,});const { count, edit, checkOut, nuxtIntlayer, learnMore, nuxtDocs, readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template> <h1>{{ msg }}</h1> <div class="card"> <button type="button" @click="countRef++"> <count /> {{ countRef }} </button> <p v-html="edit"></p> </div> <p> <checkOut /> <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank" >Nuxt</a >, <nuxtIntlayer /> </p> <p> <learnMore /> <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>. </p> <p class="read-the-docs"><readTheDocs /></p> <p class="read-the-docs">{{ readTheDocs }}</p></template>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
<script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt importa automaticamente useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template> <nav class="locale-switcher"> <NuxtLink v-for="localeEl in availableLocales" :key="localeEl" :to="getLocalizedUrl(route.fullPath, localeEl)" class="locale-link" :class="{ 'active-locale': localeEl === locale }" @click="setLocale(localeEl)" > {{ getLocaleName(localeEl) }} </NuxtLink> </nav></template>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
<template> <NuxtLayout> <NuxtPage /> </NuxtLayout></template>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
pages/├── index.vue → /, /fr, /es├── about.vue → /about, /fr/about, /es/about└── contact/ └── index.vue → /contact, /fr/contact, /es/contactPara 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
<script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({ title: content.metaTitle.raw, meta: [ { name: "description", content: content.metaDescription.raw, }, ],});</script><template> <h1><content.title /></h1></template>Página Sobre (
pages/about.vue):pages/about.vueCopiar códigoCopiar o código para a área de transferência
<script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({ title: content.metaTitle.raw, // Use .raw para acesso a string primitiva meta: [ { name: "description", content: content.metaDescription.raw, // Use .raw para acesso a string primitiva }, ],});</script><template> <h1><content.title /></h1></template>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
<script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props { href: string; locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Calcula o caminho finalconst finalPath = computed(() => { // 1. Verifica se o link é externo const isExternal = /^https?:\/\//.test(props.href || ""); // 2. Se for externo, retorna como está (NuxtLink cuida da geração da tag <a>) if (isExternal) return props.href; // 3. Se for interno, localize a URL const targetLocale = props.locale || currentLocale.value; return getLocalizedUrl(props.href, targetLocale);});</script><template> <NuxtLink :to="finalPath" v-bind="$attrs"> <slot /> </NuxtLink></template>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
<script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template> <div> <header> <LocaleSwitcher /> </header> <main> <slot /> </main> <Links href="/">Início</Links> <Links href="/about">Sobre</Links> </div></template>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
<script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead é auto-importado no Nuxtconst content = useIntlayer("about-page");useHead({ title: content.metaTitle.raw, // Use .raw para acesso ao valor primitivo da string meta: [ { name: "description", content: content.metaDescription.raw, // Use .raw para acessar a string primitiva }, ],});</script><template> <h1><content.title /></h1></template>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
(Opcional) Passo 6b: Criar um Layout com Navegação
Os 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:
Copiar o código para a área de transferência
<script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template> <div> <header> <LocaleSwitcher /> </header> <main> <slot /> </main> <Links href="/">Início</Links> <Links href="/about">Sobre</Links> </div></template>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
# Ignorar os arquivos gerados pelo Intlayer.intlayerExtensã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.