slhck
slhck

Reputation: 38770

TYPO3 language switcher does not use the correct RealURL paths

I use the following TypoScript to generate a language switcher. It's basically a copy from an existing site where everything works fine:

lib.langMenu = HMENU
lib.langMenu {
  special = language
  addQueryString = 1
  special.value = 0,1
  special.normalWhenNoLanguage = 0
  1 = TMENU
  1 {
    noBlur = 1
    NO = 1
    NO {
        allWrap = <li>|</li>
        stdWrap2.noTrimWrap = | | |
        stdWrap.override = Deutsch || English
        ATagParams = class="lang-switcher-de" || class="lang-switcher-en"
    }

    ACT < .NO
    ACT = 1
    ACT.allWrap = <li class="active">|</li>

    wrap = <ul class="pull-right language"><li class="hidden-xs">Language:</li>|</ul>
  }
}

Now, I use the following RealURL setup:

$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array(
  '_DEFAULT' => array(
    'init' => array(
      'enableCHashCache' => 1, 
      'enableUrlDecodeCache' => 1,
      'enableUrlEncodeCache' => 1,
    ),
    'preVars' => array (
      0 => array (
        'GETvar' => 'L',
        'valueMap' => array (
          'en' => '1',
        ),
        'noMatch' => 'bypass',
      ),
    ),
    'pagePath' => array(
      'type' => 'user',
      'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
    ),
   )
 );

The issue is that, say I have the following pages, with their German and English path:

When I'm on /produkte/produktuebersicht, the language switcher generates a link to/en/produkte/produktuebersicht instead of /en/products/product_overview. This problem occurs on every single page.

It always takes the path of the wrong (read, current) language. I've checked the ID to path mapping and it looks fine to me:

The encode cache has these entries – but even when I delete them the problem persists:

The weird thing is that the menu itself is generated correctly. So how can I make it link to the right RealURLs in the language switcher?

Upvotes: 2

Views: 1665

Answers (1)

Oliver Salzburg
Oliver Salzburg

Reputation: 22099

Your RealURL pagePath section should include a languageGetVar setting.

From the RealURL documentation:

Defines which GET variable in the URL that defines language id; if set the path will take this language value into account and try to generate the path in localized version.

Your pagePath section should look like:

'pagePath' => array(
  'type' => 'user',
  'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
  'languageGetVar' => 'L'
),

Upvotes: 3

Related Questions