TYPO3 9.5 languageNavigation 在使用 route-enhancer 切换语言(例如 News Detail)时不接受查询参数

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

我有一个流畅的模板语言导航,我在其中使用 bootstrap,如下所示:

<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>

当我在新闻文章的详细视图中切换语言时,查询的参数没有翻译,所以它基本上将我发送到一个空的详细信息页面

我已经尝试了几个小时来解决这个问题,但我似乎没有找到解决办法…… 我使用路由增强器将详细视图 URLs 查询转换为新闻标题

我找到的最接近的是将以下内容添加到 link:

addQueryString="TRUE" addQueryStringMethod="GET"

但这似乎只在 < f:link.page > 中有效,我不能使用

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

我也尝试过 < link.typolink > 但是在这两种方法中我都失去了 language-switching-goal,即使我使用 lang={config.lang.hreflang.{lang}} 将在站点配置中转换为 en-US 或 de-DE…………它只是将 link 呈现到详细信息页面中菜单

中所有link的当前语言

有什么帮助吗?我想我已经达到了解决这个问题的能力 我将不胜感激任何解决方案

----------------例子-----------------

假设我有以下 URL 这是一个包含文章的新闻插件详细视图的页面:

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

当我转到此页面的语言导航时,呈现的域是:

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

所以,最后的/news-title基本就没了

如果我只在德语站点导航并且我站在新闻列表页面中:

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

从那里开始,所有 link 都正确呈现,所以如果我转到有问题的文章的列表项,它会将我发送到:

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

所以,这就是我提出问题的意思,只有当我已经在详细视图页面中,并且我想用导航栏菜单切换语言时,问题才会出现。

而不是渲染

https://my.domain/LANG/news/detail/news-title 它呈现

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

您尝试过 LanguageMenuDataProcessor 吗?有了它,链接就全对了。参见:https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Fluidtemplate/Index.html?highlight=languagemenuprocessor#dataprocessing

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

在旧的 TYPO3 版本中,菜单的数据处理是

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

现在使用

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

这解决了我的问题,感谢@Thomas Löffler 的提示

我还更新了我的模板,通过删除迭代器及其索引使代码更简单:

<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>