我有一个有两种语言的网站,例如de和en。 De是我的默认语言,没有路径前缀。 En,第二种语言,在URL中具有/ en / as前缀。现在,当我切换到en语言时,菜单项链接在URL中有/ en /,这很好。但是当我点击一个未在后端显式翻译的菜单项时,我收到404错误。我不能说这种行为是错误的,因为在我创建之前没有一个带有这个slug路径的页面。但是我该怎么办?如果已有数百页,则为每个页面创建翻译,这是没有用的。是否没有回退(不是内容回退,页面回退)?
网站配置
rootPageId: 2
base: 'http://some-domain.de/'
baseVariants: { }
languages:
-
title: 'Meine tolle Webseite'
enabled: true
languageId: '0'
base: /
typo3Language: de
locale: de_DE.UTF-8
iso-639-1: de
navigationTitle: ''
hreflang: ''
direction: ''
flag: de
-
title: 'Andere Sprache'
enabled: true
languageId: '1'
base: /en/
typo3Language: en
locale: en_US.UTF-8
iso-639-1: en
navigationTitle: ''
hreflang: ''
direction: ''
fallbackType: fallback
fallbacks: '0'
flag: en
errorHandling: { }
routes: { }
routeEnhancers:
PageTypeSuffix:
type: PageType
default: .html
map:
.html: 0
有一个与内容回退有关的漏洞:
https://forge.typo3.org/issues/86762
也许尝试升级到9.5.3(不知道这是否已修复)。
解决方法:您是否要删除英文菜单中未翻译的页面?
然后,您可以为所有页面设置“如果不存在当前语言的翻译,则隐藏页面”。此复选框可用于“语言”选项卡下的每个页面。
要对所有现有页面执行此操作:
UPDATE pages SET l18n_cfg = 2
要为新创建的页面自动设置此标志:在扩展中创建覆盖pages.php。
typo3conf/ext/[YOUR_EXTENSION]/Configuration/TCA/Overrides/pages.php
并添加l18n_cfg的默认值
$GLOBALS['TCA']['pages']['columns']['l18n_cfg']['config']['default'] = 2;
另一种解决方法是创建静态路由,而不是为每个页面创建翻译。例如:
route: de/english-slug-of-page
type: uri
source: https://yoursite/english-slug-of-page.
虽然不是很方便的解决方案。它的缺点是,路由到英文页面会改变所选语言(例如从德语到英语)。
在TYPO3 9.5.4中仍然无法解决此问题。
这里应该是对SteffenMächtel答案的评论,但我没有足够的声誉 - .-。
如果您想要在没有翻译时隐藏所有页面(内部菜单)的存档,您可以在模块设置 - >配置安装范围选项 - > [FE] [hidePagesIfNotTranslatedByDefault]下设置全局设置(<TYPO3 9,您将获得安装工具中的相同设置)。这种方式有点简单:)