Questions & Answers

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

Type a product name