pschulz
I'm new here

Sprach-Fallback umkehren

Moin,

Folgendes Szenario:

Mastersprache ist Englisch. Desweiteren gibt es Deutsch.

Sprachfallback innerhalb von FS fukntioniert ja so, dass, wenn die Inhaltsseite nicht

auf deutsch übersetzt ist, die englische Version herangezogen wird.

Nun haben wir bei uns den besonderen Fall, dass es auchSeiten geben kann,

die nicht in englischer Sprache jedoch in deutscher Sprache vorliegen.

Dafür habe ich versucht, einen Workaround zu bauen.

Am Anfang eines Seitentemplates habe ich folgenden Code-Schnipsel eingebaut:

$CMS_IF(#global.language == #global.project.masterLanguage && !#global.page.isTranslated)$

        $CMS_SET(useFallback, true)$

        $CMS_SET(fallbackLanguage, null)$

        $CMS_FOR(lang, #global.project.languages)$

            $CMS_IF(fallbackLanguage.isEmpty && lang != #global.project.masterLanguage && #global.page.isTranslated(lang.abbreviation))$

                $CMS_SET(fallbackLanguage, lang)$

            $CMS_END_IF$

        $CMS_END_FOR$

        $CMS_IF(!fallbackLanguage.isEmpty)$

            $CMS_SET(#global.language, fallbackLanguage)$

        $CMS_END_IF$

$CMS_END_IF$

Im weiteren Verlauf des Seitentemplates kommt u.a. soetwas vor:

$CMS_VALUE(pt_title)$

$CMS_RENDER(template:"WEBeditInplaceBody", name:"content")$

Und am Ende wird die Sprache wieder zurück gestellt:

$CMS_IF(useFallback)$

        $CMS_SET(#global.language, #global.project.masterLanguage)$

    $CMS_END_IF$

Dieses Vorgehen funktioniert aber nur zum Teil.

Die Variable 'pt_title', die im Formular des Seitentemplates definiert ist, wird weiterhin auf englisch ausgegeben.

Der 'content' hingegen auf deutsch.

Wie bringe ich FirstSpirit dazu, auch die Formularwerte des Seitentemplates in der anderen Sprache auszugeben?

Viele Grüße

Peter Schulz

0 Kudos
3 Replies
pschulz
I'm new here

Eine Möglichkeit habe ich bereits gefunden:

$CMS_VALUE(#global.page.getFormData().get(#global.language, "pt_title").get)$

Allerdings muss man das jetzt um jeden Formularwert herum bauen.

Gibt es noch eine einfachere Lösung?

Eventuell folgendes versuchen:

"$CMS_IF" im Seitenttemplate, wo im then-Fall die folgenden drei Dinge gemacht werden

  1. Sprache umsetzen
  2. $CMS_VALUE(#global.node.createContent(#global, #global.pageParams))$
  3. Sprache zurücksetzen

Der eigentliche Template-Inhalt kommt denn (unverändert) in den else-Fall. Achtung: Die Anweisung in 2 ist eine Rekursion. Die Bedingung muss also so sein, das es zu keiner Endlos-Rekursion kommt.

Disclaimer: Ich habe es nicht ausprobiert, laut API müsste das aber funktionieren Smiley Wink

Eventuell erweitert man das if noch so, das der rekursive Aufruf bei der Vorschau nicht gemacht wird.

Peter
0 Kudos

Hallo,

ich habe jetzt folgendes ausprobiert:

1. Feststellen, ob ein Fallback durchgeführt werden muss / kann:

$CMS_IF(#global.language == #global.project.masterLanguage && !#global.page.isTranslated)$

    $CMS_SET(useFallback, true)$

    $CMS_SET(fallbackLanguage, null)$

    $CMS_FOR(lang, #global.project.languages)$

        $CMS_IF(fallbackLanguage.isEmpty && lang != #global.project.masterLanguage && #global.page.isTranslated(lang.abbreviation))$

            $CMS_SET(fallbackLanguage, lang)$

        $CMS_END_IF$

    $CMS_END_FOR$

    $CMS_IF(fallbackLanguage.isEmpty)$

        $CMS_SET(useFallback, false)$

    $CMS_END_IF$

$CMS_END_IF$

2. Fallback:

$CMS_IF(useFallback)$

    <!-- fallback... -->

    $CMS_SET(#global.language, fallbackLanguage)$

    $CMS_VALUE(#global.node.createContent(#global, #global.pageParams))$

    $CMS_SET(#global.language, #global.project.masterLanguage)$

$CMS_ELSE$

...

$CMS_END_IF$

Jetzt wird genau 12 mal der Kommentar "<!-- fallback... -->" ausgegeben.

Nur das html-Grundgerüst ist noch zusätzlich im Quelltext zu sehen.

Da wir in unseren Seitentemplates nicht all zu viele Formularparameter hinterlegt haben, bevorzuge ich dann doch die Lösung aus meiner eigenen Antwort...

Danke und Gruß

Peter

0 Kudos