biagiojs

Internazionalizzazione

biagiojs genera una variante statica per locale dallo stesso progetto. La lingua default sta su /, le altre su /<lang>/…. SEO (hreflang, sitemap x-default) è automatica.

Config

site: {
  baseUrl: 'https://example.com',
  locales: ['en', 'it'],
  defaultLocale: 'en',
}

biagio build emette /about/ e /it/about/ (e ogni altra pagina due volte).

Traduzioni

Le stringhe UI stanno in locales/<lang>.json (chiavi annidate, dot-path):

{
  "hero": { "title": "Corri più leggero" },
  "cta": { "buy": "Compra — {price}" }
}

Nei .page.js:

export default function ({ t, locale }) {
  return { graph, page: { title: t('hero.title') } };
}

Nei template .biagio:

<h1>{{t:hero.title}}</h1>

Interpolazione: t('cta.buy', { price: '€49' }).

Content collection

Il Markdown segue la stessa convenzione di questo sito docs:

content/blog/post.md       → /blog/post/     (locale default)
content/blog/it/post.md    → /it/blog/post/  (italiano)

getCollection('content/blog') restituisce solo i file del locale in build.

SEO

Con site.locales, ogni pagina ottiene:

  • <link rel="alternate" hreflang="…"> per ogni lingua
  • hreflang="x-default" verso l'URL della lingua default
  • Voci sitemap con alternates xhtml:link

Vedi SEO automatica per JSON-LD e Open Graph.

Optimizer per locale

I dati di campo possono differire per mercato. Metti override in reports/<lang>/:

reports/
  crux.json              # fallback globale
  analytics.json
reports/it/
  analytics.json         # CTR italiano → sovrascrive il globale per build /it/

Durante la build per it, i file in reports/it/ si fondono sopra reports/. I pattern di click tedeschi non distorcono l'idratazione italiana.

Selettore lingua

Questo sito docs usa docs/i18n-ui.js per il toggle EN·IT — un pattern piccolo da copiare nel layout.

Questo sito docs

biagiojs/docs/ è l'implementazione di riferimento: locales/en.json + locales/it.json, content/docs/.md + content/docs/it/.md, e hreflang su ogni pagina.