🌱 Seed

i18n

O Seed pode publicar um site em vários idiomas a partir de uma única árvore de páginas, gerando as URLs por prefixo, o hreflang e reescrevendo os links internos automaticamente.

ℹ️

Não confunda com o hreflang: manual do front matter (veja SEO e Metadados) — aquele é para apontar pra URLs que o Seed não constrói (outro domínio, outra build). Esta página é sobre o Seed construindo e servindo as próprias variantes de idioma.

Configuração

A chave i18n.sources no seed.yaml declara, para cada idioma de origem, quais variantes existem e em qual prefixo de URL cada uma vive:

```yaml
i18n:
  sources:
    pt-BR:
      alternates:
        en: en
        es: es
```

Com essa configuração, uma página em src/sobre.seed (locale pt-BR, sem prefixo) ganha variantes em /en/sobre.html e /es/sobre.html.

O prefixo precisa ser um único segmento seguro — letras minúsculas e números, sem barra — e não pode colidir com static, assets, __reload, __help, dist ou api. Prefixos e locales duplicados entre grupos são erro de build.

Como funciona

Toda página .seed/.md descoberta em src/ já é uma página normal, com seu locale definido pelo prefixo do caminho: src/en/sobre.seed é en, src/sobre.seed fica no locale padrão (lang: do seed.yaml). O i18n.sources não cria páginas do zero — ele só declara quais páginas são a mesma página em locales diferentes.

Pra cada variante declarada, o Seed olha se já existe uma página explícita naquele prefixo:

SituaçãoResultado
Existe src/en/sobre.seedEssa página vence — é a versão en, com o conteúdo que você escreveu.
Não existeO Seed duplica o HTML já renderizado da página de origem para /en/sobre.html, só trocando lang e og:locale. É um placeholder, não uma tradução — o conteúdo continua no idioma original até alguém escrever src/en/sobre.seed.

Cada grupo de variantes recebe um <link rel="alternate" hreflang="..."> por locale, mais um hreflang="x-default" apontando pro locale padrão do site (ou, se ele não fizer parte do grupo, pra primeira variante sem prefixo):

```html
<link rel="alternate" hreflang="pt-BR" href="https://meusite.com/sobre.html">
<link rel="alternate" hreflang="en" href="https://meusite.com/en/sobre.html">
<link rel="alternate" hreflang="es" href="https://meusite.com/es/sobre.html">
<link rel="alternate" hreflang="x-default" href="https://meusite.com/sobre.html">
```

Links href internos também são reescritos: um link pra /contato.html dentro da variante en vira /en/contato.html automaticamente, desde que contato também faça parte de um grupo i18n. Links pra /static/... e URLs externas nunca são tocados.

Por página

O comportamento padrão do grupo pode ser desligado ou sobrescrito no front matter de uma página específica:

Front matterEfeito
i18n: falseEssa página não gera variantes e não recebe hreflang — fica de fora da expansão inteira.
i18n: {en: en-gb}Sobrescreve os alternates só dessa página, ignorando o que seed.yaml define pro grupo dela.

sitemap: false e noindex: true na página de origem propagam pras variantes geradas automaticamente — se a origem está fora do sitemap, as duplicatas também ficam.

Feito com ❤️ e Seed