Ü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.
Übersetzungsmodell
Section titled “Übersetzungsmodell”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.
Übersetzungsstatus
Section titled “Übersetzungsstatus”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.
Übersetzung eines Posts anlegen
Section titled “Übersetzung eines Posts anlegen”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.
Autor und Datum
Section titled “Autor und Datum”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.
Hierarchische Inhalte
Section titled “Hierarchische Inhalte”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.
Taxonomie-Zuordnungen
Section titled “Taxonomie-Zuordnungen”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.
Metadaten und ACF
Section titled “Metadaten und ACF”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.
Sprachfilter für WordPress-Abfragen
Section titled “Sprachfilter für WordPress-Abfragen”Mit aktivierter Option Frontend-Queries filtern ergänzt das Plugin WP_Query-Abfragen für übersetzbare Post Types um einen Meta-Filter.
Default-Sprache
Section titled “Default-Sprache”Für die Default-Sprache werden berücksichtigt:
- Posts mit
_fgml_langgleich der Default-Sprache, - Posts ohne
_fgml_lang.
Dadurch können bestehende Inhalte vor der initialen Vorbereitung weiterhin in der Standardsprache erscheinen.
Zusatzsprachen
Section titled “Zusatzsprachen”Für eine Zusatzsprache muss _fgml_lang dem aktuellen Sprachcode entsprechen.
Term-Abfragen
Section titled “Term-Abfragen”Das gleiche Grundprinzip wird für Abfragen aktivierter Taxonomien über pre_get_terms angewendet.
Sprachfilter gezielt umgehen
Section titled “Sprachfilter gezielt umgehen”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.
Ermittlung der aktuellen Sprache
Section titled “Ermittlung der aktuellen Sprache”Die Sprache wird in dieser Reihenfolge ermittelt:
- Query-Variable
fgml_lang, wenn sie einer bekannten Sprache entspricht. - Erstes Pfadsegment der aktuellen Request-URI, wenn es dem Prefix einer aktiven Sprache entspricht.
- Default-Sprache als Fallback.
Die Default-Sprache benötigt keinen Prefix.
Sprachabhängige URLs
Section titled “Sprachabhängige URLs”Ist Permalinks übersetzen aktiv, filtert FG Multilang WP WordPress-Permalinks und Archivlinks.
Default-Sprache
Section titled “Default-Sprache”Bekannte Sprachprefixe werden aus URLs der Default-Sprache entfernt.
Beispiel:
/beispiel/Zusatzsprache
Section titled “Zusatzsprache”Der konfigurierte Sprachprefix wird vorangestellt.
Beispiel:
/en/example/Custom Post Types
Section titled “Custom Post Types”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.
Taxonomien
Section titled “Taxonomien”Für aktivierte Taxonomien können ebenfalls sprachabhängige Basisslugs verwendet werden.
Beispiel:
/kategorie/news//en/category/news/Sprach-Startseiten
Section titled “Sprach-Startseiten”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.
Interne Inhaltslinks
Section titled “Interne Inhaltslinks”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:.
Rewrite-Flush
Section titled “Rewrite-Flush”Ä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.
Grenzen
Section titled “Grenzen”- 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.