innhold/content/docs/utvikling/hvordan/multilingual-sites/page.md

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å.