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 linguahreflang="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.