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

Typo3 11中Extbase内联关联翻译失效问题咨询

TYPO3 11内联关联未翻译主条目时显示翻译内容的解决方案

针对你遇到的问题——主条目未翻译但关联内容已翻译时,仍显示关联的默认语言版本,可通过以下几个步骤解决:

1. 调整内联字段的TCA配置

在扩展的TCA配置文件中,为内联字段添加合适的语言过滤条件,并配置本地化行为,确保关联记录可以独立翻译:

// Configuration/TCA/tx_yourext_domain_model_main.php
'your_inline_field' => [
    'label' => '关联内容',
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_yourext_domain_model_related',
        'foreign_table_where' => 'AND tx_yourext_domain_model_related.pid=###CURRENT_PID### AND tx_yourext_domain_model_related.sys_language_uid IN (-1, ###SYS_LANGUAGE_UID###, 0)',
        'behaviour' => [
            'localizationMode' => 'select', // 允许关联记录独立于主条目翻译
            'localizeChildrenAtParentLocalization' => false, // 主条目翻译时不强制同步关联记录
        ],
    ],
],

sys_language_uid IN (-1, ###SYS_LANGUAGE_UID###, 0)的条件允许加载未本地化、当前语言和默认语言的关联记录,为后续优先取当前语言版本做基础。

2. 在控制器中自定义关联记录查询逻辑

默认情况下,Extbase会跟随主条目的语言加载关联记录,要打破这个逻辑,可在主控制器的显示方法中手动调用自定义查询获取关联记录:

// Classes/Controller/MainController.php
public function showAction(\Vendor\YourExt\Domain\Model\Main $main)
{
    $currentLangUid = $this->request->getAttribute('language')->getLanguageId();
    // 调用自定义Repository方法获取对应语言的关联记录
    $relatedObjects = $this->relatedRepository->findByMainAndPreferredLanguage($main, $currentLangUid);
    
    $this->view->assignMultiple([
        'main' => $main,
        'relatedObjects' => $relatedObjects
    ]);
}

3. 扩展关联记录Repository的查询方法

在关联记录的Repository中添加自定义方法,实现“优先当前语言,无则回退默认语言”的查询逻辑:

// Classes/Domain/Repository/RelatedRepository.php
public function findByMainAndPreferredLanguage(\Vendor\YourExt\Domain\Model\Main $main, int $preferredLangUid)
{
    $query = $this->createQuery();
    $query->matching(
        $query->logicalAnd(
            $query->equals('main', $main),
            $query->in('sysLanguageUid', [$preferredLangUid, 0])
        )
    );
    // 按语言ID倒序,确保当前语言记录排在前面
    $query->setOrderings(['sysLanguageUid' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING]);
    
    return $query->execute();
}

4. 调整TYPO3前端语言配置

确保系统语言模式配置为内容回退,避免严格模式下未翻译主条目直接返回404:

// 在AdditionalConfiguration.php中添加
$GLOBALS['TYPO3_CONF_VARS']['FE']['sys_language_mode'] = 'content_fallback';
$GLOBALS['TYPO3_CONF_VARS']['FE']['sys_language_overlay'] = '1';

这样配置后,TYPO3会优先使用翻译后的内容,当无翻译时回退到默认语言,同时允许主条目未翻译时正常显示,并加载关联记录的翻译版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:05:31