Kookboek: Hugo Meertalige Site
Stel Hugo's meertalig systeem in met champollion dat zowel JSON-stringbestanden als Markdown-inhoudsvertaling afhandelt. Dit behandelt de volledige workflow van projectopzet tot productie-implementatie.
Wat u bouwt: Een Hugo-site met Engels, Frans en Japans — stringvertalingen via locale-bestanden, inhoudsvertalingen via Markdown-verwerking.
Projectstructuur
Champollion gebruikt Hugo's bestandsnaam-gebaseerde vertaalmodus. Vertaalde bestanden worden in dezelfde map geplaatst als het bronbestand, met een taalachtervoesel toegevoegd aan de bestandsnaam (bijv. about.fr.md):
my-hugo-site/
├── content/
│ └── en/
│ ├── _index.md
│ ├── _index.fr.md ← champollion generates
│ ├── _index.ja.md ← champollion generates
│ ├── about.md
│ ├── about.fr.md ← champollion generates
│ ├── about.ja.md ← champollion generates
│ └── blog/
│ ├── first-post.md
│ ├── first-post.fr.md ← champollion generates
│ └── first-post.ja.md ← champollion generates
├── i18n/
│ ├── en.json
│ ├── fr.json ← champollion generates
│ └── ja.json ← champollion generates
└── hugo.toml
:::note Hugo i18n-modi
Hugo ondersteunt twee vertaalstrategieën: bestandsnaam-gebaseerd (about.fr.md naast about.md) en map-gebaseerd (afzonderlijke content/fr/about.md-bomen). Champollion gebruikt bestandsnaam-gebaseerde vertaling omdat de getTargetContentPath()-functie doelpaden genereert door een taalachtervoesel aan de bronbestandsnaam toe te voegen. Zorg ervoor dat uw hugo.toml is geconfigureerd voor bestandsnaam-gebaseerde vertaling bij gebruik van champollion.
:::
Stap 1: Hugo configureren
defaultContentLanguage = 'en'
[languages]
[languages.en]
languageName = 'English'
weight = 1
[languages.fr]
languageName = 'Français'
weight = 2
[languages.ja]
languageName = '日本語'
weight = 3
Stap 2: Champollion configureren
Champollion heeft twee geconfigureerde zaken nodig: het pad naar het locale-bestand (voor JSON-strings) en de inhoudsmap (voor Markdown).
{
"version": 3,
"inputLocale": "en",
"localesDir": "./i18n",
"contentDir": "./content",
"model": "google/gemini-3.5-flash",
"pairs": {
"en:fr": { "method": "llm" },
"en:ja": { "method": "llm", "model": "openai/gpt-4o" }
},
"languages": {
"fr": { "name": "French", "register": "Formal (vous-form)" },
"ja": { "name": "Japanese", "register": "Polite/formal" }
}
}
Stap 3: Broninhoud aanmaken
Stringvertalingen (i18n/)
{
"nav": {
"home": "Home",
"about": "About",
"blog": "Blog",
"contact": "Contact"
},
"footer": {
"copyright": "© 2026 My Company. All rights reserved.",
"privacy": "Privacy Policy"
}
}
Markdown-inhoud (content/en/)
---
title: "About Us"
description: "Learn more about our team and mission"
date: 2026-01-15
---
We build software that helps businesses communicate across languages.
Our platform supports **real-time translation** for over 30 languages,
with specialized support for low-resource languages.
## Our Mission
Language should never be a barrier to understanding.
## The Team
{{< team-grid >}}
Stap 4: De synchronisatie uitvoeren
npx champollion sync
Champollion verwerkt beide typen:
- Stringbestanden (
i18n/en.json→i18n/fr.json,i18n/ja.json) - Inhoudsbestanden (
content/en/about.md→content/en/about.fr.md,content/en/about.ja.md)
Details van inhoudsvertaling
Bij het vertalen van Markdown doet champollion automatisch het volgende:
- Afschermen van codeblokken, shortcodes (
{{< ... >}}), inline code en HTML - Vertalen van front matter-velden (
title,description,summary) - Bewaren van alle overige front matter-velden (
date,draft,weight,tags) - Herstellen van afgeschermde blokken na vertaling
De Hugo-shortcode {{< team-grid >}} wordt onvertaald doorgegeven.
Stap 5: Verifiëren
# Preview the site
hugo server
# Check translation status
npx champollion status
Navigeer naar localhost:1313/fr/ en localhost:1313/ja/ om de vertaalde inhoud te bekijken.
Stap 6: Hugo-taalkiezer
Voeg een taalkiezer toe aan uw Hugo-lay-out:
<nav class="language-switcher">
{{ range $.Site.Home.AllTranslations }}
<a href="{{ .Permalink }}"
{{ if eq .Lang $.Site.Language.Lang }}class="active"{{ end }}>
{{ .Language.LanguageName }}
</a>
{{ end }}
</nav>
Inhoud gesynchroniseerd houden
Wanneer u Engelstalige inhoud bijwerkt, voert u de synchronisatie opnieuw uit. Champollion vertaalt alleen bestanden opnieuw die zijn gewijzigd:
# Edit content/en/about.md, then:
npx champollion sync
Het vergrendelingsbestand houdt inhoudshashen per bestand bij, zodat stabiele pagina's niet opnieuw worden vertaald.
Zie ook
- Handleiding inhoudsvertaling — Diepgaande uitleg over afscherming, front matter en randgevallen
- Framework-integratie — Next.js- en React-configuraties
- CI/CD-handleiding — Synchronisaties automatiseren bij push naar
content/en/ - Vertaalmethoden — Vergelijk LLM-, TM- en hybride vertaalstrategieën
- Ondersteunde talen — Volledige lijst van ondersteunde locales en taalcodes