Die aktuelle Sprache mit TypoScript rendern
#Code

Die aktuelle Sprache mit TypoScript rendern

Eine kleine Sammlung von gefundenen und erfundenen Möglichkeiten, um die aktuelle Sprache via TypoScript zu rendern.

Wenn ich Projekte von anderen Personen übernehme, wühle ich gerne im Code herum. Manchmal finde ich spannende Ansätze, von denen ich lerne. Oder ich finde interessante Lösungen, an die ich nie gedacht hätte. Jene Ansätze führten mich dazu, diesen Post zu schreiben. 

Das erklärte Ziel: Die aktuell aktive Sprache rendern, die beispielsweise in einem Button für ein Sprachmenü zum Einsatz kommt.

Weg 1: Handarbeit

Die simpelste Lösung ist, die entsprechende Sprache statisch zu rendern, indem Conditions genutzt werden. 

 

currentLanguage = TEXT
currentLanguage.value = Deutsch

[globalVar = GP:L = 1]
currentLanguage.value = English
[end]

// ...

 

Vorteile:

  • Simpel, lesbar, einfach verständlich
  • Die Sprache kann in der aktiven Sprache ausgegeben werden (Lokalisierung)

Nachteile:

  • Das TypoScript muss aktualisiert werden, wenn neue Sprachen hinzugefügt werden

Weg 2: Iteration über alle Sprachen

Dies ist ein spezieller Ansatz, um die aktive Sprache für beispielsweise eine Navigation auszugeben. Sie funktioniert, ist allerdings nicht performant. Was hier passiert: Alle definierten Sprachen werden gerendert, aber die nicht aktuellen Sprachen werden mit nicht-sichtbare Tags umschlossen, was überschüssiges Markup generiert.

 

currentLanguage = HMENU
currentLanguage {
  special = language
  special {
    value = 0,1
    normalWhenNoLanguage = 0
  }
  
  addQueryString = 1
  addQueryString {
    method = GET
    exclude = id, L, cHash
  }
  
  1 = TMENU
  1 {
    NO = 1
    NO {
      stdWrap {
        setCurrent = de || en || it || es || fr
        current = 1
      }
      linkWrap = |
    }
    
    ACT < .NO
    ACT {
      doNotLinkIt = 1
      linkWrap = |
    }
  }
}

 

Vorteile:

  • Die Sprache kann in der aktiven Sprache ausgegeben werden (Lokalisierung)

Nachteile:

  • Das TypoScript muss aktualisiert werden, wenn neue Sprachen hinzugefügt werden
  • Es wird überflüssiger Output generiert

Weg 3: Den aktuellen Sprach-RECORD rendern

Mit dem RECORD Top Level Object (TLO) bietet TypoScript die Möglichkeit, Datensätze aus jeglichen Tabellen zu rendern. 

 

currentLanguage = RECORDS
currentLanguage {
  if.isTrue.data = GP:L
  
  tables = sys_language
  dontCheckPid = 1
  source {
    data = GP:L
    intval = 1
  }
  
  conf.sys_language = TEXT
  conf.sys_language {
    field = title
    htmlSpecialChars = 1
  }
  
  stdWrap.override {
    cObject = TEXT
    cObject.value = Default language label
    if.isFalse.data = GP:L
  }
}

 

Vorteile:

  • Der Name des Language-Datensatzes dient als Name des Sprach-Labels, anstatt diese statisch im TypoScript zu definieren (mit Ausnahme des Standard-Labels)

Nachteile:

  • Das Standard-Label muss im TypoScript angepasst werden, womit es zwei Orte gibt, um die Labels zu verwalten