据我所知,有两种方法可以检索当前(前端)语言:
$GLOBALS['TSFE']->config['config']['language']
$GLOBALS['TSFE']->sys_language_uid
如果后者为 2,则配置值为“dk”。 但是,如果语言 UID 为 0,则第一个变量返回 ''(空字符串)。
sys_language_uid
和语言代码之间是否存在映射,或者换句话说,我在哪里/如何找到默认语言(代码)?
更深入一点:
sys_language_id
和语言代码之间存在映射。
您正在通过实例根目录上的
sys_language
记录(通过“页面”uid 0 上的列表模块)设置网站可用的语言。这些记录包含一个选择字段 static_lang_isocode
,您可以在其中为要创建/编辑的语言记录选择相应的 ISO 2 字符代码。这允许获取给定的任何语言 uid 的 2 字符代码。
只要您正确插入页面语言,您就会有一个映射,可以这么说。 除了 对于 uid
0
,如 konsolenfreddy 所写。
您可能需要在 TypoScript 中初始化语言:
config {
sys_language_uid = 0
language = de
locale_all = de_DE.UTF-8
htmlTag_langKey = de_DE
}
[globalVar = GP:L = 1]
config {
sys_language_uid = 1
language = en
locale_all = en_EN.UTF-8
htmlTag_langKey = en_EN
}
[end]
这将默认为德语并在您的情况下返回“de”
问题和答案有点过时了:
注意:我添加了信息数据类型,不应复制,因为没有必要。
这是前端的:
(1) 例如,如果您在控制器中,则可以使用请求对象 (
$this-request
)。
/** \TYPO3\CMS\Core\Site\Entity\SiteLanguage $language */
$language = $this->request->getAttribute('language');
// Locale, like 'de_CH' or 'en_GB'
$locale = $language->getLocale();
// or get language id
/** int $lanuageId */
$languageId = $language->getLanguageId();
(2)使用语言方面
$languageAspect = GeneralUtility::makeInstance(Context::class)->getAspect('language');
$languageId = $languageAspect->getId();