TYPO3自定义扩展Extbase记录可翻译配置问题排查
我来帮你一步步解决这两个TYPO3相关的问题:
要让Extbase记录支持多语言翻译,需要从TCA配置、Extbase映射和后端页面设置三个方面入手:
第一步:配置TCA的语言字段
打开你的扩展TCA文件(比如Configuration/TCA/tx_yourextension_domain_model_yourmodel.php),确保sys_language_uid字段正确配置,开启语言选择支持:'sys_language_uid' => [ 'exclude' => true, 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', 'config' => [ 'type' => 'language', 'renderType' => 'selectSingle', 'special' => 'languages', // 自动加载系统配置的所有语言 'items' => [ [ 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1, 'flags-multiple' ], ], 'default' => 0, ], ],如果想限制可选语言范围,可以手动替换
items数组,比如只允许默认语言和德语:'items' => [ ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1, 'flags-multiple'], ['English', 0, 'flags-gb'], ['Deutsch', 1, 'flags-de'], ],第二步:配置Extbase的翻译映射
在扩展的ext_localconf.php中,为你的模型启用翻译支持,指定语言相关字段的映射关系:// 先确保插件配置正确 \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( 'YourVendor.YourExtension', 'YourPluginAlias', [ 'YourModel' => 'list,show,edit' // 按需调整动作 ], [] ); // 启用模型的多语言支持 $GLOBALS['TYPO3_CONF_VARS']['EXT']['extbase']['persistence']['classes'][YourVendor\YourExtension\Domain\Model\YourModel::class] = [ 'mapping' => [ 'tableName' => 'tx_yourextension_domain_model_yourmodel', 'languageField' => 'sys_language_uid', 'transOrigPointerField' => 'l10n_parent', // 指向原始记录的字段 'transOrigDiffSourceField' => 'l10n_diffsource', // 存储差异的字段 ], ];同时要确保你的数据库表中存在
sys_language_uid、l10n_parent、l10n_diffsource这三个字段,可以通过扩展的ext_tables.sql文件添加:CREATE TABLE tx_yourextension_domain_model_yourmodel ( sys_language_uid int(11) DEFAULT 0 NOT NULL, l10n_parent int(11) DEFAULT 0 NOT NULL, l10n_diffsource mediumtext DEFAULT '' NOT NULL, -- 你的其他字段 );第三步:在后端启用页面/文件夹的语言支持
存放记录的SysFolder或页面,需要在页面属性 -> 语言标签下,添加你需要支持的语言,并设置“本地化记录”选项为“从原始复制”或“引用原始记录”,这样后端才会显示对应的语言选择项。
你说TCA配置正常但还是只能选-1,我给你几个实用的排查方向:
先清缓存!再检查TCA是否生效
TYPO3的配置缓存经常会导致修改不生效,先去系统 -> 清除缓存里清空所有缓存(包括配置缓存)。然后可以在系统 -> 配置中搜索你的表名,查看sys_language_uid的实际配置是否和你写的一致,如果不一致,说明TCA文件路径或命名有误(比如文件名应该和表名对应)。检查SysFolder的语言配置细节
虽然你说SysFolder已配置多语言,但还是要确认:- 该文件夹的页面属性中,是否实际添加了至少一种非默认语言?如果只添加了默认语言,后端不会显示其他选项。
- 文件夹的“本地化记录”设置是否为允许创建翻译?如果设为“无”,会限制语言选择。
- 文件夹本身的
sys_language_uid是否为0(默认语言)?如果文件夹是某个语言的翻译版本,会限制只能选择对应语言或-1。
检查后端用户的权限
当前登录的后端用户是否有对应语言的编辑权限?去用户管理 -> 你的用户 -> 权限 -> 页面权限,确认用户对该SysFolder下的所有语言版本都有编辑权限,否则会看不到语言选项。检查用户组的语言限制
查看用户所在的用户组,在权限 -> 语言选项中,是否限制了只能使用特定语言?如果这里只选了“所有语言”,也可能导致只能选-1。排查第三方扩展干扰
有些语言管理类的第三方扩展可能会修改TCA的语言字段配置,尝试暂时禁用非必要的扩展,看问题是否消失,以此定位干扰源。确认数据库字段是否齐全
再次检查你的表中是否存在sys_language_uid、l10n_parent、l10n_diffsource三个字段,类型是否正确(sys_language_uid和l10n_parent为int(11),l10n_diffsource为text/mediumtext)。缺少这些字段的话,TYPO3不会启用多语言选择。
内容的提问来源于stack exchange,提问作者Urs

