4 KiB
Hvordan lage flerspråklige sider
Lær hvordan du lager nettsider med støtte for flere språk i PnP.
Konfigurere språk
Steg 1: Rediger config.ini
Åpne /app/custom/config.ini (eller lag den hvis den ikke eksisterer):
[languages]
default = "no"
available = "no,en"
default: Standardspråket (vises uten språkprefiks i URL)available: Kommaseparert liste over tilgjengelige språk
Steg 2: Lag språkfiler
Opprett oversettelser i /app/custom/languages/:
no.ini:
home = "Hjem"
read_more = "Les mer"
en.ini:
home = "Home"
read_more = "Read more"
Disse er tilgjengelige i maler via $translations-variabelen.
Lage flerspråklig innhold
Metode 1: Språkspesifikke filer
Lag separate filer for hvert språk:
/content/om/
├── page.md (Norsk)
├── page.en.md (Engelsk)
└── metadata.ini
page.md:
# Om oss
Vi er et selskap som...
page.en.md:
# About us
We are a company that...
Metode 2: Metadata-seksjoner
Bruk metadata.ini for å oversette titler og sammendrag:
title = "Om oss"
summary = "Lær mer om oss"
menu = true
menu_order = 1
[en]
title = "About us"
summary = "Learn more about us"
slug = "about"
URL-struktur
Standardspråket bruker ingen språkprefiks:
/om/ → Norsk (standard)
/en/about/ → Engelsk
Merk at den engelske versjonen bruker slug = "about" fra metadata.
Navigasjon
PnP bygger automatisk navigasjon basert på menu = true i metadata.ini:
<!-- I base.php -->
<nav>
<a href="<?= $currentLang !== $defaultLang ? "/$currentLang/" : "/" ?>">
<?= $homeLabel ?>
</a>
<?php foreach ($navigation as $item): ?>
<a href="<?= $item['url'] ?>"><?= $item['title'] ?></a>
<?php endforeach; ?>
</nav>
Språkvelger
Lag en språkvelger i basismalen:
<div class="language-switcher">
<a href="/" <?= $currentLang === 'no' ? 'aria-current="page"' : '' ?>>NO</a>
<a href="/en<?= $requestPath ? '/' . $requestPath : '' ?>"
<?= $currentLang === 'en' ? 'aria-current="page"' : '' ?>>EN</a>
</div>
Bruke oversettelser i maler
Oversettelser fra språkfilene er tilgjengelige i $translations:
<a href="#"><?= $translations['read_more'] ?? 'Read more' ?></a>
Bruk alltid en fallback-verdi for tilfeller der oversettelsen mangler.
Beste praksis
Konsistent mappestruktur
Bruk samme mappestruktur for alle språk:
/content/
├── om/
│ ├── page.md
│ └── page.en.md
└── kontakt/
├── page.md
└── page.en.md
Bruk slugs for oversatte URL-er
For rene URL-er, bruk slug i metadata:
[en]
slug = "about" # /en/about/ i stedet for /en/om/
Hold metadata samlet
Bruk én metadata.ini per mappe med seksjoner for hvert språk:
title = "Tittel"
[en]
title = "Title"
[de]
title = "Titel"
Synkroniser innhold
Sørg for at alle språkversjoner har samme struktur og at alle sider er oversatt.
Eksempel: Fullstendig flerspråklig side
/content/blogg/
├── metadata.ini
├── page.md
├── page.en.md
└── 2025-01-15-mitt-innlegg/
├── metadata.ini
├── article.md
├── article.en.md
└── cover.jpg
blogg/metadata.ini:
title = "Blogg"
menu = true
menu_order = 2
[en]
title = "Blog"
slug = "blog"
blogg/2025-01-15-mitt-innlegg/metadata.ini:
title = "Mitt første innlegg"
date = "2025-01-15"
summary = "Dette er mitt første innlegg"
[en]
title = "My first post"
summary = "This is my first post"
Feilsøking
Innhold vises ikke for ikke-standardspråk
Kontroller at du har enten:
- En språkspesifikk fil (f.eks.
page.en.md) - ELLER metadata med språkseksjon som inneholder
title
Navigasjon viser feil språk
Sørg for at menu = true er satt i base-seksjonen av metadata.ini, ikke i språkseksjonen.
URL-er fungerer ikke
Sjekk at slug matcher URL-segmentet du prøver å nå.