Skip to content

Übersetzungen und Routing

FG Multilang WP verwaltet eine Sprachversion als eigenständigen WordPress-Post beziehungsweise Taxonomie-Begriff. Zusammengehörige Objekte werden über eine gemeinsame Übersetzungsgruppe verknüpft.

Für Posts und Begriffe speichert das Plugin unter anderem:

  • Sprachcode,
  • Gruppen-ID,
  • optional die ID des Quellobjekts,
  • Übersetzungsstatus.

Die zentrale Zuordnung liegt in der Tabelle fgml_translations. Ergänzend werden Meta-Werte wie _fgml_lang, _fgml_group, _fgml_source und _fgml_status an den WordPress-Objekten geführt.

Der Code kennt vier Statuswerte:

Status Bedeutung in der Oberfläche
translated Übersetzt
draft Entwurf
needs_update Aktualisieren
missing Fehlt

Beim normalen Speichern eines übersetzbaren Posts wird dessen eigener Status auf translated gesetzt.

Ist Übersetzungsstatus automatisch pflegen aktiviert, markiert das Speichern einer Quellversion andere Sprachversionen derselben Gruppe als needs_update. Einträge mit Status draft werden dabei nicht automatisch umgestellt.

Beim Anlegen einer fehlenden Sprachversion erzeugt FG Multilang WP einen neuen WordPress-Post im Status draft.

Der neue Entwurf übernimmt aus dem Quellpost:

  • Inhalt,
  • Excerpt,
  • Kommentar- und Ping-Status,
  • Passwort,
  • Menü-Reihenfolge,
  • Taxonomie-Zuordnungen,
  • einen Großteil der Post-Metadaten,
  • das Beitragsbild.

Titel und Slug erhalten zunächst den Zielsprachcode, beispielsweise [EN] beziehungsweise -en.

Als Autor verwendet das Plugin den aktuell angemeldeten Benutzer. Ist keine Benutzer-ID verfügbar, wird der Autor des Quellposts übernommen. Für den neuen Entwurf werden aktuelle Datumswerte gesetzt.

Besitzt der Quellpost einen Parent, verwendet die neue Sprachversion den bereits vorhandenen übersetzten Parent. Gibt es keine entsprechende Parent-Übersetzung, wird post_parent auf 0 gesetzt.

Beim Kopieren von Taxonomien versucht das Plugin, für jeden zugewiesenen Begriff die entsprechende Sprachversion zu ermitteln. Ist keine verknüpfte Übersetzung vorhanden, bleibt der ursprüngliche Begriff zugewiesen.

FG Multilang WP kopiert normale Post-Metadaten mit einigen ausgeschlossenen internen Schlüsseln. Wenn ACF verfügbar ist, werden bestimmte Referenzfelder zusätzlich auf vorhandene Zielsprachobjekte umgebogen.

Die ACF-Details stehen unter ACF, Medien und Strings.

Übersetzung eines Taxonomie-Begriffs anlegen

Section titled “Übersetzung eines Taxonomie-Begriffs anlegen”

Für aktivierte Taxonomien kann ebenfalls ein neuer Begriff als Sprachversion erzeugt werden.

Der neue Begriff übernimmt:

  • Beschreibung,
  • einen sprachergänzten Namen,
  • einen sprachergänzten Slug,
  • einen bereits übersetzten Parent, sofern vorhanden,
  • Term-Metadaten mit Ausnahme der _fgml_-Meta-Werte.

Term-Metadaten werden dabei allgemein kopiert. Eine ACF-spezifische Relink-Logik wie bei Posts ist für Term-Meta im aktuellen Code nicht implementiert.

Mit aktivierter Option Frontend-Queries filtern ergänzt das Plugin WP_Query-Abfragen für übersetzbare Post Types um einen Meta-Filter.

Für die Default-Sprache werden berücksichtigt:

  • Posts mit _fgml_lang gleich der Default-Sprache,
  • Posts ohne _fgml_lang.

Dadurch können bestehende Inhalte vor der initialen Vorbereitung weiterhin in der Standardsprache erscheinen.

Für eine Zusatzsprache muss _fgml_lang dem aktuellen Sprachcode entsprechen.

Das gleiche Grundprinzip wird für Abfragen aktivierter Taxonomien über pre_get_terms angewendet.

Interne Tools und WP-CLI verwenden die Query-Variable fgml_skip_language_filter, um bewusst alle Sprachen abzufragen. Entwickler können dieselbe Variable bei eigenen WP_Query- oder get_terms()-Abfragen einsetzen. Siehe Entwicklerschnittstellen.

Die Sprache wird in dieser Reihenfolge ermittelt:

  1. Query-Variable fgml_lang, wenn sie einer bekannten Sprache entspricht.
  2. Erstes Pfadsegment der aktuellen Request-URI, wenn es dem Prefix einer aktiven Sprache entspricht.
  3. Default-Sprache als Fallback.

Die Default-Sprache benötigt keinen Prefix.

Ist Permalinks übersetzen aktiv, filtert FG Multilang WP WordPress-Permalinks und Archivlinks.

Bekannte Sprachprefixe werden aus URLs der Default-Sprache entfernt.

Beispiel:

/beispiel/

Der konfigurierte Sprachprefix wird vorangestellt.

Beispiel:

/en/example/

Für öffentliche, aktivierte Custom Post Types können pro Sprache eigene Basisslugs verwendet werden.

Beispiel:

/kurse/rueckbildung/
/en/course/postnatal-exercises/

Das Plugin registriert für Zusatzsprachen Rewrite-Regeln nach dem Muster:

/{sprachprefix}/{cpt-slug}/{post-slug}/

Diese spezielle Regel gilt nicht für page und post.

Für aktivierte Taxonomien können ebenfalls sprachabhängige Basisslugs verwendet werden.

Beispiel:

/kategorie/news/
/en/category/news/

Für jede aktive Zusatzsprache registriert das Plugin eine Startseitenregel wie /en/.

Wenn WordPress eine statische Startseite verwendet, versucht FG Multilang WP, die verknüpfte Sprachversion dieser Seite zu laden. Ist keine Übersetzung vorhanden, verwendet die Request-Zuordnung die ursprüngliche Startseite.

Für den Sprachumschalter gelten zusätzlich die Regeln aus Menüs und Sprachumschalter, insbesondere das Verhalten bei fehlender veröffentlichter Übersetzung.

Mit aktivierter Option Interne Inhaltslinks übersetzen verarbeitet das Plugin href-Attribute in:

  • the_content,
  • formatierten ACF-WYSIWYG-Werten.

In Zusatzsprachen wird ein interner Link nur ersetzt, wenn:

  • die URL zur eigenen WordPress-Website gehört,
  • WordPress daraus einen Post ermitteln kann,
  • eine Zielsprachversion verknüpft ist,
  • diese Zielsprachversion öffentlich sichtbar ist.

Query-Strings und Fragmente werden übernommen. Relative Links bleiben relativ.

Nicht verarbeitet werden insbesondere externe URLs, reine Hash-Links sowie mailto:, tel:, sms: und javascript:.

Änderungen an Sprachen, Post-Type-Slugs oder Taxonomie-Slugs setzen die Option fgml_needs_rewrite_flush. Beim folgenden init-Lauf führt das Plugin einen Rewrite-Flush aus und entfernt die Markierung.

Zusätzlich steht unter Tools ein manueller Rewrite-Flush zur Verfügung.

  • Sehr spezielle direkte SQL-Abfragen werden nicht automatisch nach Sprache gefiltert.
  • Eine fehlende Parent-Übersetzung wird beim Duplizieren nicht durch den Original-Parent ersetzt; der neue Parent bleibt 0.
  • Term-Meta wird kopiert, aber nicht anhand von ACF-Feldtypen sprachlich neu verknüpft.
  • Ein eigener Mechanismus für beliebig tiefe oder projektspezifische URL-Strukturen außerhalb der registrierten WordPress-Rewrites ist nicht vorhanden.