typo3multilinguallanguage-switching

TYPO3 9.5 languageNavigation doesn't take query parameters when switching language (e.g. News Detail) using route-enhancer


I have a fluid template language navigation in which i use bootstrap which looks like follows:

<f:for each="{config.lang.uid}" as="lang" iteration="iterator">
  <f:if condition="{languageNavigation.{iterator.index}.available}">
    <f:then>
      <a
        href="{languageNavigation.{iterator.index}.link}"
        class="dropdown-item{f:if(condition: '{languageNavigation.{iterator.index}.active}', then: ' active')}" 
        hreflang="{config.lang.hreflang.{lang}}"
        title="{config.lang.title.{lang}}"
      >
        <span> 
          <f:if condition="{settings.navbar.langFlags}">
            <core:icon identifier="{config.lang.flag.{lang}}" size="small" />
          </f:if>
          {config.lang.title.{lang}}
        </span>
      </a>
    </f:then>
    <f:else>
      <span class="dropdown-item text-muted">
        <f:if condition="{settings.navbar.langFlags}">
          <core:icon identifier="{config.lang.flag.{lang}}" size="small" />
        </f:if>
        {config.lang.title.{lang}}
      </span>
    </f:else>
  </f:if>
</f:for>

when I'm in the detail view of a news article and I switch the language, the parameters of the query are not translated, so it basically sends me to an empty detail page

I've been trying for hours to fix this problem but I don't seem to find a solution…… I use route enhancer to translate the detail view URLs query into the news title

the nearest i've found is to add following to the link:

addQueryString="TRUE" addQueryStringMethod="GET"

but this only seems to work in < f:link.page > and I can't use

href="{languageNavigation.{iterator.index}.link}"
in <f:link.page>

i've tried with < link.typolink > as well but in both methods i lose the language-switching-goal, even if i use lang={config.lang.hreflang.{lang}} which would translate to en-US or de-DE in the site configuration……… it just renders the link to the detail page in the current language for all links in menu

any help? I think i've reached my capabilities to solve this I'd be grateful for any solution

-----------------Example------------------

lets say i have the following URL which is a page with the news plugin detail view of an article:

https://my.domain/news/detail/news-title

When I go to my language navigation of this page the domains rendered are:

EN: https://my.domain/news/detail/
DE: https://my.domain/de/news/detailansicht/

so, the /news-title at the end basically gets lost

If I'm navigating only in german site and I'm standing in the news list page:

https://my.domain/de/news/

from there, all links are rendered correctly, so if i go to the list item of article in question it would send me to:

DE: https://my.domain/de/news/detailansicht/news-title

So, that's what I mean with the question, the problem only appears when I'm already in the detail view page, and I want to switch the language with the navbarmenu.

instead of rendering

https://my.domain/LANG/news/detail/news-title it renders

https://my.domain/LANG/news/detail/


Solution

  • Did you tried the LanguageMenuDataProcessor? With it, the links are all correct. See: https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html?highlight=languagemenuprocessor#dataprocessing

    In older TYPO3 versions DataProcessing of menu was

    10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
    10 {
       special = languages
       as = languageNavigation
    }
    

    Now it uses

    10 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
    10 {
       languages = auto
       as = languageNavigation
    }
    

    This solved my Problem, thanx for the hint @Thomas Löffler

    I've also updated my template to make the code more simple by getting rid of the iterator and its index:

    <f:section name="Language">
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" id="language" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
          <f:for each="{languageNavigation}" as="item">
            <f:if condition="{item.active}">
              <f:if condition="{settings.navbar.langFlags}">
                <core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
              </f:if>
              <span class="nav-label">{item.title}</span>
            </f:if>
          </f:for>
        </a>
        <div class="dropdown-menu dropdown-menu-right mt-0 language-menu">
          <f:for each="{languageNavigation}" as="item">
            <f:if condition="{item.available}">
              <f:then>
                <a
                  href="{item.link}" hreflang="{item.hreflang}" title="{item.title}"
                  class="dropdown-item{f:if(condition: '{item.active}', then: ' active')}"
                >
                  <f:if condition="{settings.navbar.langFlags}">
                    <core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
                  </f:if>
                  {item.title}
                </a>
              </f:then>
              <f:else>
                <span class="dropdown-item text-muted">
                  <f:if condition="{settings.navbar.langFlags}">
                    <core:icon identifier="{config.lang.flag.{item.languageId}}" size="small" />
                  </f:if>
                  {item.title}
                </span>
              </f:else>
            </f:if>
          </f:for>
        </div>
      </li>
    </f:section>