typo3typo3-11.x

TYPO3 typoscript if condition based on site language


My typo3 version is 11.5.10. I have two footer images, one for German and one for English . I want to render different image for different language. I tried this way for German language.

[siteLanguage("locale") == "de_DE"]
   50 = COA
      50 {
        wrap = <div class="footer__item col-sm-6 col-md-3 img-custom">|</div>  
        stdWrap {
          typolink {
            parameter = {$myconstant.footer-logo-link-4}
            parameter.noTrimWrap = || _blank|
          }
        }

        50 = IMAGE
        50 {
          file = user_uploads/german-footer.png

          layoutKey = srcset
          layout.srcset {
            element = <img WIDTH###" SOURCECOLLECTION###" ###PARAMS### ###ALTPARAMS### ###SELFCLOSINGTAGSLASH###>              }
        }
      }
[end]

And for English language.

[siteLanguage("locale") == "en_US"]
   50 = COA
      50 {
            wrap = <div class="footer__item col-sm-6 col-md-3 img-custom">|</div>  
            stdWrap {
              typolink {
                parameter = {$myconstant.footer-logo-link-5}
                parameter.noTrimWrap = || _blank|
              }
            }

            50 = IMAGE
            50 {
              file = user_uploads/english-footer.png

              layoutKey = srcset
              layout.srcset {
                element = <img WIDTH###" SOURCECOLLECTION###" ###PARAMS### ###ALTPARAMS### ###SELFCLOSINGTAGSLASH###>              }
            }
          }
    [end]

In both language FE i get English-footer. I also tried Different function of siteLanguage like

  1. siteLanguage("navigationTitle")
  2. siteLanguage("locale")
  3. siteLanguage("hreflang") etc..

What i am doing wrong ? Thanks in advance!

I get the following error in Typoscript Object Browser

Errors and warnings Warning : Line 5696: Object Name String, "[siteLanguage" contains invalid character "[". Must be alphanumeric or one of: "_:-/." Show details

Warning : Line 5718: Object Name String, "[END]" contains invalid character "[". Must be alphanumeric or one of: "_:-/." Show details

Warning : Line 5719: Object Name String, "[siteLanguage" contains invalid character "[". Must be alphanumeric or one of: "_:-/." Show details

Warning : Line 5741: Object Name String, "[END]" contains invalid character "[". Must be alphanumeric or one of: "_:-/." Show details


Solution

  • In general, you should avoid conditions whenever possible. Conditions are evil!

    Conditions are checked for each and every page request - before any cached content is touched. extensive use of conditions will be a performance killer.

    For more details, search for "typo3 condition performance"

    Using TypoScript if

    A better way would be using the if-function, which is cachable, in combination with getText siteLanguage.

    page.10 = TEXT
    page.10.data = siteLanguage:languageId
    page.10.stdWrap.wrap = <p>siteLanguage:languageId=|</p>
    
    page.20 = IMAGE
    page.20 {
      if.value = 1
      if.equals.data = siteLanguage:languageId
      file = EXT:example/Resources/Public/typo3_package_de.png
    }
    
    page.30 = IMAGE
    page.30 {
      if.value = 0
      if.equals.data = siteLanguage:languageId
      file = EXT:example/Resources/Public/typo3_package_en.png
    }