angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Mehrsprachiger Fallback überarbeitet und eine Seitenfußzeile mit mehrsprachigen Links

Halten Sie den übersetzten Titel und die Kugel an einer Stelle und markieren Sie sie als gültig, damit sie auch dann verwendet werden können, wenn der Rest des Elements nicht gültig ist.

14 September 2019
post main image
unsplash.com/@olidale

Bevor du weiterliest, solltest du vielleicht meinen vorherigen Beitrag über Sprach-Fallback lesen, siehe Link unten. Hier haben Sie ein Beispiel für die Komplexität der Mehrsprachigkeit. Der Link sollte in der Sprache angezeigt werden, die Sie im Moment verwenden.... ein anderes Mal.

Das Leben ist eine lange große Abfolge von Problemen, die wir ständig lösen. Es beginnt mit genügend Sauerstoff, gelöst durch Atmung, vielleicht sind es die Bugs und die unvollständige Architektur als Entwickler und Programmierer. Wie auch immer, es war an der Zeit, eine mehrsprachige Seitenfußzeile zu implementieren, dies ist der untere Teil der Seite mit Links zu Seiten wie About, Contact, Terms of Use, Privacy Policy. Für eine echte mehrsprachige Website müssen diese Links in der gewählten Sprache sein.

Ich habe mit zwei Tabellen begonnen und einen neuen Teil des Administrators erstellt, um sie zu verwalten:

FußzeileEinzelteil
FußzeileEinzelteilÜbersetzung

Mit dem Administrator erstelle ich ein Fußzeilenelement und füge ihm einen oder mehrere Sprachdatensätze hinzu, für jede Sprache wird ein Übersetzungssatz hinzugefügt. Mein erster Gedanke war, den Namen und den Slug für eine Seite hier anzugeben, ich meine, eine Seite ist möglicherweise nicht in der gewählten Sprache verfügbar und wir wollen auf die Fallback-Sprache zurückgreifen. Der übersetzte Linkname (Seitentitel) und Slug müssen irgendwo gespeichert werden.

Beim Erstellen der Abfrage zur Auswahl der Seiten fand ich das jedoch viel zu komplex, da ich nun nicht nur die Tabellen content_item und content_item, sondern auch die Tabelle footer_item und footer_item_translation abfragen musste. Nicht genau das, was ich vorhatte, ich bin Programmierer und bevorzuge KISS.

Meine Lösung, um die Komplexität zu reduzieren, besteht darin, den content_item_translation-Datensatz erneut zu missbrauchen, das letzte Mal, als ich das Flag'do_not_fallback' hinzugefügt habe, und jetzt füge ich ein weiteres Flag hinzu:'can_use_slug'. Die Bedeutung ist wie folgt:

  • Wenn der Datensatz content_item_translation nicht existiert, greifen wir auf die Fallback-Sprache zurück.
  • Wenn der Datensatz content_item_translation existiert und veröffentlicht wird, verwenden wir ihn.
  • Wenn der content_item_translation Datensatz existiert, aber nicht veröffentlicht wird, haben wir zwei Bedingungen: - do_not_fallback
    , wenn True, ist das Element nicht verfügbar.
    - can_use_slug, wenn do_not_fallback ist False, und can_use_slug ist True, können wir den Titel und Slug des content_item_translation Datensatzes verwenden.

Die schöne Sache ist, dass wir jetzt eine echte mehrsprachige Fußzeile mit mehrsprachigen Links erstellen können, auch wenn die Seite nicht veröffentlicht wird, nur durch Übersetzen und Hinzufügen von Seitentitel und Slug zum content_item_translation-Datensatz und Setzen des can_use_slug-Flags. Titel und Slug der Seite befinden sich nur an einer Stelle.

Ein Bonus ist, dass wir dies auch beim Anzeigen der Seite nutzen können, um den Titel der Seite in der gewählten Sprache anzuzeigen, während die anderen Teile auf Englisch bleiben. Sie können dies überprüfen, indem Sie sich die Seite mit den Nutzungsbedingungen dieser Website in mehreren Sprachen ansehen. Diese Seite ist nur auf Englisch verfügbar, aber wir haben immer noch mehrsprachige Links in der Fußzeile und einen mehrsprachigen Titel.

Die Implementierung erfolgt wie das in früheren Beiträgen beschriebene Cache-Objekt und das Einstellungsobjekt und verwendet natürlich das Caching, ohne dass die Fußzeile bei jeder Anforderung generiert werden muss. Kein Code in diesem Beitrag, muss zuerst etwas bereinigen....

Links / Impressum

Refining multilanguage: adding language fallback as an option
/en/blog/refining-multilanguage-adding-language-fallback-as-an-option

Mehr erfahren

Multilanguage

Einen Kommentar hinterlassen

Kommentieren Sie anonym oder melden Sie sich zum Kommentieren an.

Kommentare

Eine Antwort hinterlassen

Antworten Sie anonym oder melden Sie sich an, um zu antworten.