Lokalisierung
Sprachen hinzufügen, Inhalte übersetzen und URL-Muster für jede Locale konfigurieren.
Eine neue Locale hinzufügen
local/content/_site.yaml öffnen und einen Eintrag zur locales-Map hinzufügen:
site:
locales:
en:
label: "English"
og_locale: en_US
date_format: "M d, Y"
tagline: "static. simple. yours."
# tagline_commands: ["git push", "ddev build"] # optional: im Hero unter dem Tagline angezeigt
# font_preload: true # optional: Inter + JetBrains Mono vorladen
de:
label: "Deutsch"
og_locale: de_DE
date_format: "d.m.Y"
tagline: "statisch. einfach. deins."
pl: # diese Demo-Site enthält auch Polnisch
label: "Polski"
og_locale: pl_PL
date_format: "d.m.Y"
tagline: "statyczny. prosty. twój."
fr: # und Französisch
label: "Français"
og_locale: fr_FR
date_format: "d/m/Y"
tagline: "statique. simple. vôtre."
Das ist alles. notACMS wird:
dezum Sprachumschalter hinzufügenhreflang-Tags für alle Seiten mit einer DE-Übersetzung generieren- DE-URLs mit
/de/präfixieren (oder deinen benutzerdefinierten Pfad verwenden)
Dasselbe gilt für fr, pl oder jede andere Locale, die Sie hinzufügen.
Content Co-location
Übersetzungen befinden sich neben dem Quellinhalt. Jede Locale ist eine separate Markdown-Datei im selben Verzeichnis:
pages/about/
├── en.md ← Englisch
├── de.md ← Deutsch
├── pl.md ← Polnisch
└── fr.md ← Französisch
Das slug-Feld im Frontmatter definiert den URL-Pfad für jede Locale. Wenn leer (oder bei Index-Seiten weggelassen), wird die Homepage-URL verwendet (/ für die Standard-Locale, /{locale}/ für andere). URLs stammen immer aus dem slug-Frontmatter-Feld — nicht aus Verzeichnispfaden.
URL-Überschreibungen
Standardmäßig wird dem EN-Pfad das Locale-Präfix vorangestellt: /de/about/, /pl/about/, /fr/about/. Für einen vollständig benutzerdefinierten Pfad einen Eintrag in _routes.yaml hinzufügen:
# local/content/_routes.yaml
routes:
blog_list:
de: /beitraege/
pl: /wpisy/
fr: /articles/
blog_list_paginated:
de: /beitraege/seite/{page}/
pl: /wpisy/strona/{page}/
fr: /articles/page/{page}/
URL-Überschreibungen auf Seitenebene werden im Frontmatter gesetzt:
---
title: "Über uns"
slug: ueber-uns
---
Das ergibt /de/ueber-uns/ anstelle von /de/about/.
Tag-Übersetzungen
Tags können in _tags.yaml übersetzt werden:
# local/content/_tags.yaml
release:
de: veröffentlichung
pl: wydanie
fr: version
Der kanonische Tag (EN-Schlüssel) wird intern verwendet. Der übersetzte Wert erscheint in der Benutzeroberfläche für jede Locale. Tags, die in allen Locales identisch sind, brauchen keinen Eintrag — liste nur die abweichenden auf.
Verhalten des Sprachumschalters
Der Sprachumschalter in der Navigation löst automatisch die korrekte URL für jede andere Locale über die Twig-Funktion lang_switch_urls() auf. Die Fallback-Kette, in dieser Reihenfolge:
- Translation-Map — sucht eine übersetzte Version der aktuellen Seite über das
translation_mapGlobal - Controller-Override — verwendet eine explizite
lang_switch_url, falls gesetzt (z. B. Tag-Seiten, bei denen der Tag in der Ziel-Locale möglicherweise nicht existiert) - Archiv — wenn auf einer Archivseite, verlinkt auf dasselbe Archiv in der Ziel-Locale
- Paginierte Blog-Liste — wenn auf Seite 2+, verlinkt auf dieselbe Seite in der Ziel-Locale
- Blog-Liste — wenn auf einer beliebigen Blog-Listenseite, verlinkt auf die Blog-Liste in der Ziel-Locale
- Startseite — letzter Fallback, wenn kein Blog- oder Übersetzungskontext verfügbar ist
Der Umschalter erscheint nur, wenn 2 oder mehr konfigurierte Locales vorhanden sind und mindestens eine weitere Locale definiert ist.
Fallback-Strategie
Wenn eine Seite auf EN, aber nicht auf DE existiert, wird notACMS:
- Keine DE-URL für diese Seite generieren
- Sie nicht in die DE-Sitemap aufnehmen
- Einen Link zur DE-Startseite im Sprachumschalter anzeigen (nicht zur EN-Version der Seite)
Das bedeutet, du kannst schrittweise übersetzen — EN ist immer vollständig, andere Locales wachsen mit der Zeit. Dasselbe gilt für FR oder jede andere Locale.
hreflang und SEO
notACMS generiert automatisch <link rel="alternate" hreflang="..."> Tags im <head> für alle Seiten mit Übersetzungen. Das og_locale-Feld in der Site-Konfiguration steuert das Open-Graph-Locale-Format (en_US, de_DE usw.).
<link rel="alternate" hreflang="en" href="https://example.com/about/">
<link rel="alternate" hreflang="de" href="https://example.com/de/about/">
<link rel="alternate" hreflang="fr" href="https://example.com/fr/about/">
<link rel="alternate" hreflang="x-default" href="https://example.com/about/">
Tipp: Stets eine
x-default-Übersetzung bereitstellen, die auf die primäre Sprache zeigt. notACMS übernimmt dies für die Standard-Locale automatisch.