You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 11局部多语言配置问题:无翻译页面链接异常

TYPO3 11:无翻译页面链接强制指向默认域名的实现方案

问题背景

环境:TYPO3 11 + PHP 8.1
大型项目原本无多语言配置,仅需为News扩展添加德语(DE)语言并实现语言切换。已配置严格模式+英文回退的德语语言,新闻/标签列表及新闻板块的语言切换正常,但切换到德语前端时,所有无翻译页面的内部链接均指向domainname.com/en/...;移除回退设置后链接无法生成,仅显示文本;临时给typolinks设置language="0"并非最优解。需求是:无翻译页面的链接无论当前语言,都指向默认域名domainname.com/...,询问该需求是否可行。

当前站点配置片段:

languages:
  -
    title: English
    enabled: true
    base: /
    typo3Language: default
    locale: en_US.UTF-8
    iso-639-1: en
    websiteTitle: ''
    navigationTitle: English
    hreflang: en-US
    direction: ''
    flag: en-us-gb
    languageId: 0
    solr_core_read: ''
  -
    title: Deutsch
    enabled: true
    base: /de/
    typo3Language: default
    locale: de_DE.utf8
    iso-639-1: de
    websiteTitle: ''
    navigationTitle: Deutsch
    hreflang: de-de
    direction: ltr
    fallbackType: strict
    fallbacks: '0'
    flag: de
    solr_core_read: ''
    languageId: 1

可行性结论

完全可行,以下是三种实用解决方案,按推荐优先级排序:

方案1:调整语言回退配置(推荐)

将德语语言的fallbackType从strict改为fallback,保留fallbacks: '0'。此配置下,TYPO3会回退到默认语言的页面,并使用默认语言的base路径(根路径/)生成链接,而非带语言前缀的路径。

修改后的德语语言配置片段:

-
    title: Deutsch
    enabled: true
    base: /de/
    typo3Language: default
    locale: de_DE.utf8
    iso-639-1: de
    websiteTitle: ''
    navigationTitle: Deutsch
    hreflang: de-de
    direction: ltr
    fallbackType: fallback  # 替换原strict值
    fallbacks: '0'
    flag: de
    solr_core_read: ''
    languageId: 1

方案2:全局TypoScript配置链接行为

若不想修改语言回退类型,可通过TypoScript全局强制无翻译页面使用默认语言生成链接:

config {
  typolink {
    # 当目标页面无当前语言翻译时,自动使用默认语言
    useDefaultLanguageWhenNoTranslation = 1
    # 确保链接使用默认语言的base路径(若需绝对URL可设为1)
    forceAbsoluteUrl = 0
  }
}

针对菜单等特定组件,可单独细化配置:

lib.mainMenu {
  10 = HMENU
  10 {
    special = directory
    special.value = 1
    1 = TMENU
    1 {
      NO {
        typolink {
          useDefaultLanguageWhenNoTranslation = 1
        }
      }
      ACT < .NO
      CUR < .NO
    }
  }
}

方案3:自定义链接处理钩子(进阶)

若上述方案无法满足特殊需求,可通过TYPO3的链接处理钩子编写自定义逻辑,检测页面翻译状态并强制使用默认语言生成链接:

  1. 在自定义扩展的ext_localconf.php中注册钩子:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['typolinkLinkHandler'][] = \Vendor\YourExtension\Hooks\TypolinkHandler::class;
  1. 编写钩子类:
namespace Vendor\YourExtension\Hooks;

use TYPO3\CMS\Core\LinkHandling\LinkService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\Page\PageRepository;

class TypolinkHandler
{
    public function handle(array $linkDetails, string $linkText, array $configuration, ContentObjectRenderer $cObj): array
    {
        if ($linkDetails['type'] === 'page') {
            $pageId = (int)$linkDetails['pageuid'];
            $currentLanguageId = (int)$GLOBALS['TSFE']->sys_language_uid;
            
            // 检查页面是否有当前语言的翻译
            $pageRepository = GeneralUtility::makeInstance(PageRepository::class);
            $translatedPage = $pageRepository->getPageOverlay($pageId, $currentLanguageId);
            
            if (!$translatedPage) {
                // 无翻译时强制使用默认语言
                $configuration['language'] = 0;
                // 重新解析链接确保路径正确
                $linkService = GeneralUtility::makeInstance(LinkService::class);
                $linkDetails = $linkService->resolve($linkService->asString($linkDetails));
            }
        }
        return [$linkDetails, $linkText, $configuration];
    }
}

内容的提问来源于stack exchange,提问作者woodeg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:32:06