| name | site-i18n |
| description | Internationalization (i18n) with next-intl and App Router static export. Use when adding/editing translations, adding a new locale, configuring locale routing, or fixing missing translation keys. This site supports pt (default) and en. |
site-i18n
Guia de internacionalização para este projeto Next.js App Router com next-intl e export eståtico.
Stack de i18n
- next-intl â lib de i18n para App Router
- Locales suportados:
pt (padrĂŁo) e en
- Estratégia: rotas com prefixo de locale (
/pt/âŠ, /en/âŠ)
- Export estĂĄtico: usa
generateStaticParams para gerar todas as rotas
Estrutura
src/
âââ app/
â âââ [locale]/ â segmento dinĂąmico de locale
â âââ layout.tsx â NextIntlClientProvider + ThemeProvider
â âââ page.tsx
âââ i18n/
â âââ request.ts â configuração do next-intl
â âââ routing.ts â definição de locales e defaultLocale
âââ messages/
âââ pt.json â traduçÔes em portuguĂȘs
âââ en.json â traduçÔes em inglĂȘs
Quando usar (gatilhos)
- "Adicione tradução para X", "a tradução estå errada", "adicione suporte a outro idioma".
- Erros do tipo "Missing translation" ou "NEXT_LOCALE not found".
- Ajustes em
src/i18n/routing.ts, src/messages/*.json.
PrincĂpios e regras
CrĂtico (nĂŁo negociar)
- Toda string visĂvel ao usuĂĄrio deve usar
useTranslations() ou getTranslations().
- Nunca hardcode texto em componentes â sempre usar chaves de tradução.
- Ao adicionar uma chave em
pt.json, adicionar a mesma em en.json.
PadrÔes recomendados
- Organizar as chaves por namespace/componente:
{ "Home": { "title": "..." } }.
- Para conteĂșdo Markdown, o locale Ă© computado automaticamente do caminho (
content/{tipo}/{locale}/). Nunca usar o campo locale: no frontmatter â ele nĂŁo existe no schema.
- Para filtrar conteĂșdo por locale, usar o campo
locale computado: allPosts.filter(p => p.locale === locale).
- Para pĂĄginas dinĂąmicas, usar
generateStaticParams exportando todos os locales.
Cheat sheet
Usar traduçÔes em Server Component
import { getTranslations } from 'next-intl/server'
export default async function Page() {
const t = await getTranslations('Home')
return <h1>{t('title')}</h1>
}
Usar traduçÔes em Client Component
'use client'
import { useTranslations } from 'next-intl'
export function MyComponent() {
const t = useTranslations('Home')
return <p>{t('description')}</p>
}
Gerar rotas estĂĄticas para todos os locales
import { routing } from '@/i18n/routing'
export function generateStaticParams() {
return routing.locales.map((locale) => ({ locale }))
}
Workflow (faça em ordem)
- Adicionar/editar chave â atualizar
src/messages/pt.json e src/messages/en.json.
- Usar no componente â via
useTranslations() (client) ou getTranslations() (server).
- Validar â
yarn dev para verificar sem erros de tradução faltante.
- Build â
yarn build para confirmar que as rotas estĂĄticas sĂŁo geradas corretamente.
Checklist
Consulte também
site-nextjs-static-export â build estĂĄtico e export
site-contentlayer-authoring â estrutura de pastas {tipo}/{locale}/ e schema